DASAR TEORI DETEKSI TEPI SOBEL PROGRAM SELENGKAPNYA ADALAH SEBAGAI BERIKUT

10. Tambahkan button ke form, dengan cara pilih menu standart, button, lalu

klik ke form Gambar 8.10 Menu Button 11. Pada oject inspector rubah properti captionnya dengan nama Open, kemudian namenya dengan nama btOpen. Gambar 8.11 Button Open 12. Tambahkan OpenPictureDialog ke form, dengan cara pilih menu dialog, OpenPictureDialog, lalu klik ke form. Gambar 8.12 Menu OpenPictureDialog 13. Hasilnya sebagai berikut. Gambar 8.13 Hasil OpenPictureDialog

14. Doble klik button open kemudian ketik program yang di hurup tebal

berikut. var FormSobel: TFormSobel; FileNameImg: string; implementation {R .dfm} procedure TFormSobel.btOpenClickSender: TObject; begin if OpenPictureDialog1.Execute then begin FileNameImg := OpenPictureDialog1.FileName; Caption := Deteksi Tepi Sobel : + 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 Sobel dan Namenya dengan nama btSobel. Gambar 8.14 Button Sobel

16. Tambahkan unit baru, dengan cara file, new unit.

Gambar 8.15 New Unit

17. Simpan unitnya dengan cara save as.

Gambar 8.16 Save As

18. Berinama unitnya dengan nama UnitImageProses.

Gambar 8.17 Save UnitImageProses 19. Hasilnya sebagai berikut. Gambar 8.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 FormSobel, caranya klik unitSobel

Gambar 8.19 Kembali ke FormSobel

22. Lalu klik toggle form.

Gambar 8.20 Menu Toggle

23. Doble klik button Sobel.

Gambar 8.21 Button Sobel 24. Lalu ketik program berikut procedure TFormSobel.btSobelClickSender: TObject; begin Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic; Sobel; end;

25. Di bawah private tulis program tertulis huruf tebal berikut:

private procedure Sobel; 26. Dibawah procedure TformaSobel.btSobelClickSender. Tobject ketik program tertulis hurup tebal berikut: procedure TFormSobel.btSobelClickSender: TObject; begin Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic; Sobel; end; procedure TFormSobel.Sobel; 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; 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+sobel[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+sobel[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 8.22 Button Exit

29. Doble klik button Exit, lalu ketik program berikut.

procedure TFormSobel.btExitClickSender: TObject; begin FormSobel.Close; end;

30. Simpan program dengan cara save all.

31. Compiler progran dengan cara pilih menu Project, Compile ProjectSobel. Gambar 8.23 Compiler ProjectSobel 32. Lalu jalankan progran dengan cara pilih menu Run, Run. Gambar 8.24 Menu Run 33. Hasil sebagai berikut. Gambar 8.25 Hasil Mammografi Gambar 8.26 Hasil Photo

34. Keluar dari program klik button Exit.

8.3 PROGRAM SELENGKAPNYA ADALAH SEBAGAI BERIKUT

unit UnitSobel; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtDlgs, StdCtrls, ExtCtrls, ComCtrls; type TFormSobel = classTForm Image1: TImage; Image2: TImage; btOpen: TButton; OpenPictureDialog1: TOpenPictureDialog; btSobel: TButton; btExit: TButton; procedure btOpenClickSender: TObject; procedure btSobelClickSender: TObject; procedure btExitClickSender: TObject; private procedure Sobel; public { Public declarations } end; var FormSobel: TFormSobel; FileNameImg: string; implementation {R .dfm} uses UnitImageProses; procedure TFormSobel.btOpenClickSender: TObject; begin if OpenPictureDialog1.Execute then begin FileNameImg := OpenPictureDialog1.FileName; Caption := Deteksi Tepi Sobel : + OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile OpenPictureDialog1.FileName; Image2.Visible := False; end; end; procedure TFormSobel.btSobelClickSender: TObject; begin Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic; Sobel; end; procedure TFormSobel.Sobel; const sobel : array[0..1,0..2,0..2] of smallint= { sobel modifikasi -1,0,1,-2,0,2,-1,0,1, -1,-1,-1,0,0,0,1,2,1; } -1,0,1,-2,0,2,-1,0,1, -1,-2,-1,0,0,0,1,2,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+sobel[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+sobel[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 TFormSobel.btExitClickSender: TObject; begin FormSobel.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 9 DETEKSI TEPI PREWITT

9.1 DASAR TEORI DETEKSI TEPI PREWITT Operator Prewitt adalah salah satu operator yang menghindari adanya perhitungan gradien di titik interpolasi. Operator ini menggunakan kernel ukuran 3 x 3 piksel untuk perhitungan gradien sehingga perkiraan gradien berada tepat di tengah jendela. Misalnya susunan piksel-piksel di sekitar piksel x,y adalah: a0 a1 a2 a7 x,y a3 a6 a5 a4 Berdasarkan susunan piksel tetangga tersebut, besaran gradien yang dihitung menggunakan operator Prewitt adalah: = 2 + 2 ……………………………………………………………………………..9.1 Dengan M adalah besar gradien di titik tengah kernel dan turunan parsial dihitung menggunakan persamaan berikut. Sx = a2 + ca3 + a4 – a0 + ca7 + a6………………………………9.2 Sy = a0 + ca1 + a2 – a6 + ca5 + a4………………………………9.3 Dengan c adalah konstanta yang bernilai 1, Sx dan Sy diimplementasikan menjadi kernel berikut. -1 1 -1 1 -1 1 1 1 1 -1 -1 -1 Sx = Sy=

9.2 CARA

MEMBUAT PROGRAM PREWITT LAKUKAN LANGKAH BERIKUT:

1. Buka program delphi, dengan cara pilih menu start, program borland delphi 7, delphi 7.

Gambar 9.1 Start Program

2. Kemudian pilih menu file, new, application.

Gambar 9.2 New Application 3. Pada object inspector, ubah properti captionnya dengan nama Deteksi Tepi Prewitt, dan namenya dengan nama FormPrewitt. Gambar 9.3 Form Prewitt

4. Simpan unit dan projectnya dengan cara save all.

Gambar 9.4 Save All

5. Beri nama unitnya dengan nama UnitPrewitt.

Gambar 9.5 Save UnitPrewitt

6. Beri nama projectnya dengan nama ProjectPrewitt.

Gambar 9.6 Save ProjectPrewitt

7. Tambahkan image ke form dengan cara pilih menu Additional, image, lalu klik

ke form. Gambar 9.7 Menu Image

8. Pada Properties rubah stretchnya ke true dan autosizenya true.

Gambar 9.8 Stretch True 9. Dengan cara yang sama tambahkan image2 di sebelah kanan image1 kemudian ubah stretchnya ke true dan autosizenya true. Gambar 9.9 Penambahan Image 2

10. Tambahkan button ke form, dengan cara pilih menu standart, button, lalu

klik ke form Gambar 9.10 Menu Button 11. Pada oject inspector rubah properti captionnya dengan nama Open, kemudian namenya dengan nama btOpen. Gambar 9.11 Button Open