Anda di halaman 1dari 6

Modul 3

Deteksi Tepi

Penentuan tepian suatu objek dalam citra merupakan salah satu wilayah pengolahan citra digital yang
paling awal dan paling banyak diteliti. Proses ini seringkali ditempatkan sebagai langkah pertama
dalam aplikasi segmentasi citra, yang bertujuan untuk mengenali objek-objek yang terdapat dalam
citra ataupun konteks citra secara keseluruhan.
Deteksi tepi berfungsi untuk mengidentifikasi garis batas (boundary) dari suatu objek yang terdapat
pada citra. Tepian dapat dipandang sebagai lokasi piksel dimana terdapat nilai perbedaan intensitas
citra secara ekstrem. Sebuah edge detector bekerja dengan cara mengidentifikasi dan menonjolkan
lokasi-lokasi piksel yang memiliki karakteristik tersebut.

1. Operator Gradien
Pada citra digital f(x,y), turunan berarah sepanjang tepian objek akan bernilai maksimum pada arah
normal dari kontur tepian yang bersesuaian. Sifat ini dipergunakan sebagai dasar pemanfaatan
operator gradien sebagai edge detector.
Operator gradien citra konvensional melakukan diferensiasi intensitas piksel pada arah baris dan
kolom, mengikuti persamaan local intensity variation berikut :
∂ ∂
∇ f ( x, y ) = f x + f y = f ( x, y ) + f ( x, y )
∂x ∂y

Nilai magnitudo gradien |∇(x,y)| dari persamaan di atas dapat dinyatakan sebagai berikut:

∇ ( x, y ) = ( f x )2 + ( f y )2
Operator gradien dapat direpresentasikan oleh dua buah kernel konvolusi Gx dan Gy, yang masing-
masing mendefinisikan operasi penghitungan gradien dalam arah sumbu x dan sumbu y yang saling
tegak lurus.
Dalam kasus penghitungan gradien dengan persamaan local intensity variation, maka kernel Gx dan
Gy dapat dirumuskan seperti berikut:
G x = [− 1 1]
⎡ − 1⎤
Gy = ⎢ ⎥
⎣1⎦
Berikut adalah contoh fungsi Matlab untuk operasi penghitungan gradien orde satu:

I = imread('cameraman.tif');
gx = [-1 1]; Ix = conv2(I,gx,'same');
gy = [-1;1]; Iy = conv2(I,gy,'same');
J = sqrt((Ix.^2)+(Iy.^2));
figure,imagesc(I ),colormap('gray'),colorbar('vert');
figure,imagesc(Ix),colormap('gray'),colorbar('vert');
figure,imagesc(Iy),colormap('gray'),colorbar('vert');
figure,imagesc(J ),colormap('gray'),colorbar('vert');

Dari operator gradien konvensional di atas, dapat diturunkan berbagai operator gradien berikut:

1
1.1 Operator Selisih Terpusat
Operator selisih terpusat juga dikenal sebagai Centered Difference Edge Detector Mask, dan
dinyatakan sebagai kernel:
⎡− 1⎤
⎢ ⎥
Dx = [− 1 0 1] Dy = ⎢0 ⎥
⎢1 ⎥
⎣ ⎦

I = imread('cameraman.tif');
% Konvolusi dengan operator selisih terpusat
d1x = [-1 0 1];
d1y = [-1;0;1];
Ix = conv2(I,d1x,'same');
Iy = conv2(I,d1y,'same');
J = sqrt((Ix.^2)+(Iy.^2));
% Gambar Hasil
figure,imagesc(I ),colormap('gray'),colorbar('vert');
figure,imagesc(Ix),colormap('gray'),colorbar('vert');
figure,imagesc(Iy),colormap('gray'),colorbar('vert');
figure,imagesc(J ),colormap('gray'),colorbar('vert');

1.2 Operator Roberts


Operator Roberts memiliki ukuran kernel sebesar 2×2, yang direpresentasikan sebagai:

