RSS

Ekspresi Wajah





"Dosen Pembimbing MK Statistika Fadlisyah"

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ExtDlgs, ExtCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;

    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    MainMenu1: TMainMenu;
    Image1: TImage;
    OpenPictureDialog1: TOpenPictureDialog;
    File1: TMenuItem;
    OpenImageBMP1: TMenuItem;
    Perlakuan1: TMenuItem;
    Grayscale1: TMenuItem;
    EdgeDetection1: TMenuItem;
    Statistik1: TMenuItem;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure RadioButton3Click(Sender: TObject);
    procedure RadioButton4Click(Sender: TObject);
    procedure OpenImageBMP1Click(Sender: TObject);
    procedure Grayscale1Click(Sender: TObject);
    procedure EdgeDetection1Click(Sender: TObject);
    procedure Statistik1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;
  gambar      : Tbitmap;
  Fi,Fj,Fk,Fl : Textfile;
  NamaArsip   : String;
  stdfi       : real;
  stdfj       : real;
  stdfk       : real;
  stdfl       : real;
  tampung_std : real;
  c1,c2,c3,c4 : byte;



implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
button4.Visible:=true;
tampung_std:=strtofloat(edit5.Text);
stdfi:=stdfi+tampung_std;
inc(c1,1);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
button5.Visible:=true;
tampung_std:=strtofloat(edit5.Text);
stdfj:=stdfj+tampung_std;
inc(c2,1);

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
button7.Visible:=true;
tampung_std:=strtofloat(edit5.Text);
stdfk:=stdfk+tampung_std;
inc(c3,1);

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
writeln(Fi,floattostr(stdfi/c1));
CloseFile(Fi)

end;

procedure TForm1.Button5Click(Sender: TObject);
begin
writeln(Fj,floattostr(stdfj/c2));
CloseFile(Fj)

end;

procedure TForm1.Button6Click(Sender: TObject);
begin
openimagebmp1.click;
Grayscale1.click;
EdgeDetection1.Click;
statistik1.Click;
button8.Visible:=true;

end;

procedure TForm1.Button7Click(Sender: TObject);
begin
writeln(Fk,floattostr(stdfk/c3));
CloseFile(Fk)

end;

procedure TForm1.Button8Click(Sender: TObject);
var bebank1, bebank2, bebank3, bebank4  : string;
    probabilitas1                       : real;

begin
//probabilitas kategori 1..............................
  NamaArsip:='k1.txt';
  AssignFile(Fi,NamaArsip);
  reset(Fi);
  while not Eof(Fi) do Readln(Fi,bebank1);
  closefile(fi);
  if edit5.text<>'' then
    begin
    if strtofloat(bebank1)>=strtofloat(edit5.Text) then
      edit6.text:= floattostr(strtofloat(edit5.Text)/strtofloat(bebank1));
    if strtofloat(bebank1)<strtofloat(edit5.Text) then
      edit6.text:= floattostr(strtofloat(bebank1)/strtofloat(edit5.Text));
    end;
//probabilitas kategori 2..............................
  NamaArsip:='k2.txt';
  AssignFile(Fi,NamaArsip);
  reset(Fi);
  while not Eof(Fi) do Readln(Fi,bebank2);
  closefile(fi);
  if edit5.text<>'' then
    begin
    if strtofloat(bebank2)>=strtofloat(edit5.Text) then
      edit7.text:= floattostr(strtofloat(edit5.Text)/strtofloat(bebank2));
    if strtofloat(bebank2)<strtofloat(edit5.Text) then
      edit7.text:= floattostr(strtofloat(bebank2)/strtofloat(edit5.Text));
    end;
//probabilitas kategori 3..............................
  NamaArsip:='k3.txt';
  AssignFile(Fi,NamaArsip);
  reset(Fi);
  while not Eof(Fi) do Readln(Fi,bebank3);
  closefile(fi);
  if edit5.text<>'' then
    begin
    if strtofloat(bebank3)>=strtofloat(edit5.Text) then
      edit8.text:= floattostr(strtofloat(edit5.Text)/strtofloat(bebank3));
    if strtofloat(bebank3)<strtofloat(edit5.Text) then
      edit8.text:= floattostr(strtofloat(bebank3)/strtofloat(edit5.Text));
    end;
//probabilitas kategori 4..............................
  NamaArsip:='k4.txt';
  AssignFile(Fi,NamaArsip);
  reset(Fi);
  while not Eof(Fi) do Readln(Fi,bebank4);
  closefile(fi);
  if edit5.text<>'' then
    begin
    if strtofloat(bebank4)>=strtofloat(edit5.Text) then
      edit9.text:= floattostr(strtofloat(edit5.Text)/strtofloat(bebank4));
    if strtofloat(bebank4)<strtofloat(edit5.Text) then
      edit9.text:= floattostr(strtofloat(bebank4)/strtofloat(edit5.Text));
    end;

end;      //end procedural loadklasi



procedure TForm1.Button9Click(Sender: TObject);
begin
button10.Visible:=true;
tampung_std:=strtofloat(edit5.Text);
stdfl:=stdfl+tampung_std;
inc(c4,1);

end;

procedure TForm1.Button10Click(Sender: TObject);
begin
writeln(Fl,floattostr(stdfl/c4));
CloseFile(Fl)

end;

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
button1.Visible:=true;
  //----------------------------------
  NamaArsip:='k1.txt';
  AssignFile(Fi,NamaArsip);
  rewrite(Fi);
  //------------------------------------
  c1:=0;

end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
button2.Visible:=true;
  //----------------------------------
  NamaArsip:='k2.txt';
  AssignFile(Fj,NamaArsip);
  rewrite(Fj);
  //------------------------------------
  c2:=0;

