Pendeteksian Tepi Objek STMIK PPKIA Pradnya Paramita Sigit Setyowibowo, ST., MMSI
Deteksi Tepi Yang dimaksud dengan tepi (edge) adalah perubahan nilai intensitas derajat keabuan yang mendadak (besar) dalam jarak yang singkat. Perbedaan intensitas inilah yang menampakkan rincian pada gambar. Tepi biasanya terdapat pada batas antara dua daerah berbeda pada suatu citra. Tepi dapat diorientasikan dengan suatu arah, dan arah ini berbeda-beda pada tergantung pada perubahan intensitas
Ada tiga macam tepi yang terdapat di dalam citra digital, Ketiganya adalah : 1. Tepi undakan Tepi dengan perubahan intensitas yang tajam. Arah tepi berkisar 900. 2. Tepi tanjakan Disebut juga tepi lebar, yaitu tepi dengan sudut arah yang kecil. Tepi tanjakan dapat dianggap terdiri dari sejumlah tepi-tepi lokal yang lokasinya berdekatan. 3. Tepi yang mengandung derau (noise)
Deteksi Tepi Apabila profil citra mempunyai tepi dengan bentuk tanjakan (ramp), fungsi dan turunannya ditunjukkan berikut ini. Profil citra dapat berupa tepi dengan bentuk atap, garis, undakan, atau tanjakan.
Untuk memahami profil citra yang berhubungan dengan tepi, perhatikan matriks yang berukuran 4 x 6 berikut. 168 168 168 168 168 168 0 0 0 0 0 0 168 168 168 168 168 168 0 0 0 0 0 0 Pada contoh tersebut perubahan nilai dari sisi kiri (168) ke sisi kanan (0) sangat drastis, tidak bertahap. Profil citra tersebut berupa tepi undakan. tepi undakan
Adapun matriks berikut mengandung tepi tanjakan: 168 168 168 138 87 30 0 0 0 168 168 168 138 87 30 0 0 0 168 168 168 138 87 30 0 0 0 Perhatikan, terjadi perubahan nilai secara bertahap dari transisi 168 ke 0. Contoh dalam bentuk citra: tepi tanjakan
Operator Roberts Pada operator Robert’s cross, mask yang digunakan berukuran 2x2 baik untuk Gx maupun Gy. Operator tersebut merupakan pendekatan paling sederhana dari suatu magnitude
%program robet.m clear all; Im= double(imread(‘ImageEdgeGray.png')); % baca citra gray-level figure(1), imshow(uint8(Im)); % tampilkan citra gray-level [N,M]=size(Im); % baca ukuran citra % Cara pertama menghitung gradien pixel per pixel for n=1:N-1 for m=1:M-1 Gy(n,m)=abs(Im(n+1,m+1)-Im(n,m)); % gradien 45º Gx(n,m)=abs(Im(n,m+1)-Im(n+1,m)); % gradien 135º G(n,m) =sqrt(Gx(n,m)^2 + Gy(n,m)^2); % gradien total citra end; figure(2), imshow(uint8(G)); % tampilkan gradien total GR = imgradient(Im,'roberts'); % Cara kedua menghitung gradien Roberts figure(3), imshow(uint8(GR*255)); % tampilkan gradien Roberts
Operator Prewitt Operator yang digunakan Prewit berukuran 3x3 dengan elemen horisontal yang ditengah untuk Gx sama dengan 0 dan elemen vertikal yang ditengah untuk Gy juga sama dengan 0
Operator Sobel Operator Sobel terdiri dari matrik 3x3 masing-masing adalah Gx dan Gy. Matrik mask tersebut dirancang untuk memberikan respon secara maksimal terhadap tepi objek baik horisontal maupun vertikal. Mask dapat diaplikasikan secara terpisah terhadap input citra. Hasil operasi masing-masing untuk Gx dan Gy
%program prewittsobel.m clear all; Im= double(imread('ImageEdgeGray.png')); % baca citra gray-level figure(1), imshow(uint8(Im)); % tampilkan citra gray-level [N,M]=size(Im); % baca ukuran citra % Cara pertama menghitung gradien Sobel dan Prewitt melalui konvolusi Sx = [-1,-2,-1;0,0,0;1,2,1]; % set matriks operator Sobel arah x Sy = [-1,0,1;-2,0,2;-1,0,1]; % set matriks operator Sobel arah y Px = [-1,-1,-1;0,0,0;1,1,1]; % set matriks operator Prewitt arah x Py = [ -1,0,1; -1,0,1; -1,0,1];% set matriks operator Prewitt arah y Gsx=conv2(Im,Sx,'same'); % konvolusi operator Sobel x dan citra Gsy=conv2(Im,Sy,'same'); % konvolusi operator Sobel y dan citra GS = abs(Gsx) + abs(Gsy); % hitung gradien total Sobel figure(2), imshow(uint8(GS)); % tampilkan gradien Sobel Gpx=conv2(Im,Px,'same'); % konvolusi operator Prewitt x dan citra Gpy=conv2(Im,Py,'same'); % konvolusi operator Prewitt y dan citra GP = abs(Gpx) + abs(Gpy); % hitung gradien Prewitt figure(3), imshow(uint8(GP)); % tampilkan gradien Prewitt % Cara kedua menghitung gradien Sobel dan Prewitt dengan fungsi imgradient () GS1 = imgradient (Im,'sobel'); % hitung gradien Sobel GP1 = imgradient(Im,'prewitt');% hitung gradien Prewitt figure(4), imshow(uint8(GS1)); % tampilkan gradien Sobel figure(5), imshow(uint8(GP1)); % tampilkan gradien Prewitt
Operator Laplacian Operator ini bersifat omnidirectional, yakni menebalkan bagian tepi ke segala arah. Namun, operator Laplacian memiliki kelemahan, yakni peka terhadap derau, memberikan ketebalan ganda, dan tidak mampu mendeteksi arah tepi (Gonzalez & Woods, 2002).
Program laplacian.m clear all; Im= double(imread(‘ImageEdgeGray.png')); % baca citra berwarna figure(1), imshow(uint8(Im)); % tampilkan citra gray-level [N,M]=size(Im); % baca ukuran citra L1 = [0,1,0;1,-4,1;0,1,0]; % set operator Laplace L2 = [1,1,1;1,-8,1;1,1,1]; L3 = [1,2,1;2,-12,2;1,2,1]; Ls1=abs(conv2(Im,L1,'same')); % hitung gradien Laplacian Ls2=abs(conv2(Im,L2,'same')); Ls3=abs(conv2(Im,L3,'same')); figure(2), imshow(uint8(Ls1)); % tampilkan gradien Laplace total figure(3), imshow(uint8(Ls2)); figure(4), imshow(uint8(Ls3)); %atau toolbox matlab I = imread('cameraman.tif'); J = edge(I,'log'); figure,imagesc(I),colormap('gray'),colorbar('vert'); figure,imagesc(J),colormap('gray'),colorbar('vert');
Operator Canny Operator Canny, yang dikemukakan oleh John Canny pada tahun 1986, terkenal sebagai operator deteksi tepi yang optimal. Algoritma ini memberikan tingkat kesalahan yang rendah, melokalisasi titik-titik tepi (jarak piksel-piksel tepi yang ditemukan deteksi dan tepi yang sesungguhnya sangat pendek), dan hanya memberikan satu tanggapan untuk satu tepi
I = imread('cameraman.tif'); J = edge(I,'canny'); figure,imagesc(I),colormap('gray'),colorbar('vert'); figure,imagesc(J),colormap('gray'),colorbar('vert');