Segment As I
Segment As I
Segmentasi
Citra
Setelah bab ini berakhir, diharapkan pembaca dapat
memahami berbagai istilah berikut dan juga dapat
mempraktikkan beberapa penerapannya.
Segmentasi citra
Deteksi garis
Deteksi tepi
Peng-ambangan dwi-aras
Peng-ambangan global Vs. lokal
Peng-ambangan aras-jamak
Peng-ambangan dengan metode Otsu
Peng-ambangan adaptif
Peng-ambangan berdasarkan entropi
Segmentasi warna
Segmentasi Citra
402
Magic
Wand
pada
Adobe
Photoshop.
Contoh
tersebut
Segmentasi Citra
403
Citra
Kegunaan
Acuan yang
Mobil
Segmentasi
Pelacakan mobil
Digunakan
Gerakan dan
Struktur
latarbelakang
Foto satelit
Pengklasifikasian
warna
Tekstur dan
permukaan bumi
Wajah orang
Kerumunan orang
area
Pengenalan wajah
warna
Warna, bentuk,
Apel
di pasar
Kumpulan apel
dan tekstur
Bentuk, warna,
berdasarkan ukuran
ukuran
Segmentasi
juga
biasa
dilakukan
sebagai
langkah
awal
untuk
404
Segmentasi Citra
405
406
Segmentasi Citra
407
end
if pembulatan == true
G = uint8(G);
end
Akhir Program
Dengan fungsi di atas, bagian pinggir citra yang tidak diproses akan
dibuang sekiranya argumen ketiga tidak diberikan atau diberi nilai false. Dengan
demikian, ukuran G akan dipengaruhi oleh ukuran H. Nilai true pada argumen
ketiga akan membuat bagian tepi yang tidak diproses berwarna hitam, membentuk
seperti bingkai. Argumen keempat digunakan untuk menentukan eksekusi uint8
atau tidak. Dalam banyak hal, argumen keempat tidak perlu disebutkan karena
umumnya memang hasil deteksi tepi akan memotong nilai yang di bawah nol dan
yang di atas 255. Namun, di belakang akan ada aplikasi yang memerlukan fungsi
deteksi tetapi tanpa perlu melakukan pemotongan seperti itu.
Contoh berikut menunjukkan penggunaan deteksi untuk mendapatkan
garis tegak:
>> H1 = [-1 -1 -1; 2 2 2; -1 -1 -1];
>> Img = imread('C:\Image\jaring.png');
>> G = deteksi(Img, H1); imshow(G,[0 1])
>>
408
Hasil deteksi garis dapat dilihat pada Gambar 10.5(b). Terlihat bahwa garis
vertikal tidak tampak. Namun, garis miring dan mendatar tetap terdeteksi.
Segmentasi Citra
409
Gambar 10.6 Contoh hasil deteksi garis untuk empat arah yang berbeda
terhadap gambar pada Gambar 10.5(a)
Catatan
Deteksi garis juga dapat diperoleh melalui transformasi Hough.
Transformasi tersebut dibahas, misalnya, oleh Davies (1990).
410
area.
Definisi tepi di sini adalah himpunan piksel yang terhubung yang terletak pada
batas dua area (Gonzalez & Woods, 2002). Perlu diketahui, tepi sesungguhnya
mengandung informasi yang sangat penting. Informasi yang diperoleh dapat
berupa bentuk maupun ukuran objek.
Umumnya, deteksi tepi menggunakan dua macam detektor, yaitu detektor
baris (Hy) dan detektor kolom (Hx). Beberapa contoh yang tergolong jenis ini
adalaah operator Roberts, Prewitt, Sobel, dan Frei-Chen.
Deteksi tepi dapat dibagi menjadi dua golongan. Golongan pertama
disebut deteksi tepi orde pertama, yang bekerja dengan menggunakan turunan
atau diferensial orde pertama. Termasuk kelompok ini adalah operator Roberts,
Prewitt, dan Sobel. Golongan kedua dinamakan deteksi tepi orde kedua, yang
menggunakan turunan orde kedua. Contoh yang termasuk kelompok ini adalah
Laplacian of Gaussian (LoG).
Tabel 10.2 memberikan definisi turunan orde pertama dan kedua baik pada
bentuk yang kontinu maupun diskret. Bentuk diskret sangat berguna untuk
melakukan deteksi tepi. Adapun Gambar 10.7 menunjukkan hubungan antara
fungsi citra dan deteksi tepi orde pertama dan orde kedua. Perlu diketahui, terkait
dengan turunan, tepi sesungguhnya terletak pada:
nilai absolut maksimum pada turunan pertama;
persilangan nol (zero-crossing) pada turunan kedua.
Tabel 10.2 Turunan orde pertama dan kedua pada
bentuk kontinu dan diskret
Turunan
Bentuk kontinu
Bentuk diskret
df
f(y,x+1)f(y,x)
f ( y , x + x ) f ( y , x)
lim
dx
x
x 0
df
f(y+1,x)f(y,x)
f ( y + y , x ) f ( y , x )
lim
dy
y
x 0
f ( y , x)
[f(y, x+1)f(y,x),
df df
,
f(y+1,x)f(y,x)]
dy dx
Segmentasi Citra
Turunan
d2 f
d x2
d2 f
d y2
2 f ( y , x )
411
Bentuk kontinu
df
( y , x + x )
dx
lim
x
x 0
df
( y + y , x )
dy
lim
y
x 0
2
2
d f d f
+
d x2 d y2
Bentuk diskret
f(y,x+1)- 2f(y,x)
df
f ( y , x)
+f(y,x-1)
dx
( )
( )
( )
-2f(y,x)+f(y)
( dydf ) f ( y , xf(y+1,x)
1,x)
f(y,x+1)+f(y,x-1)
-4f(y,x)+f(y+1,x)+f(y1,x)
Gambar 10.7 Deteksi tepi orde pertama dan orde kedua pada arah x
412
Catatan
Profil citra dapat berupa tepi dengan bentuk atap, garis, undakan,
atau tanjakan.
Segmentasi Citra
413
Catatan
Untuk memahami profil citra yang berhubungan dengan tepi,
perhatikan matriks yang berukuran 4 x 6 berikut.
168
168
168
168
168
168
168
168
168
168
168
168
0
0
0
0
0
0
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. Adapun matriks berikut mengandung tepi tanjakan:
tepi undakan
tepi tanjakan
414
[]
df
Gx
dx
v f=
=
df
Gy
dy
[ ]
(10.1)
f =mag ( f )= [ Gx +G y
2
2 1/ 2
2 1/ 2
df
df
= ( ) +( )
dx
dy
(10.2)
(10.3)
2 f ( y , x )=
(10.4)
d f ( y , x ) d f ( y , x)
+
d x2
d y2
Segmentasi Citra
415
Catatan
Cadar yang digunakan pada deteksi tepi dalam buku ini telah
disesuaikan agar proses terhadap citra dapat dilakukan secara
korelasi (bukan konvolusi). Itulah sebabnya, ada kemungkinan
cadar yang digunakan pada buku ini berbeda dengan cadar di
literatur lain.
Gambar 10.8 Operator Roberts (b) dan (c) serta posisi pada citra f
Bentuk operator Roberts ditunjukkan pada Gambar 10.8. Misalkan, f
adalah citra yang akan dikenai operator Roberts. Maka, nilai operator Roberts
pada (y, x) didefinisikan sebagai
416
r ( y , x )= ( z 1z 4 ) + ( z 3z 2 )
(10.5)
Dalam hal ini, z1 = f(y, x), z2 = f(y, x+1), z3 = f(y+1, x), dan z4 = f(y+1, x+1).
Fungsi roberts berikut berguna untuk memperoleh tepi pada citra berskala
keabuan.
Program : roberts.m
end
G = uint8(G);
Akhir Program
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.9.
Segmentasi Citra
417
(10.6)
418
Gambar 10.10 Operator Prewitt (b) dan (c) serta posisi pada citra f
Fungsi prewitt berikut berguna untuk melakukan pengujian operator
Prewitt terhadap citra berskala keabuan.
Program : prewitt.m
Akhir Program
Segmentasi Citra
419
>> G = prewitt(Img);
>> imshow(G)
>>
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.11.
Gambar 10.11 Hasil deteksi tepi dengan operator Prewitt. Hasil tepi lebih
tegas daripada hasil dengan operator Roberts
420
Catatan
Hal ini
berbeda dengan operator Prewitt, yang lebih sensitif terhadap tepi vertikal dan
horizontal (Crane, 1997).
Segmentasi Citra
421
Gambar 10.12 Operator Sobel (b) dan (c) serta posisi dalam citra f
Fungsi sobel berikut berguna untuk melakukan pengujian operator Sobel
terhadap citra berskala keabuan.
Program : sobel.m
Akhir Program
422
>> G = sobel(Img);
>> imshow(G)
>>
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.13.
2 .
Gambar 10.14 Operator Frei-Chen (b) dan (c) serta posisi dalam citra f
Segmentasi Citra
423
Akhir Program
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.15.
424
Segmentasi Citra
425
426
(10.7)
Segmentasi Citra
427
F(y-1,x-1)+ F(y-1,x+1)+F(y+1,x-1)+F(y+1,x+1));
end
end
G = uint8(G);
Akhir Program
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.19.
428
1
x +y
1
e
4
2 2
(x + y )
2
2
(10.8)
Fungsi di atas disebut sebagai filter topi Meksiko (the Mexican hat filter) karena
bentuknya seperti topi yang biasa dikenakan orang Meksiko (lihat Gambar 10.20).
Dalam hal ini, semakin besar nilai , semakin besar pula cadar yang diperlukan.
Contoh cadar berukuran 5 x 5 yang mewakili operator LoG ditunjukkan pada
Gambar 10.21 (Gonzalez & Woods, 2002).
Catatan
Dalam praktik, terdapat berbagai variasi rumus yang digunakan
dalam LoG. Gonzalez dan Woods (2002) menggunakan rumus
seperti berikut:
log ( y , x )=
x + y
e
4
(x + y )
2
2
1 x2+ y2
log ( y , x )= 2
2 e
(x + y )
2
2
1
x2 + y 2
log ( y , x )= 4 1
e
2 2
(x + y )
2
2
Segmentasi Citra
429
0 -1
0 -1 -2 -1
-1 -2 16 -2 -1
0 -1 -2 -1
0];
0 -1
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.22.
430
Segmentasi Citra
431
ny y cy
1 nx 2+ ny 2
nilai
2 e
2
2
h(y+1, x+1) nilai
jum jum + nilai
END-FOR
END-FOR
5. // Lakukan normalisasi
FOR y 1 TO ukuran
FOR y 1 TO ukuran
h(y, x) h(y, x) / jum
END-FOR
END-FOR
6. RETURN h
(nx +ny )
2
2
Pada algoritma di atas, normalisasi dilakukan agar jumlah koefisien pada cadar
bernilai 1. Implementasi perolehan cadar LoG dapat dilihat pada cadarLoG.m.
Program : cadarLoG.m
end
432
% Lakukan normalisasi
for y=1 : ukuran
for x=1 : ukuran
H(y,x) = H(y,x) / jum;
end
end
Akhir Program
0 11.8132
0 -4.7962 -1.0499
Segmentasi Citra
433
0 11.8132
0 -4.7962 -1.0499
DoG ( y . x )=
(x + y )
2
2 1
2 1
(x + y )
2
2 2
2 22
(10.9)
434
-1
-1
-1
-2
-3
-3
-3
-2
-1
-3
-3
-1
-1
-3
16
-3
-1
-1
-3
-3
-1
-2
-3
-3
-3
-2
-1
-1
-1
0 ];
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.24.
Segmentasi Citra
435
436
(10.10)
Langkah 3:
Langkah ketiga berupa penghitungan arah tepi. Rumus yang digunakan
untuk keperluan ini:
theta = tan-1(Gy, Gx)
Langkah 4:
(10.11)
Segmentasi Citra
437
Setelah arah tepi diperoleh, perlu menghubungkan antara arah tepi dengan
sebuah arah yang dapat dilacak dari citra. Sebagai contoh, terdapat susunan piksel
berukuran 5 x 5 seperti terlihat pada Gambar 10.26. Dengan melihat piksel a
tampak bahwa a hanya memiliki 4 arah berupa 0o, 45o, 90o, dan 135o.
(H )
( HI )
(H )
45 yi f wij x j
arah
90 y f (T ) w (TH ) y ( H )
j
ij
135 i
j
(10.12)
438
Semua arah tepi yang berkisar antara 0 dan 22,5 serta 157,5 dan 180 derajat
(warna biru) diubah menjadi 0 derajat. Semua arah tepi yang berkisar antara 22,5
dan 67,5 derajat (warna kuning) diubah menjadi 45 derajat. Semua arah tepi yang
berkisar antara 67,5 dan 112,5 derajat (warna merah) diubah menjadi 90 derajat.
Semua arah tepi yang berkisar antara 112,5 dan 157,5 derajat (warna hijau) diubah
menjadi 135 derajat.
Langkah 5
Setelah arah tepi diperoleh, penghilangan non-maksimum dilaksanakan.
Penghilangan non-maksimum dilakukan di sepanjang tepi pada arah tepi dan
menghilangkan piksel-piksel (piksel diatur menjadi 0) yang tidak dianggap
sebagai tepi. Dengan cara seperti itu, diperoleh tepi yang tipis.
Langkah 6:
Langkah keenam berupa proses yang disebut hysteresis. Proses ini
menghilangkan garis-garis yang seperti terputus-putus pada tepi objek. Caranya
adalah dengan menggunakan dua ambang T1 dan T2. Lalu, semua piksel citra
yang bernilai lebih besar daripada T1 dianggap sebagai piksel tepi. Selanjutnya,
semua piksel yang terhubung dengan piksel tersebut dan memiliki nilai lebih
besar dari T2 juga dianggap sebagai piksel tepi.
Bagian penting yang perlu dijelaskan adalah penghilangan non-maksimum
dan peng-ambangan histeresis. Penghilangan non-maksimum dilakukan dengan
mula-mula menyalin isi larik Grad (yang berisi besaran gradien) ke Non_max.
Selanjutnya, penghilangan non-maksimum dilaksanakan dengan memperhatikan
dua titik tetangga yang terletak pada arah tepi (yang tersimpan dalam Theta).
Misalnya, arah tepi adalah 0. Apabila titik yang menjadi perhatian mempunyai
koordinat (r, c), dua titik tetangga berupa (r, c-1) dan (r, c+1). Apabila gradien titik
perhatian lebih besar daripada gradien kedua tetangga, nilainya akan
dipertahankan. Sebaliknya, jika nilai titik perhatian lebih kecil daripada nilai salah
satu atau kedua gradien tetangga, nilainya akan diabaikan (diubah menjadi nol).
Seluruh kemungkinan proses seperti itu dijabarkan dalam Gambar 10.28.
Segmentasi Citra
439
440
Segmentasi Citra
for i = 1 : m
for j = 1 : n
G(i, j) = round(G(i, j));
end
end
% Kenakan perhitungan gradien dan arah tepi
Theta = zeros(m, n);
Grad = zeros(m, n);
for i = 1 : m-1
for j = 1 : n-1
gx = (G(i,j+1)-G(i,j) + ...
G(i+1,j+1)-G(i+1,j)) / 2;
gy = (G(i,j)-G(i+1,j) + ...
G(i,j+1)-G(i+1,j+1)) / 2;
Grad(i, j) = sqrt(gx.^2 + gy.^2);
Theta(i,j) = atan2(gy, gx);
end
end
% Konversi arah tepi menjadi 0, 45, 90, atau 135 derajat
[r c] = size (Theta);
if Theta < 0
Theta = Theta + pi; % Jangkauan menjadi 0 s/d pi
end
for i = 1 : r
for j = 1 : c
if (Theta(i,j) < pi/8 || Theta(i,j) >= 7/8*pi)
Theta(i,j) = 0;
elseif (Theta(i,j)>=pi/8 && Theta(i,j) < 3*pi/8 )
Theta(i,j) = 45;
elseif (Theta(i,j) >=3*pi/8 && Theta(i,j) < 5*pi/8 )
Theta(i,j) = 90;
else
Theta(i,j) = 135;
end
end
end
% penghilangan non-maksimum
Non_max = Grad;
for i = 1+h2 : r-h2
for j = 1+w2 : c-h2
if Theta(i,j) == 0
if (Grad(i,j) <= Grad(i,j+1)) || ...
(Grad(i,j)<= Grad(i,j-1))
441
442
end
Non_max(i,j)
end
elseif Theta(i,j) ==
if (Grad(i,j) <=
(Grad(i,j) <=
Non_max(i,j)
end
elseif Theta(i,j) ==
if (Grad(i,j) <=
(Grad(i,j) <=
Non_max(i,j)
end
else
if (Grad(i,j) <=
(Grad(i,j) <=
Non_max(i,j)
end
end
= 0;
45
Grad(i-1,j+1)) || ...
Grad(i+1,j-1))
= 0;
90
Grad(i+1,j) ) || ...
Grad(i-1,j))
= 0;
Grad(i+1,j+1)) || ...
Grad(i-1,j-1))
= 0;
end
% Pengambangan histeresis
ambang_bawah = ambang_bawah * max(max(Non_max));
ambang_atas = ambang_atas * max(max(Non_max));
Histeresis = Non_max;
% ----% ----for i =
for
end
end
% ----- Penggantian angka 128 menjadi 255
% ----- Berakhir kalau tidak ada lagi yang berubah
ulang = true;
while ulang
ulang = false;
for i = 1+h2 : r-h2
for j = 1+w2 : c-w2
if (Histeresis(i,j) == 128)
if (Histeresis(i-1, j-1) == 255) && ...
(Histeresis(i-1, j) == 255) && ...
(Histeresis(i, j+1) == 255) && ...
Segmentasi Citra
443
end
end
end
% ----% ----for i =
for
end
end
% Buang tepi
for i = 1+h2 : r-h2
for j = 1+w2 : c-w2
K(i-1,j-1) = Histeresis(i,j);
end
end
Akhir Program
Contoh di atas menggunakan peng-ambangan berupa 0,05 untuk batas bawah dan
0,15 untuk batas atas. Hasilnya dapat dilihat pada Gambar 10.30.
444
Segmentasi Citra
445
zero-crossing
yang
digunakan
pada
algoritma
di
depan
446
10.31. Berdasarkan keempat bagian tersebut, nilai terbesar dan nilai terkecil
diperoleh. Piksel yang nilai terbesarnya melebihi nol dan nilai terkecilnya kurang
dari nol akan dijadikan sebagai tepi (diberi nilai 255).
Segmentasi Citra
447
x
: y+1
jum + G(q,p);
/ 4;
jum = 0;
for p = x : x+1
for q = y-1 : y
jum = jum + G(q,p);
end
end
rerata2 = jum / 4;
jum = 0;
for p = x : x+1
for q = y : y+1
jum = jum + G(q,p);
end
end
rerata3 = jum / 4;
end
end
return
Akhir Program
448
Segmentasi Citra
449
450
Segmentasi Citra
451
Program : kompas.m
=
=
=
=
=
=
=
=
kompas
[1 1 -1;1 -2 -1;1 1 -1];
[1 -1 -1;1 -2 -1;1 1 -1];
[-1 -1 -1;1 -2 1;1 1 1];
[-1 -1 1;-1 -2 1;1 1 1];
[-1 1 1;-1 -2 1;-1 1 1];
[1 1 1;-1 -2 1;-1 -1 1];
[1 1 1;1 -2 1;-1 -1 -1];
[1 1 1;-1 -2 1;-1 -1 1];
[5 -3 -3;5 0 -3;5 -3 -3];
[-3 -3 -3;5 0 -3; 5 5 -3];
[-3 -3 -3;-3 0 -3;5 5 5];
[-3 -3 -3;-3 0 5;-3 5 5];
[-3 -3 5;-3 0 5;-3 -3 -3];
[-3 5 5;-3 0 5;-3 -3 -3];
[5 5 5;-3 0 -3;-3 -3 -3];
[5 5 -3;5 0 -3;-3 -3 -3];
Robinson3_1
Robinson3_2
Robinson3_3
Robinson3_4
Robinson3_5
Robinson3_6
Robinson3_7
Robinson3_8
=
=
=
=
=
=
=
=
Robinson5_1
Robinson5_2
Robinson5_3
Robinson5_4
Robinson5_5
Robinson5_6
Robinson5_7
Robinson5_8
=
=
=
=
=
=
=
=
452
Prewitt(:,:,1)
Prewitt(:,:,2)
Prewitt(:,:,3)
Prewitt(:,:,4)
Prewitt(:,:,5)
Prewitt(:,:,6)
Prewitt(:,:,7)
Prewitt(:,:,8)
Kirsch(:,:,1)
Kirsch(:,:,2)
Kirsch(:,:,3)
Kirsch(:,:,4)
Kirsch(:,:,5)
Kirsch(:,:,6)
Kirsch(:,:,7)
Kirsch(:,:,8)
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
Prewitt1;
Prewitt2;
Prewitt3;
Prewitt4;
Prewitt5;
Prewitt6;
Prewitt7;
Prewitt8;
Kirsch1;
Kirsch2;
Kirsch3;
Kirsch4;
Kirsch5;
Kirsch6;
Kirsch7;
Kirsch8;
Robinson3(:,:,1)
Robinson3(:,:,2)
Robinson3(:,:,3)
Robinson3(:,:,4)
Robinson3(:,:,5)
Robinson3(:,:,6)
Robinson3(:,:,7)
Robinson3(:,:,8)
=
=
=
=
=
=
=
=
Robinson3_1;
Robinson3_2;
Robinson3_3;
Robinson3_4;
Robinson3_5;
Robinson3_6;
Robinson3_7;
Robinson3_8;
Robinson5(:,:,1)
Robinson5(:,:,2)
Robinson5(:,:,3)
Robinson5(:,:,4)
Robinson5(:,:,5)
Robinson5(:,:,6)
Robinson5(:,:,7)
Robinson5(:,:,8)
=
=
=
=
=
=
=
=
Robinson5_1;
Robinson5_2;
Robinson5_3;
Robinson5_4;
Robinson5_5;
Robinson5_6;
Robinson5_7;
Robinson5_8;
Segmentasi Citra
453
Opr(1,3,i)
Opr(2,1,i)
Opr(2,2,i)
Opr(2,3,i)
Opr(3,1,i)
Opr(3,2,i)
Opr(3,3,i)
*
*
*
*
*
*
*
end
end
maks = max(Grad);
G(y-1, x-1) = maks;
end
G = uint8(G);
Akhir Program
454
b ( y , x )=f ( x )= 1,untuk( y , x) T
0,untuk( y , x)<T
(10.13)
Pada rumus di atas, T menyatakan ambang intensitas. Dalam praktik, nilai 1 atau 0
pada Persamaan 10.13 dapat dipertukarkan.
Peng-ambangan intensitas biasa digunakan untuk memisahkan tulisan
hitam yang berada di atas secarik kertas putih. Namun, perlu diketahui, pengambangan ini mempunyai kelemahan, yaitu:
Segmentasi Citra
455
456
G(i,j) = 0;
else
G(i,j) = 1;
end
end
end
Akhir Program
Segmentasi Citra
457
Acharya & Ray, 2005). Algoritma untuk menentukan T secara iteratif adalah
seperti berikut.
ALGORITMA 10.3 Memperoleh nilai ambang secara iteratif
Masukan:
f (M,N): Citra berskala keabuan berukuran M baris dan N
kolom
Keluaran:
nilai ambang T
ambang_adaptif(f):
1. Pilihlah satu nilai untuk menentukan nilai ambang (T To).
2. Bagilah citra menjadi dua bagian dengan menggunakan T
sebagai nilai ambang.
3. Hitunglah nilai rata-rata pada kedua area (1 dan 2).
1+ 2
4. Hitunglah nilai ambang: T
2
5. Ulangi langkah 2 sampai dengan 4 sampai tidak ada
perubahan nilai T.
6. RETURN T
Catatan
Peng-ambangan iteratif dikenal juga dengan sebutan pengambangan optimal.
458
[m, n] = size(F);
F = double(F);
t0 = 127;
while true
rata_kiri = 0;
rata_kanan = 0;
jum_kiri = 0;
jum_kanan = 0;
for i=1 : m
for j=1 : n
if F(i, j) <= 127
rata_kiri = rata_kiri + F(i,j);
jum_kiri = jum_kiri + 1;
else
rata_kanan = rata_kanan + F(i,j);
jum_kanan = jum_kanan + 1;
end
end
end
rata_kiri = rata_kiri / jum_kiri;
rata_kanan = rata_kanan / jum_kanan;
t1 = (rata_kiri + rata_kanan) / 2.0;
if (t0 - t1) < 1
break; % Keluar dari while
end
t0 = t1;
end
t1 = floor(t1);
Akhir Program
Segmentasi Citra
459
>>
Hasil di atas menyatakan bahwa nilai ambang yang dihasilkan oleh fungsi titeratif
adalah 130. Penggunaan 1-G dalam imshow adalah untuk membalik nilai 1 dan 0.
Nilai 1 menjadi 0 dan nilai 0 menjadi 1. Dengan ungkapan tersebut, bagian daun
akan diberi nilai 1 (putih). Contoh hasilnya dapat dilihat pada Gambar 10.38.
460
Segmentasi Citra
461
1 nx 2+ ny 2
nilai
2 e
2
2
h(y+1, x+1) nilai
jum jum + nilai
END-FOR
END-FOR
7. RETURN g
(nx +ny )
2
2
Akhir Program
462
Hasilnya dapat dilihat pada Gambar 10.40(b). beberapa contoh penggunaan nilai
ambang yang lain dapat dilihat pada Gambar 10.40(c) hingga 10.40(f).
Segmentasi Citra
463
Hasilnya dapat dilihat pada Gambar 10.41(b). Terlihat bahwa dengan cara seperti
itu, bayangan daun dapat dihilangkan.
464
p (i )=
256
ni
, p ( i ) 0, p ( i )=1
N
1
(10.14)
w 1(t)= p(i)
(10.15)
i=1
L
w 2 ( t )= p ( i )=1w1 ( t )
(10.16)
i=t +1
Dalam hal ini, L menyatakan jumlah aras keabuan. Rerata kedua kelas dihitung
melalui:
t
m1 (t)= i . p ( i ) /W 1 (t)
(10.17)
i=1
t
m 2 (t )= i . p ( i ) / W 2 (t )
(10.18)
i=1
12 (t)= ( 1m 1 )2 .
i=1
L
p( i)
W 1 (t)
2 (t)= ( 1m2 )2 .
2
i=t+1
p(i)
W 2 (t)
(10.19)
(10.20)
(10.21)
Segmentasi Citra
465
dengan
2
(10.22)
Rumus di atas menunjukkan bahwa WCV adalah jumlah varians kelas secara
individual yang telah diboboti dengan probabilitas kelas masing-masing. Adapun
BCV dinyatakan dengan
2
B2 ( t )=W 1 . [ m1 (t )m T ] +W 2 . [ m2 (t )m T ]
(10.23)
Nilai ambang optimum dapat diperoleh dengan dua cara. Cara pertama
dilaksanakan dengan meminimumkan WCV. Cara kedua dilaksanakan dengan
memaksimumkan BCV. Namun, berdasarkan kedua cara tersebut, cara yang kedua
lebih menghemat komputasi.
Implementasi berikut didasarkan pada Persamaan 10.23. Skrip ditulis tanpa
memperhatikan optimasi komputasi. Pendekatan lain, yang memperhatikan
kecepatan komputasi, dapat dilihat pada Demirkaya, dkk. (2009).
Program : otsu.m
466
for i=1 : m
for j=1 : n
intensitas = F(i,j);
h(intensitas+1) = h(intensitas+1) + 1;
end
end
% Hitung p(i)
for i=1 : 256
p(i) = h(i) / jum_piksel;
end
% Hitung rerata total
mT = 0;
for i=1 : 256
mT = mT + i * p(i);
end
% Hitung t optimal
ambang = 0;
varMaks = 0;
for t=0 : 255
% Hitung w1(t)
w1 = 0.0;
for i=1 : t
w1 = w1 + p(i+1);
end
% Hitung w2(t)
w2 = 0.0;
for i=t+1 : 255
w2 = w2 + p(i+1);
end
% Hitung m1
m1 = 0;
for i=0 : t
if w1 > 0
m1 = m1 + i * p(i+1)/w1;
end
end
% Hitung m2
m2 = 0;
for i=t+1 : 255
if w2 > 0
m2 = m2 + i * p(i+1)/w2;
end
end
% Hitung BCV
bcv = w1 * (m1 - mT)^2 + w2 * (m2 - mT)^2;
if bcv > varMaks
varMaks = bcv;
ambang = t;
end
Segmentasi Citra
467
end
Akhir Program
Contoh:
>> Img = imread('C:\Image\ipomoea.png');
>> t = otsu(Img)
t = 130
>>
Hasil dengan menggunakan pendekatan Otsu tidak berbeda dengan hasil yang
menggunakan peng-ambangan iteratif.
Catatan
Octave menyediakan fungsi bawaan bernama graythresh, yang
diimplementasikan dengan menggunakan metode Otsu.
468
T=
f (i , j)
( y , x) W
Nw
(10.24)
Dalam hal ini, W menyatakan jendela pada citra, NW menyatakan jumlah piksel
dalam jendela, dan C menyatakan suatu konstanta.
Contoh fungsi yang menggunakan pendekatan rerata dapat dilihat berikut
ini.
Program : adapmean.m
% Diasumsikan berlatarbelakang 0
% Diasumsikan berlatarbelakang 1
Segmentasi Citra
469
F=double(F);
for y=1+delta : m-delta
for x=1+delta : n-delta
rerata = 0.0;
jum = w * w;
for p=1 : w
for q=1 : w
rerata = rerata + F(y-round(w/2)+p, ...
x-round(w/2)+q);
end
end
rerata = floor(rerata / jum) - c;
if F(y,x) >= rerata
G(y, x) = 1;
else
G(y, x) = 0;
end
end
end
Akhir Program
470
(10.25)
Segmentasi Citra
471
Dalam hal ini, W menyatakan jendela pada citra, NW menyatakan jumlah citra
dalam jendela, dan C menyatakan suatu nilai yang konstan. Implementasinya
dapat dilihat pada kode berikut.
Program : adapmedian.m
% Diasumsikan berlatarbelakang 0
% Diasumsikan berlatarbelakang 1
472
for q=1 : w
pencacah = pencacah + 1;
Nilai(pencacah) = F(y-round(w/2)+p, ...
x-round(w/2)+q);
end
end
% Urutkan hasil
Urut = sort(Nilai);
median = Urut(floor(pencacah/2)) - c;
end
end
Akhir Program
Segmentasi Citra
473
474
T=
Dalam hal ini, W menyatakan jendela pada citra, NW menyatakan jumlah piksel
dalam jendela. Implementasinya sebagai berikut.
Program : adapmaxmin.m
% Diasumsikan berlatarbelakang 0
% Diasumsikan berlatarbelakang 1
Segmentasi Citra
475
terkecil = 0.0;
jum = w * w;
pencacah = 0;
for p=1 : w
for q=1 : w
pencacah = pencacah + 1;
nilai= F(y-round(w/2)+p, ...
x-round(w/2)+q);
if nilai > terbesar
terbesar = nilai;
end
end
end
end
end
Akhir Program
476
Segmentasi Citra
477
>>
Seperti terlihat pada Gambar 10.46(a), pencahayaan pada citra berisi teks tidak
merata. Akibatnya, terdapat teks yang mengandung latarbelakang lebih gelap
daripada bagian yang lain. Beberapa contoh penggunaan parameter berbeda dan
hasil masing-masing dapat dilihat pada Gambar 10.46(b), 10.46(c), dan 10.46(d).
Sebagai perbandingan, apabila peng-ambangan aras-jamak digunakan, diperoleh
hasil seperti terlihat pada Gambar 10.47.
478
(10.27)
Dalam hal ini, N adalah jumlah piksel citra, dan L menyatakan jumlah aras
keabuan. Selanjutnya, apabila t adalah nilai ambang, entropi latarbelakang adalah:
Segmentasi Citra
H b ( t )=
i=0
479
p(i)
p( i)
. ln
Pb (t)
Pb (t)
(10.28)
H o ( t )=
i=t +1
p ( i)
p ( i)
. ln
Po(t )
Po(t )
(10.29)
L1
i=0
i=t +1
Pb ( t ) = p ( i ) , P o ( t )= p (i )
(10.30)
( t )=
i=0
p (i)
p (i ) L1 p ( i )
p (i)
ln
ln
Pb ( t ) Pb ( t ) i=t+1 Po ( t ) Po ( t )
(10.31)
480
Segmentasi Citra
end
481
varMaks = wt;
ambang = t;
end
Akhir Program
482
1
ln
1
[ ( )]
t
i=0
p(i )
P b (t )
(10.32)
Segmentasi Citra
H o ( t )=
1
ln
1
483
[(
L1
i=t +1
p (i)
1P o ( t )
)]
(10.33)
Notasi yang digunakan pada Persamaan 10.32 dan 10.33 sama seperti rumus yang
digunakan pada entropi Kapur. Parameter berguna untuk memperoleh nilai
ambang terbaik.
Implementasi peng-ambangan yang didasarkan Renyi dapat dilihat di
bawah ini.
Program : renyi.m
484
% Hitung Hb(t)
hbt = 0;
for i = 0 : t
if pbt ~= 0
hbt = hbt + (p(i+1) / pbt) ^ rho;
end
end
if hbt == 0
hbt = 0;
else
hbt = 1 / (1 - rho) * log(hbt);
end
% Hitung Ho(t)
hot = 0;
for i = t+1 : 255
hot = hot + (p(i+1) / 1-pbt) ^ rho;
end
if hot == 0
hot = 0;
else
hot = 1 / (1 - rho) * log(hot);
end
% Hitung w(t)
wt = hot + hbt;
end
if wt > varMaks
varMaks = wt;
ambang = t;
end
Akhir Program
Segmentasi Citra
485
486
Program : segwarna.m
Segmentasi Citra
487
else
end
S(y,x) = 128;
% Ubah komponen L
if L(y,x) >= 200
L(y,x) = 255;
elseif L(y,x) <= 20
L(y,x) = 0;
else
L(y,x) = 128;
end
end
end
Akhir Program
Hasilnya dapat dilihat pada Gambar 10.50. Dua contoh lain hasil pemrosesan
dengan segwarna dapat dilihat pada Gambar 10.51.
488
Segmentasi Citra
489
490
end
figure(3); imshow(H)
clear G H;
Segmentasi Citra
491
Akhir Program
Apabila skrip di atas dijalankan akan muncul tiga jendela. Jendela pertama berisi
citra asli. Jendela kedua berisi hasil pemrosesan dengan segwarna. Jendela ketiga
berisi hasil setelah warna abu-abu dan hitam diubah menjadi putih.
492
A(baris,kolom) = kelabu;
end
end
figure(1); imshow(A);
A = double(A);
% Lakukan penghalusan dengan rerata
for baris=2 : m-1
for kolom=2 : n-1
jum = A(baris-1, kolom-1)+ ...
A(baris-1, kolom) + ...
A(baris-1, kolom-1) + ...
A(baris, kolom-1) + ...
A(baris, kolom) + ...
A(baris, kolom+1) + ...
A(baris+1, kolom-1) + ...
A(baris+1, kolom) + ...
A(baris+1, kolom+1);
end
end
B = uint8(B);
%
t
t
C
Segmentasi Citra
for baris=1 : m
for kolom=1 : n
if D(baris, kolom) == 1
E(baris,kolom,1) = 255;
E(baris,kolom,2) = 255;
E(baris,kolom,3) = 255;
end
end
end
figure(4); imshow(E);
clear RGB A B C D E H;
Akhir Program
493
494
Latihan
1. Apa yang disebut dengan segementasi?
2. Apa hubungan tool seperti Magic Wand dengan segmentasi?
3. Berdasarkan teknik yang digunakan, segmentasi dapat dibagi menjadi empat
kategori. Apa saja dan berikan penjelasan secara singkat.
4. Apa yang dimaksud dengan deteksi tepi? Sebutkan paling tidak empat
operator yang terkait dengan deteksi tepi.
5. Jelaskan pengertian gradien.
6. Sebutkan contoh deteksi tepi orde kedua. Apa kelebihan deteksi tepi orde
kedua dibandingkan dengan orde pertama?
7. Apa kegunaan operator Canny?
8. Apa keunikan operator zero-crossing dibandingkan dengan operator seperti
Sobel dan Prewitt?
9. Apa yang dimaksud dengan operator Kompas?
10. Jelaskan istilah-istilah berikut.
(a) Peng-ambangan dwi-aras
(b) Peng-ambangan aras-jamak
(c) Peng-ambangan optimal
(d) Peng-ambangan iteratif
(e) Peng-ambangan global
(f) Peng-ambangan lokal
(g) Peng-ambangan adaptif
11. Berikan contoh yang tergolong sebagai peng-ambangan secara entropi.
12. Pada file yang disediakan untuk buku ini, terdapat file bernama
empatbola.png, yang isinya seperti berikut.
Segmentasi Citra
495
Tugas Anda adalah membuat suatu fungsi yang menerima masukan berupa
sebuah warna. Sebagai contoh, apabila Anda menyertakan warna biru
sebagai argumen, citra hanya akan menampilkan bola yang berwarna biru.
496