Cari Blog Ini

Kamis, 25 November 2010

DETEKSI TEPI DENGAN METODE OPERATOR SOBEL MENGGUNKAN DELPHI 7.0

Keberadaan tepi unsur ditandai dengan tingginya perubahan nilai piksel atau kontras [Nixon dan Aguado, 2002]. Tepi unsur pada citra dideteksi dengan operator deteksi (detektor) tepi diantaranya berupa matriks template berukuran tertentu, seperti pendeteksi tepi Robert (terdiri dari matriks detektor tepi diagonal M- dan M+) serta pendeteksi tepi Prewitt dan Sobel (keduanya terdiri dari matriks template vertikal, Mx dan horisontal, My) Dalam mendeteksi tepi, dilakukan perkalian elementer antara matriks template dengan kelompok piksel pada citra input. Pada hasil perkalian yang diperoleh, nilai setiap elemen dijumlahkan dan dijadikan nilai dari elemen matriks hasil konvolusi.

Proses yang digunakan oleh operator sobel merupakan proses dari sebuah konvolusi yang telah di tetapkan terhadap citra yang terdeteksi. Dalam operator sobel digunakan matrik konvolusi 3 X 3 dan susunan piksel-pikselnya di sekitar pixel (x, y).Operator sobel merupakan pengembangan Operator robert dengan menggunakan filter HPF yang diberi satu angka nol penyangga. Operator ini mengambil prinsip dari fungsi laplacian dan gaussian yang dikenal sebagai fungsi untuk membangkitkan HPF.

Kelebihan dari Operator sobel ini adalah kemampuan untuk mengurangi noise sebelum melakukan perhitungan deteksi tepi. Sehingga besar gradient dapat di hitung. Biasanya operator sobel menempatkan penekanan atau pembobotan pada piksel-piksel yang lebih dekat dengan titik pusat jendela, sehingga pengaruh piksel-piksel tetangga akan berbeda sesuai dengan letaknya terhadap titik di mana gradien dihitung. Dari susunan nilai-nilai pembobotan pada jendela juga terlihat bahwa perhitungan terhadap gradien juga merupakan gabungan dari posisi mendatar dan posisi vertikal.

script :

begin

if not OpenPictureDialog1.Execute then exit else

begin

Picture := TPicture.Create;

try

Picture.LoadFromFile(OpenPictureDialog1.Filename);

try

BmpAsli.Assign(Picture.Graphic);

except

BmpAsli.Width := Picture.Graphic.Width;

BmpAsli.Height := Picture.Graphic.Height;

BmpAsli.PixelFormat := pf24bit;

BmpAsli.Canvas.Draw(0,0, Picture.Graphic)

end;

if Image1.Picture.Bitmap.Empty then exit else

begin

OperatorGradien1.Visible := True;

OperatorTurunan1.Visible := True;

Tools1.Visible := True;

SpdBtnSave.Enabled := True;

SpdBtnReset.Enabled := True;

procedure TfrMain.RobertsCross1Click(Sender: TObject);

var

ray1, ray2: array[0..3] of Integer;

begin

ray1[0] := 1; ray1[1] := 0;

ray1[2] := 0; ray1[3] := -1;

ray2[0] := 0; ray2[1] := 1;

ray2[2] := -1; ray2[3] := 0;

Salin(BmpKonv, Image1.Picture.Graphic);

Konv2Mask(ray1, ray2, 1, BmpKonv);

Label4.Caption := ‘Roberts Cross operator:’;

end;

if Mode = 1 then

begin

HasilR1[y] := Set255(abs(

(C[y].rgbtRed*ray1[0]) +

(C[y+1].rgbtRed*ray1[1]) +

(B[y].rgbtRed*ray1[2]) +

(B[y+1].rgbtRed*ray1[3]))

);

HasilB1[y] := Set255(abs(

(C[y].rgbtBlue*ray1[0]) +

(C[y+1].rgbtBlue*ray1[1]) +

(B[y].rgbtBlue*ray1[2]) +

(B[y+1].rgbtBlue*ray1[3]))

);

HasilG1[y] := Set255(abs(

(C[y].rgbtGreen*ray1[0]) +

(C[y+1].rgbtGreen*ray1[1]) +

(B[y].rgbtGreen*ray1[2]) +

(B[y+1].rgbtGreen*ray1[3]))

);

dst….

output :


deteksi sobel =

untuk lebih jelasnya silakan download materi lengkapnya disini

1 komentar: