Pendeteksian Tepi
Edge atau tepi didefinisikan sebagai perubahan intensitas grey level secara mendadak,
dalam jarak yang singkat. Berikut ini program pendeteksian tepi menggunakan teknik sobel.
Proses yang akan dijalankan adalah:
Langkah yang dapat dilakukan adalah sebagai berikut :
1. Dari modul pertama yang telah Anda kerjakan, tambahkan satu button ganti caption
dengan ‘Sobel’ dan name dengan ‘btn_sobel’atau jika menggunakan menu file Anda
dapat menambahkan satu menu file dengan mengganti caption ‘Sobel’ dan name object
menjadi mn_sobel
klik dua kali pada menu file sobel dan isikan source code berikut :
procedure TForm1.mn_sobelClick(Sender: TObject);
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;
mn_grayscale.Click;
image := tbitmap.Create;Image.Assign(gambar);
for y:=1 to
gambar.Height-2 do begin
for i:=-1 to 1 do
row[i+1]:= Image.ScanLine[y+i];col := gambar.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+j*3]);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+j*3]);sum := (sum + jum)+p;
if sum>255 then
sum:=255;
if sum<0 then
sum:=0;
for k:=0 to 2 do
col[x+k]:=sum;
inc(x,3);
until
x>=3*(gambar.Width-4);
end;
Image2.Picture.bitmap := gambar;
gambar.SaveToFile('Image Sobel');Image.free;
end;
2. Lakukan langkah yang sama seperti padalangkah no.1 dengan mengganti nama button
dengan Robert dan salin source code berikut
procedure TForm1.mn_edge_robertClick(Sender: TObject);const roberts:array [0..1,0..1,0..1] of smallint=(((1,0),(0,-1)),((-1,0),(0,1)));
varrow : array [0..8] of pbytearray;col : pbytearray;x,y : smallint;i,j,k,buffer : smallint;image : tbitmap;sum,jum : longint;
beginbuffer:=-20;mn_grayscale.Click;image := tbitmap.Create;Image.Assign(gambar);for y:=1 to gambar.Height-2 dobeginfor i:=-1 to 0 dorow[i+1]:= Image.ScanLine[y+i];col := gambar.ScanLine[y];x:=3;repeatsum := 0;for i:=-1 to 0 dofor j:=-1 to 0 dosum:=sum+(roberts[0,i+1,j+1]*row[i+1,x-j*3]);jum:=0;for i:=-1 to 0 dofor j:=-1 to 0 dojum:=jum+(roberts[1,i+1,j+1]*row[i+1,x-j*3]);sum := (sum - jum)- buffer;if sum>255 then sum:=255;if sum<0 then sum:=0;for k:=0 to 2 docol[x+k]:=sum;inc(x,3);untilx>=3*(gambar.Width-4);end;Image2.Picture.bitmap := gambar;
end;
3. Lakukan langkah yang sama seperti pada langkah no.1 dengan mengganti nama button
dengan ‘Prewitt’ dan salin source code berikut
procedure TForm1.mn_prewittClick(Sender: TObject);
const
prewitt : array [0..1,0..2,0..2] of
smallint =(((-1,0,1),(-1,0,1),(-1,0,1)),((1,1,1),(0,0,0),(-1,-1,-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;
mn_grayscale.Click;
image := tbitmap.Create;Image.Assign(gambar);
for y:=1 to
gambar.Height-2 do begin
for i:=-1 to 1 do
row[i+1]:= Image.ScanLine[y+i];col := gambar.ScanLine[y];
x:=3;
repeat
sum := 0;
for i:=-1 to 1 do
for j:=-1 to 1 do
sum:=sum+(prewitt[0,i+1,j+1]*row[i+1,x+j*3]);jum:=0;
for i:=-1 to 1 do
for j:=-1 to 1 do
jum:=jum+(prewitt[1,i+1,j+1]*row[i+1,x+j*3]);sum := (sum + jum)+p;
if sum>255 then
sum:=255;
if sum<0 then
sum:=0;
for k:=0 to 2 do
col[x+k]:=sum;
inc(x,3);
until
x>=3*(gambar.Width-4);
end;
Image2.Picture.bitmap := gambar;
end;
4. Lakukan langkah yang sama seperti pada langkah no.1 dengan mengganti nama button
dengan ‘Laplacian’ dan salin source code berikut
procedure TForm1.mn_laplacianClick(Sender: TObject);
const
laplacian : array [0..1,0..2,0..2] of
smallint =(((0,-1,0),(-1,4,-1),(0,-1,0)),((-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;
mn_grayscale.Click;
image := tbitmap.Create;Image.Assign(gambar);
for y:=1 to
gambar.Height-2 do begin
for i:=-1 to 1 do
row[i+1]:= Image.ScanLine[y+i];col := gambar.ScanLine[y];
x:=3;
repeat
sum := 0;
for i:=-1 to 1 do
for j:=-1 to 1 do
sum:=sum+(laplacian[0,i+1,j+1]*row[i+1,x+j*3]);jum:=0;
for i:=-1 to 1 do
for j:=-1 to 1 do
jum:=jum+(laplacian[1,i+1,j+1]*row[i+1,x+j*3]);sum := (sum + jum)+p;
if sum>255 then
sum:=255;
if sum<0 then
sum:=0;
for k:=0 to 2 do
col[x+k]:=sum;
inc(x,3);
until
x>=3*(gambar.Width-4);
end;
Image2.Picture.bitmap := gambar;
end;
Top Related