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 :
untuk lebih jelasnya silakan download materi lengkapnya disini