⎡ 0 1⎤ ⎡1 0 ⎤
Rx = ⎢ ⎥ Ry = ⎢ ⎥
⎣− 1 0⎦ ⎣0 − 1⎦
Contoh perintah menggunakan operator Roberts:
I = imread('cameraman.tif');
% Konvolusi dengan operator Roberts
robertshor = [0 1; -1 0];
robertsver = [1 0; 0 -1];
Ix = conv2(I,robertshor,'same');
Iy = conv2(I,robertsver,'same');
J = sqrt((Ix.^2)+(Iy.^2));
% Gambar Hasil
figure,imagesc(I ),colormap('gray'),colorbar('vert');
figure,imagesc(Ix),colormap('gray'),colorbar('vert');
figure,imagesc(Iy),colormap('gray'),colorbar('vert');
figure,imagesc(J ),colormap('gray'),colorbar('vert');

Contoh perintah menggunakan operator Roberts (matlab toolbox) 1 :


I = imread('cameraman.tif');
J = edge(I,'roberts');
figure,imagesc(I),colormap('gray'),colorbar('vert');
figure,imagesc(J),colormap('gray'),colorbar('vert');

T1 Perintah edge (pada toolbox Matlab) untuk mensimulasikan operator Prewitt, Roberts, Sobel, dan lainnya memiliki
konsep dasar yang sama dengan operasi konvolusi kernel setiap operator secara manual. Bedanya, perintah edge
menambahkan suatu skema thresholding secara otomatis, sehingga dihasilkan citra keluaran yang bersifat biner (bernilai 0
atau 1).

2
1.3 Operator Prewitt
⎡− 1 0 1⎤ ⎡− 1 − 1 − 1⎤
Px = ⎢− 1 0 1⎥ Py = ⎢ 0 0 0 ⎥
⎢ ⎥ ⎢ ⎥
⎢⎣− 1 0 1⎥⎦ ⎢⎣ 1 1 1 ⎥⎦

Contoh perintah menggunakan operator Prewitt:


I = imread('cameraman.tif');
%Konvolusi dengan operator Prewitt
prewitthor = [-1 0 1; -1 0 1; -1 0 1];
prewittver = [-1 -1 -1; 0 0 0; 1 1 1];
Ix = conv2(I,prewitthor,'same');
Iy = conv2(I,prewittver,'same');
J = sqrt((Ix.^2)+(Iy.^2));
%Gambar Hasil
figure,imagesc(I ),colormap('gray'),colorbar('vert');
figure,imagesc(Ix),colormap('gray'),colorbar('vert');
figure,imagesc(Iy),colormap('gray'),colorbar('vert');
figure,imagesc(J ),colormap('gray'),colorbar('vert');

Contoh perintah menggunakan operator Prewitt (matlab toolbox):


I = imread('cameraman.tif');
J = edge(I,'prewitt');
figure,imagesc(I),colormap('gray'),colorbar('vert');
figure,imagesc(J),colormap('gray'),colorbar('vert');

1.4 Operator Sobel


⎡ − 1 0 1⎤ ⎡− 1 − 2 − 1⎤
S x = ⎢ − 2 0 2⎥ Sy = ⎢ 0 0 0⎥
⎢ ⎥ ⎢ ⎥
⎣⎢ − 1 0 1⎥⎦ ⎣⎢ 1 2 1 ⎥⎦
Contoh perintah menggunakan operator Sobel:
I = imread('cameraman.tif');

%Konvolusi dengan operator Sobel


sobelhor = [-1 0 1; -2 0 2; -1 0 1];
sobelver = [-1 -2 -1; 0 0 0; 1 2 1];
Ix = conv2(I,sobelhor,'same');
Iy = conv2(I,sobelver,'same');
J = sqrt((Ix.^2)+(Iy.^2));

%Gambar Hasil
figure,imagesc(I ),colormap('gray'),colorbar('vert');
figure,imagesc(Ix),colormap('gray'),colorbar('vert');
figure,imagesc(Iy),colormap('gray'),colorbar('vert');
figure,imagesc(J ),colormap('gray'),colorbar('vert');

Contoh perintah menggunakan operator Sobel (matlab toolbox):


