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