Post on 17-Jan-2016
description
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;