I = imread('cameraman.tif');
J = edge(I,'sobel');
figure,imagesc(I),colormap('gray'),colorbar('vert');
figure,imagesc(J),colormap('gray'),colorbar('vert');

3
1.5 Operator Isotropic

⎡ −1 0 1⎤ ⎡− 1 − 2 − 1⎤
⎢ ⎥
I x = ⎢− 2 0 2⎥ Iy = ⎢ 0 0 0⎥
⎢ ⎥
⎢⎣ − 1 0 1 ⎥⎦ ⎢1 2 1 ⎥⎦

Contoh perintah menggunakan operator isotropic:
I = imread('cameraman.tif');
%Konvolusi dengan operator isotropic
isohor = [-1 0 1; -sqrt(2) 0 sqrt(2); -1 0 1];
isover = [-1 -sqrt(2) -1; 0 0 0; 1 sqrt(2) 1];
Ix = conv2(I,isohor,'same');
Iy = conv2(I,isover,'same');
J = sqrt((Ix.^2)+(Iy.^2));
%Gambar Hasil
figure,imagesc(I ),colormap('gray'),colorbar('vert');
figure,imagesc(Ix),colormap('gray'),colorbar('vert');
figure,imagesc(Iy),colormap('gray'),colorbar('vert');
figure,imagesc(J ),colormap('gray'),colorbar('vert');

1.6 Operator Compass


Operator Compass bekerja menggunakan pola empat arah mata angin:

Utara Selatan
⎡1 1 1⎤ ⎡− 1 − 1 − 1⎤
CN = 1 − 2 1 ⎥
⎢ CS = ⎢ 1 − 2 1 ⎥
⎢ ⎥ ⎢ ⎥
⎢⎣− 1 − 1 − 1⎥⎦ ⎢⎣ 1 1 1 ⎥⎦

Timur Barat
⎡− 1 1 1⎤ ⎡1 1 − 1⎤
C E = ⎢− 1 − 2 1⎥ CW = ⎢ 1 − 2 − 1⎥
⎢ ⎥ ⎢ ⎥
⎢⎣− 1 1 1 ⎥⎦ ⎢⎣ 1 1 − 1⎥⎦

1.7 Operator Kirsch


Operator Kirsch bekerja menggunakan pola delapan arah mata angin:
⎡5 5 − 3⎤ ⎡5 5 5⎤ ⎡− 3 5 5⎤

K4 = 5 0 − 3⎥ K 3 = − 3 0 − 3⎥
⎢ ⎢
K2 = − 3 0 5⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢⎣− 3 − 3 − 3⎥⎦ ⎢⎣− 3 − 3 − 3⎥⎦ ⎢⎣− 3 − 3 − 3⎥⎦

⎡ 5 − 3 − 3⎤ ⎡− 3 − 3 5⎤
K5 = ⎢ 5 0 − 3⎥ K1 = ⎢ − 3 0 5⎥
⎢ ⎥ ⎢ ⎥
⎣⎢ 5 − 3 − 3⎥⎦ ⎣⎢− 3 − 3 5 ⎥⎦

⎡− 3 − 3 − 3⎤ ⎡− 3 − 3 − 3⎤ ⎡− 3 − 3 − 3⎤
K 6 = ⎢ 5 0 − 3⎥ K 7 = ⎢− 3 0 − 3⎥ K 8 = ⎢− 3 0 5⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎣⎢ 5 5 − 3⎥⎦ ⎣⎢ 5 5 5 ⎥⎦ ⎣⎢− 3 5 5 ⎥⎦

4
2. Operator Laplacian
Dalam kondisi transisi tepian yang lebih tidak ekstrem, penggunaan operator turunan kedua lebih
dianjurkan.
∇ 2 f ( x, y ) = f xx + f yy
∂ ∂
= f x ( x, y ) + f y ( x, y )
∂x ∂y
∂2 ∂2
∇ 2 f ( x, y ) = f ( x , y ) + f ( x, y )
∂x 2 ∂y 2
Representasi turunan kedua dalam bentuk kernel operator Laplacian adalah sebagai berikut:
⎡ 0 −1 0 ⎤
L = ⎢− 1 4 − 1⎥
⎢ ⎥
⎢⎣ 0 − 1 0 ⎥⎦
Dengan berbagai macam pembobotan, kernel Laplacian tersebut dapat dimodifikasi menjadi beberapa
kernel konvolusi berikut :
⎡− 1 − 1 − 1⎤ ⎡ 1 −2 1 ⎤
L1 = ⎢− 1 8 − 1⎥ L2 = ⎢− 2 4 − 2⎥
⎢ ⎥ ⎢ ⎥
⎢⎣− 1 − 1 − 1⎥⎦ ⎢⎣ 1 − 2 1 ⎥⎦

Laplacian of Gaussian
Turunan kedua memiliki sifat lebih sensitif terhadap noise, selain itu juga menghasilkan double edge.
Oleh karena itu, operator Laplacian dalam deteksi tepi pada umumnya tidak dipergunakan secara
langsung, namun dikombinasikan dengan suatu kernel Gaussian menjadi sebuah operator Laplacian
of Gaussian.
Fungsi transfer dari kernel Laplacian of Gaussian dapat dirumuskan sebagai berikut:
1
G (x, y ) = −
( x 2 + y 2 ) / 2σ 2
e−
2πσ 2

1 ⎡ x 2 + y 2 ⎤ − ( x 2 + y 2 ) / 2σ 2
∇ 2 (G ( x, y )) = 1−
πσ 4 ⎢⎣ 2σ 2 ⎥⎦
e

dimana σ merupakan standar deviasi dari kernel Gaussian.


Contoh perintah untuk mendeteksi tepian dengan menggunakan operator Laplacian of Gaussian
(Matlab toolbox) adalah:
I = imread('cameraman.tif');
J = edge(I,'log');
figure,imagesc(I),colormap('gray'),colorbar('vert');
figure,imagesc(J),colormap('gray'),colorbar('vert');

5
3. Operator Canny
Salah satu algoritma deteksi tepi modern adalah deteksi tepi dengan menggunakan metoda Canny.
Berikut adalah diagram blok algoritma Canny :

original Image Nonmaximum Edge edge


Differentiation
image Smoothing Suppression Thresholding image

Contoh perintah untuk mendeteksi tepian menggunakan metoda Canny (matlab toolbox) :
I = imread('cameraman.tif');
J = edge(I,'canny');
figure,imagesc(I),colormap('gray'),colorbar('vert');
figure,imagesc(J),colormap('gray'),colorbar('vert');

4. Tugas
A. Pada percobaan dengan kernel Sobel, kernel Isotropic, dan kernel Compass, jelaskan mengenai
garis abu-abu yang ditemukan pada pinggiran citra hasil konvolusi.
B. Untuk citra cameraman.tif, edge detector manakah yang memberikan hasil terbaik? Berikan
analisis mengenai pendapat anda tersebut.
C. Sensitivitas edge detector terhadap noise dapat diukur dengan menggunakan parameter error
rate sebagai berikut:
nN − nR
P=
nR
dimana:
nR : jumlah piksel yang dinyatakan sebagai edge pada citra referensi
nN : jumlah piksel yang dinyatakan sebagai edge pada citra noisy
Nilai P yang besar menyatakan sensitivitas edge detector yang tinggi terhadap noise. Dalam
kasus citra cameraman.tif terkontaminasi oleh noise salt & pepper dengan distribusi 0.02,
edge detector manakah yang paling terpengaruh performansinya? Simulasikan dengan Matlab.

%Contoh perhitungan error rate untuk edge detector Sobel


%(kerjakan pula untuk jenis edge detector lain pada Matlab toolbox)

Ia = imread('cameraman.tif');
Ja = edge(Ia,'sobel');
In = imnoise(Ia,'salt & pepper',0.02);
Jn = edge(In,'sobel');
nr = sum(sum(Ja));
nn = sum(sum(Jn));
P = abs(nn-nr)/nr

Anda mungkin juga menyukai