DASAR TEORI DETEKSI TEPI ROBERT PROGRAM DETEKSI TEPI ROBERT SELENGKAPNYA ADALAH SEBAGAI

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.