9. Dengan cara yang sama tambahkan image2 di sebelah kanan image1 kemudian ubah stretchnya ke true dan autosizenya true.
Gambar 10.9 Penambahan Image 2
10. Tambahkan button ke form, dengan cara pilih menu standart, button, lalu
klik ke form
Gambar 10.10 Menu Button
11. Pada oject inspector rubah properti captionnya dengan nama Open, kemudian namenya dengan nama btOpen.
Gambar 10.11 Button Open
12. Tambahkan OpenPictureDialog ke form, dengan cara pilih menu dialog, OpenPictureDialog, lalu klik ke form.
Gambar 10.12 Menu OpenPictureDialog 13. Hasilnya sebagai berikut.
Gambar 10.13 Hasil OpenPictureDialog
14. Doble klik button open kemudian ketik program yang di hurup tebal
berikut. var
FormRobert: TFormRobert; FileNameImg: string;
implementation {R .dfm}
procedure TFormRobert.btOpenClickSender: TObject; begin
if OpenPictureDialog1.Execute then begin
FileNameImg := OpenPictureDialog1.FileName; Caption := Deteksi Tepi Robert : + OpenPictureDialog1.FileName;
Image1.Picture.LoadFromFile OpenPictureDialog1.FileName; Image2.Visible := False;
end; end;
end.
15. Tambahkan button pada form, pada object inspector rubah properties captionnya dengan nama Robert dan Namenya dengan nama btRobert.
Gambar 10.14 Button Robert
16. Tambahkan unit baru, dengan cara file, new unit.
Gambar 10.15 New Unit
17. Simpan unitnya dengan cara save as.
Gambar 10.16 Save as
18. Berinama unitnya dengan nama UnitImageProses.
Gambar 10.17 Save UnitImageProses 19. Hasilnya sebagai berikut.
Gambar 10.18 Hasil UnitImageProses
20. Ketik program berikut ke dalam UnitImageProses.
unit UnitImageProses; interface
uses WINPROCS, Graphics, ExtCtrls, ComCtrls, Variants;
type TFreqHist = array [0..255] of longint;
TMatrixFilter = array [1..16,1..16] of real; function RgbToGray Clr:TColor : byte;
function ImgGetGray var Image:TImage; x,y:integer : byte; procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1:
TProgressBar; implementation
const PercentR = 0.299;
PercentG = 0.587; PercentB = 0.114;
function ByteRange r:double : byte; begin
if r0 then ByteRange:=0 else if r255 then ByteRange:=255
else ByteRange:=Roundr; end;
function RgbToGray Clr:TColor : byte; var r,g,b:byte;
begin r := GetRValueClr;
g := GetGValueClr; b := GetBValueClr;
RgbToGray := ByteRange rPercentR + gPercentG + bPercentB; end;
function ImgGetGray var Image:TImage; x,y:integer : byte; begin
Result := RgbToGray Image.Canvas.Pixels[x,y]; end;
procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1: TProgressBar;
var x,y:integer; ClrGray:byte; begin
ProgressBar1.Max := Image1.Width-1; ProgressBar1.Position := 0;
for x:=0 to Image1.Width-1 do begin
for y:=0 to Image1.Height-1 do begin
ClrGray := ImgGetGray Image1,x,y; Image1.Canvas.Pixels[x,y] := RGB ClrGray,ClrGray,ClrGray;
end; Image1.Repaint;
ProgressBar1.Position := x; end;
end; end.
21. Kembali ke FormRobert, caranya klik unitRobert
Gambar 10.19 Kembali Ke FormRobert
22. Lalu klik toggle form.
Gambar 10.20 Menu Toggle
23. Doble klik button Robert.
Gambar 10.21 Button Robert 24. Lalu ketik program berikut yang tercetak tebal.
procedure TFormRobert.btRobertClickSender: TObject; begin
Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic;
Robert; end;
25. Di bawah private tulis program tertulis huruf tebal berikut:
private
procedure Robert; 26. Dibawah procedure TformaRobert.btRobertClickSender. Tobject ketik
program tertulis hurup tebal berikut:
procedure TFormRobert.btRobertClickSender: TObject; begin
Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic;
Robert; end;
procedure TFormRobert.Robert; const robert : array[0..1,0..1,0..1] of smallint=
1,0,0,-1, -1,0,0,1; var
row:array[0..8] of pbytearray; col:pbytearray;
x,y:smallint; i,j,k,p:smallint;
image:tbitmap; sum,jum:longint;
begin p:=-120;
image:=Tbitmap.Create; image.AssignImage1.Picture.Bitmap;
for y:=1 to Image1.Height-2 do begin
for i:=-1 to 1 do row[i+1]:=image.ScanLine[y+i];
col:=Image1.Picture.Bitmap.ScanLine[y]; x:=3;
repeat sum:=0;
for i:=-1 to 1 do for j:=-1 to 1 do
sum:=sum+Robert[0,i+1,j+1]row[i+1,x+j3]; jum:=0;
for i:=-1 to 1 do for j:=-1 to 1 do
jum:=jum+Robert[1,i+1,j+1]row[i+1,x+j3]; sum:=sum+jum+p;
if sum255 then sum:=255; if sum0 then sum:=0;
for k:=0 to 2 do col[x+k]:=sum; incx,3;
until x=3Image1.Width-4; end;
Image2.picture.bitmap:=Image1.Picture.Bitmap; image.free;
end;
27. Di bawah implementasi ketik program yang tertulis huruf tebal berikut.
implementation {R .dfm}
uses UnitImageProses;
28. Tambahkan button ke form, lalu pada object inspector rubah properties captionnya dengan nama Exit dan namenya dengan nama btExit.
Gambar 10.22 Button Exit
29. Doble klik button Exit, lalu ketik program berikut.
procedure TFormRobert.btExitClickSender: TObject; begin
FormRobert.Close; end;
30. Simpan program dengan cara save all.
31. Compiler progran dengan cara pilih menu Project, Compile ProjectRobert.
Gambar 10.23 Compiler ProjectRobert 32. Lalu jalankan progran dengan cara pilih menu Run, Run.
Gambar 10.24 Menu Run 33. Hasil sebagai berikut.
Gambar 10.25 Hasil Program Robert
34. Keluar dari program klik button Exit.
10.3 PROGRAM DETEKSI TEPI ROBERT SELENGKAPNYA ADALAH SEBAGAI
BERIKUT:
unit UnitRobert; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtDlgs, StdCtrls, ExtCtrls; type
TFormRobert = classTForm Image1: TImage;
Image2: TImage; btOpen: TButton;
OpenPictureDialog1: TOpenPictureDialog; btRobert: TButton;
btExit: TButton; procedure btOpenClickSender: TObject;
procedure btRobertClickSender: TObject; procedure btExitClickSender: TObject;
private procedure Robert;
public { Public declarations }
end; var
FormRobert: TFormRobert; FileNameImg: string;
implementation {R .dfm}
uses UnitImageProses;
procedure TFormRobert.btOpenClickSender: TObject; begin
if OpenPictureDialog1.Execute then begin
FileNameImg := OpenPictureDialog1.FileName; Caption := Deteksi Tepi Robert : + OpenPictureDialog1.FileName;
Image1.Picture.LoadFromFile OpenPictureDialog1.FileName;
Image2.Visible := False; end;
end; procedure TFormRobert.btRobertClickSender: TObject;
begin Image2.Visible := True;
Image2.Picture.Graphic := Image1.Picture.Graphic; Robert;
end; procedure TFormRobert.Robert;
const robert : array[0..1,0..1,0..1] of smallint= 1,0,0,-1, -1,0,0,1;
var row:array[0..8] of pbytearray;
col:pbytearray; x,y:smallint;
i,j,k,p:smallint; image:tbitmap;
sum,jum:longint; begin
p:=-120; image:=Tbitmap.Create;
image.AssignImage1.Picture.Bitmap; for y:=1 to Image1.Height-2 do
begin for i:=-1 to 1 do
row[i+1]:=image.ScanLine[y+i]; col:=Image1.Picture.Bitmap.ScanLine[y];
x:=3; repeat
sum:=0; for i:=-1 to 1 do
for j:=-1 to 1 do sum:=sum+Robert[0,i+1,j+1]row[i+1,x+j3];
jum:=0; for i:=-1 to 1 do
for j:=-1 to 1 do jum:=jum+Robert[1,i+1,j+1]row[i+1,x+j3];
sum:=sum+jum+p; if sum255 then sum:=255;
if sum0 then sum:=0; for k:=0 to 2 do col[x+k]:=sum;
incx,3; until x=3Image1.Width-4;
end;
Image2.picture.bitmap:=Image1.Picture.Bitmap; image.free;
end; procedure TFormRobert.btExitClickSender: TObject;
begin FormRobert.Close;
end; end.
unit UnitImageProses; interface
uses WINPROCS, Graphics, ExtCtrls, ComCtrls, Variants;
type TFreqHist = array [0..255] of longint;
TMatrixFilter = array [1..16,1..16] of real; function RgbToGray Clr:TColor : byte;
function ImgGetGray var Image:TImage; x,y:integer : byte; procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1:
TProgressBar; implementation
const PercentR = 0.299;
PercentG = 0.587; PercentB = 0.114;
function ByteRange r:double : byte; begin
if r0 then ByteRange:=0 else if r255 then ByteRange:=255
else ByteRange:=Roundr; end;
function RgbToGray Clr:TColor : byte; var r,g,b:byte;
begin r := GetRValueClr;
g := GetGValueClr;
b := GetBValueClr; RgbToGray := ByteRange rPercentR + gPercentG + bPercentB;
end; function ImgGetGray var Image:TImage; x,y:integer : byte;
begin Result := RgbToGray Image.Canvas.Pixels[x,y];
end; procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1:
TProgressBar; var x,y:integer; ClrGray:byte;
begin ProgressBar1.Max := Image1.Width-1;
ProgressBar1.Position := 0; for x:=0 to Image1.Width-1 do
begin for y:=0 to Image1.Height-1 do
begin ClrGray := ImgGetGray Image1,x,y;
Image1.Canvas.Pixels[x,y] := RGB ClrGray,ClrGray,ClrGray; end;
Image1.Repaint; ProgressBar1.Position := x;
end; end;
end.
BAB 11 LOW PASS FILTER
11.1 DASAR TEORI LOW PASS FILTER
Low pass filter gunanya untuk menghilangkan noise, dengan cara meloloskan komponen yang berfrekuensi rendah dan menekan komponen yang berfrekuensi
tinggi. Rumus yang dipakai adalah:
Gx,y = fx,y hx,y…………….………………………………………….11.1 Dengan :
Gx,y adalah hasil low pass. fx,y adalah citra awal..
hx,y adalah template low pass filter.
Aturan low pass filter adalah semua koefisien harus positif. Templete yang dipakai sebagai low pass filter adalah:
1 1
1 1
1 1
1 1
1
11.2 CARA MEMBUAT PROGRAM LOW PASS FILTER ADALAH SEBAGAI BERIKUT:
1. Buka program delphi, dengan cara pilih menu start, program borland delphi 7, delphi 7.
Gambar 11.1 Start Program
2. Kemudian pilih menu file, new, application.
Gambar 11.2 New Application
3. Pada object inspector, ubah properti captionnya dengan nama Low Pass Filter, dan namenya dengan nama FormLowPassFilter.
Gambar 11.3 Form LowPassFilter
4. Simpan unit dan projectnya dengan cara save all.
Gambar 11.4 Save All
5. Beri nama unitnya dengan nama UnitLowPassFilter.
Gambar 11.5 Save UnitLowPassFilter
6. Beri nama projectnya dengan nama ProjectLowPassFilter
Gambar 11.6 Save ProjectLowPassFilter
7. Tambahkan image ke form dengan cara pilih menu Additional, image, lalu
klik ke form.
Gambar 11.7 Menu Image
8. Rubah stretchnya ke true dan Autosizenya true.
Gambar 11.8 Stretch True
9. Dengan cara yang sama tambahkan image2 di sebelah kanan image1 kemudian ubah stretchnya ke true dan autosizenya true
Gambar 11.9 Penambahan Image 2
10. Tambahkan button ke form, dengan cara pilih menu standart, button, lalu
klik ke form
Gambar 11.10 Menu Button
11. Pada oject inspector rubah properti captionnya dengan nama Open, kemudian namenya dengan nama btOpen.
Gambar 11.11 Button Open
12. Tambahkan OpenPictureDialog ke form, dengan cara pilih menu dialog, OpenPictureDialog, lalu klik ke form.
Gambar 11.12 Menu OpenPictureDialog 13. Hasilnya sebagai berikut.
Gambar 11.13 Hasil OpenPictureDialog
14. Doble klik button open kemudian ketik program yang di hurup tebal
berikut. var
FormLowPassFilter: TFormLowPassFilter; FileNameImg: string;
implementation {R .dfm}
procedure TFormLowPassFilter.btOpenClickSender: TObject; begin
if OpenPictureDialog1.Execute then begin
FileNameImg := OpenPictureDialog1.FileName; Caption := LowPassFilter : + OpenPictureDialog1.FileName;
Image1.Picture.LoadFromFile OpenPictureDialog1.FileName; Image2.Visible := False;
end;
end;
15. Tambahkan button pada form, pada object inspector rubah properties captionnya dengan nama Low Pass Filter dan Namenya dengan nama
btLowPassFilter.
Gambar 11.14 Button Low Pass Filter
16. Tambahkan unit baru, dengan cara file, new unit.