Dalam penulisan tugas ini citra yang akan digunakan sebagai uji coba adalah suatu citra diam berwarna dengan bentuk 2D (frontal) dengan format JPEG/JPG.
Konsep Deteksi Tepi
Tepi adalah perubahan nilai intensitas derajat keabuan yang mendadak (besar) dalam jarak yang singkat. Perbedaan intensitas inilah yang memperlihatkan rincian pada gambar. Tepi dapat diorientasikan dengan suatu arah, dan arah ini berbeda-beda, tergantung pada perubahan intensitas
Ada tiga macam tepi yang terdapat di dalam citra digital. Ketiganya adalah tepi curam, tepi landai, dan tepi yang mengandung derau.

Gambar Jenis-jenis Tepi
Teknik Deteksi Tepi
Terdapat beberapa teknik yang digunakan untuk mendeteksi tepi, antara lain (Munir, 2004) :
1. Operator gradien pertama, contoh beberapa gradien pertama yang dapat digunakan untuk mendeteksi tepi di dalam citra, yaitu operator gradien selisih-terpusat, operator Sobel, operator Prewitt, operator Roberts, operator Canny.
2. Operator turunan kedua, disebut juga operator Laplace. Operator Laplace mendeteksi lokasi tepi khususnya pada citra tepi yang curam. Pada tepi yang curam, turunan keduanya mempunyai persilangan nol, yaitu titik di mana terdapat
pergantian tanda nilai turunan kedua, sedangkan pada tepi yang landai tidak terdapat persilangan nol. Contohnya adalah operator Laplacian Gaussian, operator Gaussian.
3. Operator kompas, digunakan untuk mendeteksi semua tepi dari berbagai arah di dalam citra. Operator kompas yang dipakai untuk deteksi tepi menampilkan tepi dari 8 macam arah mata angin yaitu Utara, Timur Laut, Timur, Tenggara, Selatan, Barat, Barat Daya, dan Barat Laut. Deteksi tepi dilakukan dengan mengkonvolusikan citra dengan berbagai mask kompas, lalu dicari nilai kekuatan tepi (magnitude) yang terbesar dan arahnya. Operator kompas yang dipakai untuk deteksi tepi menampilkan tepi dari 8 macam arah mata angin, yaitu Utara, Timur Laut, Timur, Tenggara, Selatan, Barat, Barat Daya, dan Barat Laut.
Selain operator gradien yang sudah disebutkan, masih ada beberapa operator gradien yang lain yang dapat digunakan untuk mendeteksi tepi di dalam citra, yaitu selisih terpusat, sobel, prewitt, Roberts, dan Canny.
(a) Operator gradien selisih-terpusat:

yang ekivalen dengan mask berikut :

(b) Operator Sobel Tinjau pengaturan pixel di sekitar pixel (x,y) :

Operator Sobel adalah magnitudo dari gradien yang dihitung dengan

yang dalam hal ini, turunan parsial dihitung dengan

dengan konstanta c = 2. Dalam bentuk mask, sx dan sy dapat dinyatakan sebagai

Di bawah ini contoh lain deteksi tepi dengan operator Sobel, di mana hasil konvolusi diambangkan dengan T = 12.
Citra : | gradien – x | + | gradien – y | :

Hasil pengambangan dengan T = 12 :

(c) Operator Prewitt Persamaan gradien pada operator Prewitt sama seperti operator Sobel, tetapi menggunakan nilai c = 1 :

(d) Operator Roberts Operator Roberts sering disebut juga operator silang. Gradien Roberts dalam arah-x dan arah-y dihitung dengan rumus :

Gambar Operator Silang
(e) Operator Canny Berdasarkan wikipedia, operator Canny merupakan deteksi tepi yang optimal. Operator Canny menggunakan Gaussian Derivative Kernel untuk menyaring kegaduhan dari citra awal untuk mendapatkan hasil deteksi tepi yang halus.

Gambar Gaussian Derivative Kernel
Logika Dan Source Code Program Deteksi Pengolahan Citra Dengan Menggunakan DELPHI :
Group Box, Group Box adalah suatu objek yang digunakan untuk mengelompokan beberapa objek lagi, dimana pada penggunaanya sangat perlu untuk mengatur objek-objek yang ada. Berikut contoh nya pada gambar berserta Coding nya :

Source Code :
procedure TForm1.GroupBox1Click(Sender: TObject);
begin
end;
end
Setelah itu kita akan membuat objek form untuk membuka file gambar dimana pada saat dia di klik akan tampil windows open berikut contohnya :

Source Code :
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if not OpenPictureDialog1.Execute then exit else
begin
gambar := TBitmap.Create;
gambar.LoadFromFile(OpenPictureDialog1.filename);
Form1.Caption:='Image Processing - '+ExtractFileName(OpenPictureDialog1.Filename);
end;
Image1.Picture.Bitmap := gambar;
SpeedButton2.Enabled:=true;
end;
Dan langkah berikutnya kita membuat tombol button keluar dari program :

Source Code :
procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
close
end;
Dan langkah selanjutnya membuat form atau semacam kotak untuk menampilkan gambar yang sudah di buka oleh program, Delphi mempunyai tools untuk membuka program yang yaitu OpenPicture Dialog berikut contohnya :

Source Code :
procedure TForm1.Image1Click(Sender: TObject);
begin
end;
end.
Selanjutnya kita membuat button click untuk memproses terjadinya pendeteksian garis tepi dengan fungsi dari delphi :

Berikut perintah membuat Butoon Objek nya :
object Form1: TForm1
Left = 242
Top = 169
Width = 554
Height = 495
Caption = 'Image Processing'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object GroupBox1: TGroupBox
Left = 16
Top = 16
Width = 529
Height = 409
Caption = 'Analisis Citra Dengan Feature Extraction'
TabOrder = 0
object SpeedButton2: TSpeedButton
Left = 16
Top = 64
Width = 201
Height = 33
Caption = 'Deteksi Garis Tepi'
OnClick = SpeedButton2Click
end
Dan ini fungsi untuk memproses gambar :
procedure TForm1.SpeedButton2Click(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)));
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;
SpeedButton1.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;
Image1.Picture.bitmap := gambar;
gambar.SaveToFile('Sobel1.bmp');
Image.free;
end;
Output Program :

bisa kirimkan source codenya tidak???
BalasHapuspermisi gan
BalasHapusane udh coba tp koq gagal yaa..ada yg eror..
pdhal udh ane smain ky contoh agan..
salahnya di "gambar := TBitmap.Create;"
yg tempatnya di procedure TForm1.BitBtn1Click(Sender: TObject);
mohon bantuannya gan
Komentar ini telah dihapus oleh pengarang.
BalasHapus