interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, VLDSCapture, Menus, VLCommonFilter, VLResize, VLGrayScale,
LPComponent, VLBasicGenericFilter, VLGenericFilter,
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Button1: TButton;
Button2: TButton;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
StringGrid1: TStringGrid;
VLImageDisplay1: TVLImageDisplay;
VLImageDisplay2: TVLImageDisplay;
VLImageDisplay3: TVLImageDisplay;
VLGenericFilter1: TVLGenericFilter;
VLGenericFilter2: TVLGenericFilter;
VLGenericFilter3: TVLGenericFilter;
VLGrayScale1: TVLGrayScale;
VLResize1: TVLResize;
MainMenu1: TMainMenu;
File1: TMenuItem;
Latihan1: TMenuItem;
LoadData1: TMenuItem;
VLDSCapture1: TVLDSCapture;
procedure VLGenericFilter2ProcessData(Sender: TObject;
InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
var SendOutputData: Boolean);
procedure VLGenericFilter3ProcessData(Sender: TObject;
InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
var SendOutputData: Boolean);
procedure VLGenericFilter1ProcessData(Sender: TObject;
InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
var SendOutputData: Boolean);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure Latihan1Click(Sender: TObject);
procedure LoadData1Click(Sender: TObject);
procedure VLGenericFilter3Start(Sender: TObject; var AWidth,
AHeight: Integer; AFrameDelay: Real);
procedure VLGenericFilter3Stop(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
Fbitmap : TVLBitmap ;
public
{ Public declarations }
end;
var
Form1: TForm1;
x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18 : integer;
konstanta : byte;
datatemp : array[0..255] of real;
t_mean, t_var, t_std,
t_kurto, t_skew, t_entro : real;
face, simwaj, rekogn : boolean;
koefi,koefir : real;
xa,ya,xb,yb : integer;
mean_sa, var_sa, std_sa,
kurto_sa, skew_sa, entro_sa : real;
kenal : boolean;
gambar : TBitmap ;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.VLGenericFilter2ProcessData(Sender: TObject;
InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
var SendOutputData: Boolean);
var x,y,z,w,z_k,w_k : integer;
l : byte;
sigma, mean, varians, std, skewness, kurtosis, entropy : real;
tambah : integer;
begin
w:=0;z:=0;sigma:=0;face:=false;
//-----------------------------------
for x := 5 to OutBuffer.Width - (konstanta) do
for y := 5 to OutBuffer.Height - (konstanta) do
if inbuffer.red[x,y]>200 then
if face=false then
begin
z_k:=x+konstanta;z:=x;
w_k:=y+konstanta;w:=y; tambah:=0;
for z:=x to (z_k) do
for w:=y to (w_k) do
begin //*
datatemp[inbuffer.red[z,w]]:=datatemp[inbuffer.red[z,w]]+1;
inc(tambah);
end; //*
for l:=0 to 255 do //Hitung mean
if datatemp[l]<>0 then
begin
sigma:=sigma+ (l*datatemp[l]/tambah);
end;
mean:=sigma;sigma:=0;
edit1.Text:=floattostr(mean);
//------------------------------------------
for l:=0 to 255 do //Hitung variance
if datatemp[l]<>0 then
begin
sigma:=sigma+ ((sqr(l-mean))*(datatemp[l]/tambah));
end;
varians:=sigma;sigma:=0;
std:=sqrt(varians);
edit2.Text:=floattostr(varians);
edit3.Text:=floattostr(std);
//---------------------------------------------------
for l:=0 to 255 do //Hitung skewness
if datatemp[l]<>0 then
begin
sigma:=sigma+ ((sqr(l-mean)*(l-mean))*(datatemp[l]/tambah));
end;
skewness:=sigma/(std*std*std);sigma:=0.0;
edit4.Text:=floattostr(skewness);
//---------------------------------------------------
for l:=0 to 255 do //Hitung kurtosis
if datatemp[l]<>0 then
begin
sigma:=sigma+ (((sqr(sqr(l-mean)))* (datatemp[l]/tambah))-3);
end;
kurtosis:=sigma/(sqr(sqr(std)));sigma:=0.0;
for l:=0 to 255 do //Hitung entropy
if datatemp[l]<>0 then
begin
sigma:=sigma+ (((datatemp[l]/tambah))*(ln(datatemp[l]/tambah)/ln(2)));
end;
entropy:=-1*sigma;sigma:=0.0;
edit5.Text:=floattostr(kurtosis);
edit6.Text:=floattostr(entropy);
//------------------------------------------------
if abs(mean-t_mean)<(koefi) then
if abs(skewness-t_skew)<koefi then
if abs(kurtosis-t_kurto)<(koefi) then
if abs(entropy-t_entro)<koefi then begin face:=true;xa:=x;ya:=y;
xb:=x+konstanta;yb:=y+konstanta;
if simwaj=true then //simpan wajah
begin
mean_sa:=mean; var_sa:=varians;
kurto_sa:=kurtosis; skew_sa:=skewness;
entro_sa:=entropy; simwaj:=false;
end;
if rekogn=true then //kenali berdasarkan bobot
if abs(mean-mean_sa)<(koefir) then
if abs(skewness-skew_sa)<koefir then
if abs(kurtosis-kurto_sa)<(koefir) then
if abs(entropy-entro_sa)<koefir then begin
kenal:=true;
end;
end;
end; //end if dan for
//-----------clear
for x:=0 to 255 do datatemp[x]:=0;
end;
procedure TForm1.VLGenericFilter3ProcessData(Sender: TObject;
InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
var SendOutputData: Boolean);
begin
if face=true then
begin
InBuffer.ToBitmap( FBitmap );
FBitmap.Canvas.Brush.Style := bsClear;
FBitmap.Canvas.Pen.Width := 2;
FBitmap.Canvas.Pen.Color := clred;
if kenal=true then
begin
FBitmap.Canvas.Pen.Color := clblue;
kenal:=false;
end;
FBitmap.Canvas.Rectangle( xa, ya, xb, yb);
OutBuffer.FromBitmap( FBitmap );
end;
face:=false;
end;
procedure TForm1.VLGenericFilter1ProcessData(Sender: TObject;
InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
var SendOutputData: Boolean);
var x,y,sobelx,sobely,sobel : integer;
begin
for x := 0 to OutBuffer.Width - 2 do
for y := 0 to OutBuffer.Height - 2 do
begin
sobelx:= (x1*inbuffer.red[x,y])+(x2*inbuffer.red[x+1,y])+(x3*inbuffer.red[x+2,y])+(x4*inbuffer.red[x,y+1])+(x5*inbuffer.red[x+1,y+1])+ (x6*inbuffer.red[x+2,y+1])+(x7*inbuffer.red[x,y+2])+(x8* inbuffer.red[x+1,y+2])+(x9*inbuffer.red[x+2,y+2]);
sobely:=(x10*inbuffer.blue[x,y])+(x11*inbuffer.blue[x+1,y])+ (x12*inbuffer.blue[x+2,y])+(x13*inbuffer.blue[x,y+1])+(x14* inbuffer.blue[x+1,y+1])+(x15*inbuffer.blue[x+2,y+1])+ (x16*inbuffer.blue[x,y+2])+(x17*inbuffer.blue[x+1, y+2])+ (x18*inbuffer.blue[x+2,y+2]);
sobel:=sobelx+sobely;
if sobel>100 then sobel:=255 else sobel:=0;
outbuffer.Red[x,y]:=sobel;
outbuffer.Green[x,y]:=sobel;
outbuffer.Blue[x,y]:=sobel;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
simwaj:=true;
button1.enabled:=false;
end;
procedure TForm1.FormActivate(Sender: TObject);
var x : byte;
begin
kenal:=false;
koefi:=7;
loaddata1.Click;
simwaj:=false;
konstanta:=25;
for x:=0 to 255 do datatemp[x]:=0;
//-------------------
x1:=-1;x2:=0;x3:=1;
x4:=-2;x5:=0;x6:=2;
x7:=-1;x8:=0;x9:=1;
//--------------------
x10:=1;x11:=2;x12:=1;
x13:=0;x14:=0;x15:=0;
x16:=-1;x17:=-2;x18:=-1;
//---------------------
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
rekogn:=true;
koefir:=2;
button2.Enabled:=false;
end;
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
//-------------------
x1:=-1;x2:=-1;x3:=-1;
x4:=-1;x5:=8;x6:=-1;
x7:=-1;x8:=-1;x9:=-1;
//--------------------
x10:=1;x11:=-2;x12:=1;
x13:=-2;x14:=4;x15:=-2;
x16:=1;x17:=-2;x18:=1;
//---------------------
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
//-------------------
x1:=-1;x2:=0;x3:=1;
x4:=-2;x5:=0;x6:=2;
x7:=-1;x8:=0;x9:=1;
//--------------------
x10:=1;x11:=2;x12:=1;
x13:=0;x14:=0;x15:=0;
x16:=-1;x17:=-2;x18:=-1;
//---------------------
end;
procedure TForm1.Latihan1Click(Sender: TObject);
begin
VLDSCapture1.enabled:=false;
Form2.ShowModal;
end;
procedure TForm1.LoadData1Click(Sender: TObject);
var bebanW1 : string;
i, j : integer;
cacah : byte;
begin
cacah:=0;
t_mean:=0;
t_var:=0;
t_std:=0;
t_skew:=0;
t_kurto:=0;
t_entro:=0;
//---------------------------------- bobot wajah
NamaArsip:='wajah.txt';
AssignFile(Fj,NamaArsip);
reset(Fj);
//------------------------------------
i:=0;
while not Eof(Fj) do
begin
for j:=0 to 5 do
begin
Readln(Fj,bebanW1);
stringgrid1.Cells[j,i]:=bebanW1;
if cacah = 0 then t_mean:=t_mean+strtofloat(bebanW1);
if cacah = 1 then t_var:=t_var+strtofloat(bebanW1);
if cacah = 2 then t_std:=t_std+strtofloat(bebanW1);
if cacah = 3 then t_skew:=t_skew+strtofloat(bebanW1);
if cacah = 4 then t_kurto:=t_kurto+strtofloat(bebanW1);
if cacah = 5 then t_entro:=t_entro+strtofloat(bebanW1);
cacah:=cacah+1;
if cacah>5 then cacah:=0;
end;
i:=i+1;
end;
CloseFile(Fj);
stringgrid1.Rowcount:=i;
stringgrid1.Visible:=true;
t_mean:=t_mean/i;edit7.Text:=floattostr(t_mean);
t_var:=t_var/i;edit8.Text:=floattostr(t_var);
t_std:=t_std/i;edit9.Text:=floattostr(t_std);
t_skew:=t_skew/i;edit10.Text:=floattostr(t_skew);
t_kurto:=t_kurto/i;edit11.Text:=floattostr(t_kurto);
t_entro:=t_entro/i;edit12.Text:=floattostr(t_entro);
end;
procedure TForm1.VLGenericFilter3Start(Sender: TObject; var AWidth,
AHeight: Integer; AFrameDelay: Real);
begin
FBitmap := TVLBitmap.Create();
end;
procedure TForm1.VLGenericFilter3Stop(Sender: TObject);
begin
FBitmap.Free();
end;
end.
By : Fadlisyah


0 komentar:
Posting Komentar