end;

procedure TForm1.RadioButton3Click(Sender: TObject);
begin
button3.Visible:=true;
  //----------------------------------
  NamaArsip:='k3.txt';
  AssignFile(Fk,NamaArsip);
  rewrite(Fk);
  //------------------------------------
  c3:=0;

end;

procedure TForm1.RadioButton4Click(Sender: TObject);
begin
button9.Visible:=true;
  //----------------------------------
  NamaArsip:='k4.txt';
  AssignFile(Fl,NamaArsip);
  rewrite(Fl);
  //------------------------------------
  c4:=0;

end;

procedure TForm1.OpenImageBMP1Click(Sender: TObject);
begin
if not OpenPictureDialog1.Execute then exit else
    begin
        gambar := TBitmap.Create;
        gambar.LoadFromFile(OpenPictureDialog1.filename);
    end;
   if gambar.PixelFormat <> pf24bit then  gambar.PixelFormat := Pf24bit;
   Image1.Picture.Bitmap := gambar;

end;

procedure TForm1.Grayscale1Click(Sender: TObject);
var temp  : PByteArray;
    i,j   : integer;
    x,cek : byte;

begin
gambar := TBitmap.Create;

   gambar.LoadFromFile(OpenPictureDialog1.filename);
   Form1.Caption:='Image Processing - '+ExtractFileName(OpenPictureDialog1.Filename);

   if gambar.PixelFormat <> pf24bit then  gambar.PixelFormat := Pf24bit;
   Image1.Picture.Bitmap := gambar;

   for j:=0 to gambar.Height-1 do
     begin
        temp := gambar.ScanLine[j];
        i:=0;
        repeat
    x :=round((0.11*temp[i])+(0.59*temp[i+1])+(0.3*temp[i+2]));
          for cek:=0 to 2 do
             temp[i+cek]:=x;
          inc(i,3);
        until i >= 3*gambar.Width-1;
     end;
    Image1.Picture.Bitmap := gambar;
    gambar.SaveToFile('-grayscale.bmp');


end;

procedure TForm1.EdgeDetection1Click(Sender: TObject);
const sobel : array[0..1,0..2,0..2] of smallint =
      (((-1,0,1),(-2,0,2),(-1,0,1)),
       ((-1,-2,-1),(0,0,0),(1,2,1)));
      prewitt : array[0..1,0..2,0..2] of smallint =
      (((-1,0,1),(-1,0,1),(-1,0,1)),
       ((-1,-1,-1),(0,0,0),(1,1,1)));


var row        : array[0..8] of pbytearray;
    col        : pbytearray;
    x,y        : smallint;
    i,j,k,peka : smallint;
    image      : tbitmap;
    sum,jum    : longint;

begin
Peka:=-120;

 image := tbitmap.Create;
 Image.Assign(gambar);
 for y:=1 to gambar.Height-2 do
  begin
   for i:=-1 to 1 do
      row[i+1]:= Image.ScanLine[y+i];
      col := gambar.ScanLine[y];
      x:=3;
   repeat
              sum := 0;
              for i:=-1 to 1 do
                for j:=-1 to 1 do
                  sum:=sum+(sobel[0,i+1,j+1]*row[i+1,x+j*3]);
              jum:=0;
              for i:=-1 to 1 do
                for j:=-1 to 1 do
                  jum:=jum+(sobel[1,i+1,j+1]*row[i+1,x+j*3]);
             sum := (sum + jum)+peka;
             if sum>255 then sum:=255;
             if sum<0 then sum:=0;
            for k:=0 to 2 do col[x+k]:=sum;
         inc(x,3);
   until x>=3*(gambar.Width-4);
  end;
 Image1.Picture.bitmap := gambar;
 gambar.SaveToFile('EDGEDE.bmp');
 Image.free;


end;

procedure TForm1.Statistik1Click(Sender: TObject);
var temp  : PByteArray;
    i,j   : integer;
    x     : byte;
    Nit   : byte;
    Total : integer;
    Jumtot: integer;
    rata  : real;
    tampung : array [0..256] of integer;
    varians : real;

begin
Total:=0;
Jumtot:=0;
for i:=0 to 255 do
          tampung[i]:=0;
gambar := TBitmap.Create;
gambar := Image1.Picture.Bitmap;
//Image3.Picture.Bitmap := gambar;
   for j:=0 to gambar.Height-1 do
     begin
        temp := gambar.ScanLine[j];
        i:=0;
        repeat
             Nit:=round((temp[i]+temp[i+1]+temp[i+2])/3);
             Total:=Total+Nit;
             tampung[nit]:=tampung[nit]+1;
             inc(Jumtot,1);
           

          inc(i,3);
        until i >= 3*gambar.Width-1;
     end;
//--------------------------------
rata:=Total/Jumtot;
edit1.Text:=inttostr(Total);
edit2.Text:=inttostr(Jumtot);
edit3.Text:=floattostr(rata);
//-----------------varians setara dengan nilai inten - rata kuadrat kali prob
for j:=0 to gambar.Height-1 do
     begin
        temp := gambar.ScanLine[j];
        i:=0;
        repeat
             Nit:=round((temp[i]+temp[i+1]+temp[i+2])/3);
             varians:=varians+(sqr(nit-rata)*(tampung[nit]/Jumtot));
           

          inc(i,3);
        until i >= 3*gambar.Width-1;
     end;
     //-------------------------------------------------
     edit4.Text:=floattostr(varians);
     edit5.Text:=floattostr(sqrt(varians));


end;

end.

0 komentar: