11. Pada oject inspector rubah properti captionnya dengan nama Open, kemudian namenya dengan nama btOpen.
Gambar 7.11 Button Open
12. Tambahkan OpenPictureDialog ke form, dengan cara pilih menu dialog, OpenPictureDialog, lalu klik ke form.
Gambar 7.12 Menu OpenPictureDialog 13. Hasilnya sebagai berikut.
Gambar 7.13 Hasil OpenPictureDialog
14. Doble klik button open kemudian ketik program yang di hurup tebal
berikut. var
FormSubstak: TFormSubstak; FileNameImg: string;
implementation
{R .dfm} procedure TFormSubstak.btOpenClickSender: TObject;
begin if OpenPictureDialog1.Execute then
begin FileNameImg := OpenPictureDialog1.FileName;
Caption := Subtrak : + 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 Subtrak dan Namenya dengan nama btSubtrak.
Gambar 7.14 Button Subtrak
16. Tambahkan ProgressBar ke form dengan cara, pilih menu Win32, ProgressBar. Lalu klik ke form, lalu geser kekanan.
Gambar 7.15 Menu ProgressBar
17. Hasilnya sebagai berikut.
Gambar 7.16 Hasil ProgresBar
18. Tambahkan unit baru, dengan cara file, new unit.
Gambar 7.17 New Unit
19. Simpan unitnya dengan cara save as.
Gambar 7.18 Save As
20. Berinama unitnya dengan nama UnitImageProses.
Gambar 7.19 Save UnitImageProses 21. Hasilnya sebagai berikut.
Gambar 7.20 Hasil Save UnitImageProses
22. Ketik program berikut ke dalam 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;
procedure ImgSubtraction var Image1,Image2: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;
procedure ImgSubtraction var Image1,Image2:TImage; var ProgressBar1: TProgressBar;
var x,y:integer; clrGray1,clrGray2:byte;
begin Randomize;
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
clrGray1 := ImgGetGray Image1, x,y; clrGray2 := ImgGetGray Image2, x,y;
clrGray2 := ByteRange clrGray1-clrGray2; Image2.Canvas.Pixels[x,y] := RGB clrGray2,clrGray2,clrGray2;
end; ProgressBar1.Position := x;
end; Image2.Repaint;
end; end.
23. Kembali ke FormSubtrak, caranya klik unitMoepologi
Gambar 7.21 Kembali ke FormSubstrak
24. Lalu klik toggle form.
Gambar 7.22 Menu Toggle
25. Doble klik button subtrak.
Gambar 7.23 Klik Button Substrak 26. Lalu ketik program berikut.
procedure TFormSubstak.btSubtrakClickSender: TObject; begin
Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic;
ImgSubtraction Image1,Image2, ProgressBar1; end;
27. Dibawah 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 7.24 Button Exit
29. Doble klik button Exit, lalu ketik program berikut.
procedure TFormSubtrak.btExitClickSender: TObject; begin
FormSubtrak.Close; end;
30. Compiler progran dengan cara pilih menu Project, Compile ProjectSubtrak.
Gambar 7.25 Compiler ProjectSubtrak 31. Lalu jalankan progran dengan cara pilih menu Run, Run.
Gambar 7.26 Menu Run 32. Hasil
sebagai berikut.
Gambar 7.27 Hasil program Substrak
33. Keluar dari program klik button Exit.
7.3 PROGRAM SUBTRAK SELENGKAPNYA ADALAH SEBAGAI BERIKUT:
unit UnitSubtrak; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtDlgs, StdCtrls, ExtCtrls, ComCtrls; type
TFormSubtrak = classTForm Image1: TImage;
Image2: TImage; btOpen: TButton;
OpenPictureDialog1: TOpenPictureDialog; btSubtrak: TButton;
ProgressBar1: TProgressBar; btExit: TButton;
procedure btOpenClickSender: TObject; procedure btSubtrakClickSender: TObject;
procedure btExitClickSender: TObject; private
{ Private declarations } public
{ Public declarations } end;
var FormSubtrak: TFormSubtrak;
FileNameImg: string;
implementation {R .dfm}
uses UnitImageProses;
procedure TFormSubtrak.btOpenClickSender: TObject; begin
if OpenPictureDialog1.Execute then begin
FileNameImg := OpenPictureDialog1.FileName; Caption := Subtrak : + OpenPictureDialog1.FileName;
Image1.Picture.LoadFromFile OpenPictureDialog1.FileName; Image2.Visible := False;
end; end;
procedure TFormSubtrak.btSubtrakClickSender: TObject; begin
Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic;
ImgSubtraction Image1,Image2, ProgressBar1; end;
procedure TFormSubtrak.btExitClickSender: TObject; begin
FormSubtrak.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;
procedure ImgSubtraction var Image1,Image2: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;
procedure ImgSubtraction var Image1,Image2:TImage; var ProgressBar1: TProgressBar;
var x,y:integer; clrGray1,clrGray2:byte;
begin Randomize;
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
clrGray1 := ImgGetGray Image1, x,y; clrGray2 := ImgGetGray Image2, x,y;
clrGray2 := ByteRange clrGray1-clrGray2; Image2.Canvas.Pixels[x,y] := RGB clrGray2,clrGray2,clrGray2;
end; ProgressBar1.Position := x;
end; Image2.Repaint;
end;
end.
BAB 8 DETEKSI TEPI SOBEL
8.1 DASAR TEORI DETEKSI TEPI SOBEL
Operator sobel adalah salah satu operator yang menghindari adanya perhitungan gradient di titik interpolasi. Operator ini menggunakan kernel ukuran 3 x 3 piksel
untuk perhitungan gradient 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 gradient yang dihitung
menggunakan operator Sobel adalah:
=
2
+
2
Dengan M adalah besar gradient di titik tengah kernel dan turunan parsial dihitung menggunakan persamaan berikut.
Sx = a2 + ca3 + a4 – a0 + ca7 + a6 Sy = a0 + ca1 + a2 – a6 + ca5 + a4
Dengan c adalah konstanta yang bernilai 2, Sx dan Sy diimplementasikan menjadi kernel berikut.
-1 1
-2 2
-1 1
1 2
1 -1
-2 -1
8.2 CARA MEMBUAT PROGRAM SOBEL LAKUKAN LANGKAH BERIKUT:
Sx =
Sy=
1. Buka program delphi, dengan cara pilih menu start, program borland delphi 7, delphi 7.
Gambar 8.1 Start Program
2. Kemudian pilih menu file, new, application.
Gambar 8.2 New Application
3. Pada object inspector, ubah properti captionnya dengan nama Deteksi Tepi Sobel, dan namenya dengan nama FormSobel.
Gambar 8.3 Form Sobel
4. Simpan unit dan projectnya dengan cara save all.
Gambar 8.4 Save All
5. Beri nama unitnya dengan nama UnitSobel.
Gambar 8.5 Save UnitSobel
6. Beri nama projectnya dengan nama ProjectSobel.
Gambar 8.6 Save ProjectSobel
7. Tambahkan image ke form dengan cara pilih menu Additional, image, lalu klik
ke form.
Gambar 8.7 Menu Image
8. Pada Properties rubah stretchnya ke true dan autosizenya true.
Gambar 8.8 Stretch True
9. Dengan cara yang sama tambahkan image2 di sebelah kanan image1 kemudian ubah stretchnya ke true dan autosizenya true.
Gambar 8.9 Penambahan Image 2
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.