Anda di halaman 1dari 96

BAB 10

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

10.1 Pengantar Segmentasi Citra


Segmentasi citra merupakan proses yang ditujukan untuk mendapatkan
objek-objek yang terkandung di dalam citra atau membagi citra ke dalam
beberapa daerah dengan setiap objek atau daerah memiliki kemiripan atribut. Pada
citra yang mengandung hanya satu objek, objek dibedakan dari latarbelakangnya.
Contoh ditunjukkan pada Gambar 10.1. Pada citra yang mengandung sejumlah
objek, proses untuk memilah semua objek tentu saja lebih kompleks. Contoh
penerapan segmentasi yaitu untuk membuat Magic Wand, yang biasa terdapat
pada perangkat pengedit foto. Contoh pada Gambar 10.2 menunjukkan
penggunaan

Magic

Wand

pada

Adobe

Photoshop.

Contoh

memperlihatkan pemilihan area yang ditandai dengan warna khusus.

Gambar 10.1 Pemisahan objek daun terhadap latarbelakang

tersebut

Segmentasi Citra

403

Gambar 10.2 Pemilihan citra berdasarkan warna,


yang intinya diperoleh melalui segmentasi.
Bagian terpilih ditandai dengan garis terputus-putus
Gambaran berbagai aplikasi segmentasi serta acuan yang digunakan dapat
dilihat pada Tabel 10.1. Secara prinsip, segmentasi dilakukan untuk mendapatkan
objek yang menjadi perhatian.
Tabel 10.1 Aplikasi segmentasi pada citra
Objek

Citra

Kegunaan

Acuan yang

Mobil

Mobil, jalan, dan

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

Pemilahan buah apel

dan tekstur
Bentuk, warna,

pada ban berjalan

berdasarkan ukuran

ukuran

Segmentasi

juga

biasa

dilakukan

sebagai

langkah

awal

untuk

melaksanakan klasifikasi objek. Gambar 10.3 menperlihatkkan hal ini. Setelah


segmentasi citra dilaksanakan, fitur yang terdapat pada objek diambil. Sebagai
contoh, fitur objek dapat berupa perbandingan lebar dan panjang objek, warna
rata-rata

objek, atau bahkan tekstur pada objek. Selanjutnya, melalui

404

Pengolahan Citra : Teori dan Aplikasi

pengklasifikasi, jenis objek dapat ditentukan. Sebagai contoh, pengklasifikasi


menyatakan bahwa daun termasuk golongan Aglaonema.
Teknik segmentasi citra didasarkan pada dua properti dasar nilai aras
keabuan: ketidaksinambungan dan kesamaan antarpiksel. Pada bentuk yang
pertama, pemisahan citra didasarkan pada perubahan mendadak pada aras
keabuan. Contoh yang menggunakan pendekatan seperti itu adalah detektor garis
dan detektor tepi pada citra. Cara kedua didasarkan pada kesamaan antarpiksel
dalam suatu area (Acharya dan Ray, 2005). Termasuk dalam cara kedua ini yaitu:
peng-ambangan berdasarkan histogram;
pertumbuhan area;
pemisahan dan penggabungan area;
pengelompokan atau pengklasifikasian;
pendekatan teori graf;
pendekatan yang dipandu pengetahuan atau berbasis aturan.
Berdasarkan teknik yang digunakan, segmentasi dapat dibagi menjadi empat
kategori berikut(Rangayyan, 2005):
1) teknik peng-ambangan;
2) metode berbasis batas;
3) metode berbasis area;
4) metode hibrid yang mengombinasikan kriteria batas dan area.

Segmentasi Citra

405

Gambar 10.3 Segmentasi sebagai langkah awal


sistem klasifikasi
10.2 Deteksi Garis
Deteksi garis pada citra dapat diperoleh melalui penggunaan cadar
(mask) dengan contoh tercantum pada Gambar 10.4 (Gonzalez & Woods, 2002).
Cadar (a) berguna untuk memperoleh garis horizontal, cadar (b) untuk
mendapatkan garis yang berorientasi 45o, cadar (c) untuk memperoleh garis tegak,
dan cadar (d) untuk mendapatkan garis yang berorientasi -45o.

Gambar 10.4 Empat pasang cadar untuk mendeteksi keberadaan garis

406

Pengolahan Citra : Teori dan Aplikasi

Fungsi deteksi berikut berguna untuk menguji cadar-cadar yang terdapat


pada Gambar 10.4. Fungsi tersebut sekaligus dapat dipakai untuk menguji cadarcadar yang lain.
Program : deteksi.m

function [G] = deteksi(F, H, potong, pembulatan)


% DETEKSI Melakukan operasi korelasi kernel H dengan citra F
%
H harus mempunyai tinggi dan lebar ganjil
%
Argumen potong bersifat opsional. Apabila
%
bernilai true, bagian citra yang tidak diproses
%
akan dipotong. Bawaan = false
%
Argumen pembulatan bersifat opsional.
%
Apabila bernilai true, pembulatan dengan uint8
%
tidak dilakukan. Bawaan = true
%
%
Hasil: citra G
if nargin < 3
potong = false;
end
if nargin < 4
pembulatan = true;
end
[tinggi_f, lebar_f] = size(F);
[tinggi_h, lebar_h] = size(H);
if rem(lebar_h,2) == 0 || rem(tinggi_h,2) == 0
disp('Lebar dan tinggi H harus ganjil');
return;
end
m2 = floor(tinggi_h/2);
n2 = floor(lebar_h/2);
% Menentukan ukuran hasil beserta
%
penentu ofset koordinat
if potong == true
sisi_m2 = m2;
sisi_n2 = n2;
G = zeros(tinggi_f - 2 * m2, lebar_f - 2 * n2);
else
sisi_m2 = 0;
sisi_n2 = 0;
G = zeros(size(F));
end
F2=double(F);

Segmentasi Citra

407

for y=m2+1 : tinggi_f-m2


for x=n2+1 : lebar_f-n2
% Pelaksanaan korelasi F(baris, kolom)
jum = 0;
for p=-m2 : m2
for q=-n2 : n2
jum = jum + H(p+m2+1,q+n2+1) * ...
F2(y+p, x+q);
end
end
G(y - sisi_m2, x - sisi_n2) = jum;
end

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

Pengolahan Citra : Teori dan Aplikasi

Hasil deteksi garis dapat dilihat pada Gambar 10.5(b). Terlihat bahwa garis
vertikal tidak tampak. Namun, garis miring dan mendatar tetap terdeteksi.

Gambar 10.5 Contoh deteksi garis horizontal


Gambar 10.6 memperlihatkan perbedaan hasil yang menggunakan masing-masing
satu dari keempat cadar yang tercantum di Gambar 10.4.

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

Pengolahan Citra : Teori dan Aplikasi

10.3 Deteksi Tepi


Deteksi tepi berfungsi untuk memperoleh tepi objek. Deteksi tepi
memanfaatkan perubahan nilai intensitas yang drastis pada batas dua

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

Pengolahan Citra : Teori dan Aplikasi

Catatan

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.

Contoh pada Gambar 10.7(a) menunjukkan keadaan fungsi intensitas citra


f(y,x) pada arah x dengan bentuk tepi tanjakan yang landai. Gambar 10.7(b)
menunjukkan keadaan turunan pertama pada arah x. Puncak pada Gambar 10.7(b)
menyatakan letak tepi pada turunan pertama, sedangkan persilangan nol pada
Gambar 10.7(c) menyatakan letak tepi pada turunan kedua. Apabila nilai batas
dikenakan pada turunan pertama, puncak tidak lagi menjadi tepi. Akibatnya,
terdapat dua nilai yang memenuhi (yaitu a dan b). Kedua nilai tersebut akan
menjadi piksel-piksel tepi. Berbeda halnya pada turunan kedua, tepi akan selalu
berupa satu piksel. Hal itu terlihat pada perpotongan fungsi turunan kedua dengan
sumbu x. Akibatnya, ketebalan tepi akan selalu berupa satu piksel.

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:

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 undakan

tepi tanjakan

Deteksi tepi dengan turunan orde pertama dilakukan dengan menggunakan


operator gradien. Operator gradien didefinisikan sebagai vektor

414

Pengolahan Citra : Teori dan Aplikasi

[]

df
Gx
dx
v f=
=
df
Gy
dy

[ ]

(10.1)

Besaran vektor dihitung menggunakan rumus

f =mag ( f )= [ Gx +G y
2

2 1/ 2

2 1/ 2

df
df
= ( ) +( )
dx
dy

(10.2)

Namun, untuk alasan penyederhanaan komputasi, operasi akar ditiadakan


sehingga besaran vektor tersebut dihampiri melalui
f G x 2+ G y 2

(10.3)

Perlu diketahui, besaran gradien sering disebut sebagai gradien saja.


Adapun turunan orde kedua yang biasa digunakan dalam pengolahan citra
dihitung dengan menggunakan Laplacian. Perhitungannya seperti berikut:

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.

Berbagai teknik deteksi tepi bekerja dengan cara yang berbeda.


Masing-masing memiliki kekuatan (Crane, 1997). Itulah
sebabnya, eksperimen pada suatu aplikasi dengan menggunakan
berbagai teknik deteksi tepi perlu dilakukan untuk mendapatkan
hasil yang terbaik.

10.3.1 Operator Roberts


Operator Roberts, yang pertama kali dipublikasikan pada tahun 1965,
terdiri atas dua filter berukuran 2x2. Ukuran filter yang kecil membuat komputasi
sangat cepat. Namun, kelebihan ini sekaligus menimbulkan kelemahan, yakni
sangat terpengaruh oleh derau. Selain itu, operator Roberts memberikan
tanggapan yang lemah terhadap tepi, kecuali kalau tepi sangat tajam (Fisher, dkk.,
2003).

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

Pengolahan Citra : Teori dan Aplikasi

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

function [G] = roberts(F)


% ROBERTS Pemerolehan tepi objek pada citra F
%
melalui operator Roberts
%
Hasil: citra G
[m, n] = size(F);
F=double(F);
for y=1 : m-1
for x=1 : n-1
G(y, x) = sqrt((F(y,x)-F(y+1,x+1))^2 + ...
(F(y+1,x)-F(y,x+1))^2) ;
end

end

G = uint8(G);

Akhir Program

Contoh penggunaan fungsi roberts:


>> Img = rgb2gray(imread('C:\Image\mainan.png'));
>> G = roberts(Img);
>> imshow(G)
>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.9.

Segmentasi Citra

417

Gambar 10.9 Pengenaan operator Roberts pada citra mainan.png


10.3.2 Operator Prewitt
Operator Prewitt dikemukakan oleh Prewitt pada tahun 1966. Bentuknya
terlihat pada Gambar 10.10. Untuk mempercepat komputasi, bagian yang bernilai
nol tidak perlu diproses. Oleh karena itu, perhitungan dengan operator Prewitt
ditulis menjadi
r ( y , x )= sqrt((f(y-1,x-1)+f(y,x-1)+f(y+1,x-1) f(y-1,x+1)-f(y,x+1)-f(y+1,x+1))^2 +
(f(y+1,x-1)+ f(y+1,x) + f(y+1,x+1) f(y-1,x-1) - f(y-1,x) - f(y-1,x+1))^2))

(10.6)

418

Pengolahan Citra : Teori dan Aplikasi

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

function [G] = prewitt(F)


% PREWITT Pemerolehan tepi objek pada citra F
%
melalui operator Prewitt
%
Hasil: citra G
[m, n] = size(F);
F=double(F);
G=zeros(m,n);
for y=2 : m-1
for x=2 : n-1
G(y, x) = sqrt((F(y-1,x-1) + F(y,x-1) + F(y+1,x-1) - ...
F(y,x) - F(y,x+1) - F(y+1,x+1))^2 + ...
(F(y+1,x-1)+ F(y+1,x) + F(y+1,x+1) - ...
F(y-1,x-1) - F(y-1,x) - F(y-1,x+1))^2) ;
end
end
G = uint8(G);

Akhir Program

Contoh penggunaan fungsi prewitt:


>> Img = rgb2gray(imread('C:\Image\mainan.png'));

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

Pengolahan Citra : Teori dan Aplikasi

Catatan

Fungsi deteksi dapat digunakan untuk mengamati efek cadar Gx


dan Gy pada operator Prewitt secara individual. Contoh
penggunaannya seperti berikut:
>> Img = rgb2gray(imread('C:\Image\mainan.png'));
>> Gx = [ 1 0 -1; 1 0 -1; 1 0 -1];
>> G = deteksi(Img, Gx); imshow(G)
>>

Hasilnya seperti berikut:

10.3.3 Operator Sobel


Operator Sobel dapat dilihat pada Gambar 10.12. Operator Sobel lebih
sensitif terhadap tepi diagonal daripada tepi vertikal dan horizontal

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

function [G] = sobel(F)


% SOBEL Pemerolehan tepi objek pada citra F
%
melalui operator Sobel
%
Hasil: citra G
[m, n] = size(F);
F=double(F);
G=zeros(m,n);
for y=2 : m-1
for x=2 : n-1
G(y, x) = sqrt(...
(F(y-1,x+1)+2*F(y,x+1)+F(y+1,x+1) - ...
F(y-1,x-1)-F(y,x-1)-F(y+1,x-1))^2 + ...
(F(y-1,x-1)+2*F(y-1,x)+F(y-1,x+1) - ...
F(y+1,x-1)-2*F(y+1,x)-F(y+1,x+1))^2) ;
end
end
G = uint8(G);

Akhir Program

Contoh penggunaan fungsi sobel:


>> Img = rgb2gray(imread('C:\Image\mainan.png'));

422

Pengolahan Citra : Teori dan Aplikasi

>> G = sobel(Img);
>> imshow(G)
>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.13.

Gambar 10.13 Hasil deteksi tepi dengan operator Sobel


10.3.4 Operator Frei-Chen
Operator Frei-Chen (kadang disebut operator isotropik) ditunjukkan pada
Gambar 10.14. Operator ini mirip dengan operator Sobel, dengan setiap angka 2
diganti menjadi

2 .

Gambar 10.14 Operator Frei-Chen (b) dan (c) serta posisi dalam citra f

Segmentasi Citra

423

Fungsi freichen berikut berguna untuk melakukan pengujian operator


Frei-Chen terhadap citra berskala keabuan.
Program : freichen.m

function [G] = freichen(F)


% FREICHEN Pemerolehan tepi objek pada citra F
%
melalui operator Frei-Chen
%
Hasil: citra G
[m, n] = size(F);
akar2 = sqrt(2);
F=double(F);
G=zeros(m,n);
for y=2 : m-1
for x=2 : n-1
G(y, x) = sqrt(...
(F(y-1,x+1)+akar2*F(y,x+1)+F(y+1,x+1) - ...
F(y-1,x-1)-F(y,x-1)-F(y+1,x-1))^2 + ...
(F(y-1,x-1)+akar2*F(y-1,x)+F(y-1,x+1) - ...
F(y+1,x-1)-akar2*F(y+1,x)-F(y+1,x+1))^2) ;
end
end
G = uint8(G);

Akhir Program

Contoh penggunaan fungsi freichen:


>> Img = rgb2gray(imread('C:\Image\mainan.png'));
>> G = freichen(Img);
>> imshow(G)
>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.15.

424

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.15 Hasil deteksi tepi dengan operator Frei-Chen


Gambar 10.16 memperlihatkan perbedaan secara visual hasil deteksi tepi
dengan menggunakan operator Roberts, Prewitt, Sobel, dan Frei-Chen. Perlu
diketahui, hasil pada gambar tersebut masih berskala keabuan. Untuk menjadi
citra biner, perlu dilakukan peng-ambangan yang mulai dibahas pada Subbab
10.4. Contoh hasil peng-ambangan dapat dilihat pada Gambar 10.17.

Segmentasi Citra

425

Gambar 10.16 Perbedaan hasil deteksi tepi dengan


menggunakan keempat macam operator

Gambar 10.17 Contoh hasil deteksi tepi dan peng-ambangan


10.3.5 Operator Laplacian
Operator Laplacian merupakan contoh operator yang berdasarkan pada
turunan kedua. 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). Contoh cadar ditunjukkan pada Gambar 10.18.

426

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.18 Operator Laplacian


Berdasarkan cadar #1 pada Gambar 10.18(b), nilai operator Laplacian
pada (y, x) didefinisikan sebagai
f ( y1, x ) +f ( y , x 1 )+
l ( y , x )=4 f ( y , x )
f ( y , x+1 ) + f ( y +1, x)

(10.7)

Fungsi laplacian2 berikut berguna untuk melakukan pengujian


operator Laplacian terhadap citra berskala keabuan dengan menggunakan cadar
#2 yang tertera pada Gambar 10.18(c).
Program : laplacian2.m

function [G] = laplacian2(F)


% LAPALACIAN2 Pemerolehan tepi objek pada citra F
%
melalui operator Laplacian #1
%
Hasil: citra G
[m, n] = size(F);
G=zeros(m,n);
% Semua berisi nol
F=double(F);
for y=2 : m-1
for x=2 : n-1
G(y, x) = 8 * F(y,x) - ...
(F(y-1,x)+ F(y,x-1)+F(y,x+1)+F(y+1,x) + ...

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

Contoh penggunaan fungsi laplacian2:


>> Img = rgb2gray(imread('C:\Image\mainan.png'));
>> G = laplacian2(Img);
>> imshow(G)
>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.19.

Gambar 10.19 Hasil deteksi tepi


menggunakan operator Laplacian #2

428

Pengolahan Citra : Teori dan Aplikasi

10.3.6 Operator Laplacian of Gaussian


Deteksi tepi orde kedua yang makin kurang sensitif terhadap derau adalah
Laplacian of Gaussian (LoG). Hal ini disebabkan penggunaan fungsi Gaussian
yang memuluskan citra dan berdampak pada pengurangan derau pada citra.
Akibatnya, operator mereduksi jumlah tepi yang salah terdeteksi (Crane, 1997).
Menurut Fisher, dkk. (2003), operator LoG diperoleh melalui konvolusi
dengan
log ( y , x )=

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

Nixon dan Aguido (2002) menggunakan rumus:

1 x2+ y2
log ( y , x )= 2
2 e

(x + y )
2
2

Adapun Crane (1997) menggunakan rumus:

1
x2 + y 2
log ( y , x )= 4 1
e

2 2

(x + y )
2
2

Segmentasi Citra

429

Gambar 10.20 Fungsi LoG(y, x) berdasarkan Fisher, dkk. (2003)

Gambar 10.21 Contoh operator LoG


Contoh penggunaan LoG:
>> Img = rgb2gray(imread('C:\Image\mainan.png'));
>> H = [

0 -1

0 -1 -2 -1

-1 -2 16 -2 -1
0 -1 -2 -1

0];

0 -1

>> G = deteksi(Img, H); imshow(G)


>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.22.

430

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.22 Contoh hasil deteksi tepi dengan LoG


Nixon & Aguado (2002) memberikan cara yang dapat digunakan untuk
memperoleh cadar LoG berdasarkan nilai dan ukuran. Cara tersebut tertuang
dalam algoritma berikut.
ALGORITMA 10.1 Memperoleh cadar LoG
Masukan:
Ukuran : ukuran cadar
: Deviasi standar
Keluaran:
h (M, N): Cadar LoG
cadarLoG(ukuran, ):
1. cx floor((ukuran-1) / 2)
2. cy cx
3. jum 0
4. FOR y 0 TO ukuran -1
FOR x 0 TO ukuran -1
nx x cx

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

function [H] = cadarLoG(ukuran, sigma)


% CADARLOG Menghasilkan cadar LoG berdasarkan
%
Nixon dan Aguido (2002)
%
Masukan:
%
ukuran : ukuran cadar
%
sigma : Deviasi standar
%
Keluaran : H = cadar LoG
cx = floor((ukuran-1) / 2);
cy = cx;
jum = 0;
H = zeros(ukuran, ukuran);
for y=0 : ukuran-1
for x=0 : ukuran -1
nx = x - cx;
ny = y - cy;
nilai = 1 / (sigma ^ 2) * ...
((nx^2 + ny^2)/(sigma^2)-2) * ...
exp((-nx^2 - ny^2) / (2 * sigma^2));
H(y+1, x+1) = nilai;
jum = jum + nilai;
end

end

432

Pengolahan Citra : Teori dan Aplikasi

% Lakukan normalisasi
for y=1 : ukuran
for x=1 : ukuran
H(y,x) = H(y,x) / jum;
end
end

Akhir Program

Contoh penggunaan cadarLoG untuk memperoleh cadar LoG berukuran


7 x 7 dengan = 0,6 :
>> cadarLoG(7, 0.6)
ans =
-0.0000 -0.0000 -0.0002 -0.0008 -0.0002 -0.0000 -0.0000
-0.0000 -0.0029 -0.1085 -0.3335 -0.1085 -0.0029 -0.0000
-0.0002 -0.1085 -2.0930 -1.8361 -2.0930 -0.1085 -0.0002
-0.0008 -0.3335 -1.8361 18.9348 -1.8361 -0.3335 -0.0008
-0.0002 -0.1085 -2.0930 -1.8361 -2.0930 -0.1085 -0.0002
-0.0000 -0.0029 -0.1085 -0.3335 -0.1085 -0.0029 -0.0000
-0.0000 -0.0000 -0.0002 -0.0008 -0.0002 -0.0000 -0.0000
>>
Adapun contoh berikut untuk memperoleh cadar LoG berukuran 7 x 7 dengan =
1:
>> cadarLoG(7, 1)
ans =
-0.0385 -0.3221 -1.0499 -1.5146 -1.0499 -0.3221 -0.0385
-0.3221 -2.1404 -4.7962 -5.2717 -4.7962 -2.1404 -0.3221
-1.0499 -4.7962

0 11.8132

0 -4.7962 -1.0499

Segmentasi Citra

433

-1.5146 -5.2717 11.8132 38.9532 11.8132 -5.2717 -1.5146


-1.0499 -4.7962

0 11.8132

0 -4.7962 -1.0499

-0.3221 -2.1404 -4.7962 -5.2717 -4.7962 -2.1404 -0.3221


-0.0385 -0.3221 -1.0499 -1.5146 -1.0499 -0.3221 -0.0385
>>
Cadar LoG akan bermanfaat untuk kepentingan pemrosesan dengan operator
Marr-Hildreth, yang dibahas pada Bagian 10.4.10.
10.3.7 Operator Difference of Gaussian
Mengingat LoG memerlukan komputasi yang besar, Difference of Gaussian
(DoG) biasa digunakan sebagai hampiran terhadap LoG. Fungsi DoG berupa
2

DoG ( y . x )=

(x + y )
2
2 1

2 1

(x + y )
2
2 2

2 22

(10.9)

Terlihat bahwa DoG dilaksanakan dengan melakukan konvolusi citra dengan


sebuah cadar yang merupakan hasil pengurangan dua buah cadar Gaussian
dengan nilai yang berbeda. Gambar 10.23 menunjukkan dua cadar yang dapat
digunakan untuk melaksanakan DoG (Crane, 1997).

434

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.23 Contoh cadar DoG


Contoh penggunaan DoG:
>> Img = rgb2gray(imread('C:\Image\mainan.png'));
>> H = [ 0

-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 ];

>> G = deteksi(Img, H); imshow(G)


>>

Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.24.

Segmentasi Citra

435

Gambar 10.24 Hasil deteksi tepi menggunakan DoG


10.3.9 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.
Terdapat enam langkah yang dilakukan untuk mengimplementasikan
deteksi tepi Canny (Green, 2002). Keenam langkah tersebut dijabarkan berikut
ini.
Langkah 1:
Pertama-tama dilakukan penapisan terhadap citra dengan tujuan untuk
menghilangkan derau. Hal ini dapat dilakukan dengan menggunakan filter
Gaussian dengan cadar sederhana. Cadar yang digunakan berukuran jauh lebih
kecil daripada ukuran citra. Contoh ditunjukkan pada Gambar 10.25.

436

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.25 Contoh cadar Gaussian dengan theta = 1,4


Langkah 2:
Setelah penghalusan gambar terhadap derau dilakukan, dilakukan proses
untuk mendapatkan kekuatan tepi (edge strength). Hal ini dilakukan dengan
menggunakan operator Gaussian.
Selanjutnya, gradien citra dapat dihitung melalui rumus:
G Gx G y

(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.

Gambar 10.26 Matriks piksel berukuran 5x5


Selanjutnya, arah tepi yang diperoleh akan dimasukkan ke dalam salah satu
kategori dari keempat arah tadi berdasarkan area yang tertera pada Gambar 10.27.
Berikut adalah aturan konversi yang berlaku:
0

(H )
( HI )
(H )
45 yi f wij x j

arah
90 y f (T ) w (TH ) y ( H )
j
ij

135 i
j

Gambar 10.27 Area untuk mengonversi arah tepi ke dalam


kategori salah satu dari arah 0o, 45o, 90o, dan 135o

(10.12)

438

Pengolahan Citra : Teori dan Aplikasi

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

Gambar 10.28 Penghilangan non-maksimum


Peng-ambangan histeresis dilakukan dengan melibatkan dua ambang T1
(ambang bawah) dan ambang T2 (ambang atas). Nilai yang kurang dari T1 akan
diubah menjadi hitam (nilai 0) dan nilai yang lebih dari T 2 diubah menjadi putih
(nilai 255). Lalu, bagaimana nilai yang lebih dari atau sama dengan T 1 tetapi
kurang dari T2? Oleh karena itu, untuk sementara nilai pada posisi seperti itu
diberi nilai 128, yang menyatakan nilai abu-abu atau belum jelas, akan dijadikan 0
atau 255.
Selanjutnya, dilakukan pengujian untuk mendapatkan kondisi seperti
tercantum pada Gambar 10.29. Apabila kondisi seperti itu terpenuhi, angka 128
diubah menjadi 255. Proses pengujian seperti itu dilakukan sampai tidak ada lagi
perubahan dari nilai 128 menjadi 255. Tahap selanjutnya, semua piksel yang
bernilai 128 yang tersisa diubah menjadi nol.

440

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.29 Pengujian untuk mengubah nilai 128 menjadi 255


Implementasi operator Canny dapat dilihat pada canny.m. Sejumlah
keterangan diberikan pada skrip, untuk menjelaskan kode.
Program : canny.m

function [K] = canny(F, ambang_bawah, ambang_atas)


% CANNY Pemerolehan tepi objek pada citra F
%
melalui operator Canny
%
Masukan:
%
ambang_bawah = batas bawah untuk ambang histeresis
%
Nilai bawaan 011
%
ambang_atas = batas atas untuk ambang histeresis
%
Nilai bawaan 0,3
%
Hasil: citra G
% Menentukan nilai ambang bawaan
if nargin < 2
ambang_bawah = 0.1;
end
if nargin < 2
ambang_atas = 0.3;
end
% Kernel Gaussians
HG = [ 2 4 5 4 2
4 9 12 9 12
5 12 15 12 5
4 9 12 9 12
2 4 5 4 2 ] / 115.0;
[hHG, wHG] = size(HG);
h2 = floor(hHG / 2);
w2 = floor(wHG / 2);
% Kenakan operasi Gaussian
G = double(deteksi(F, HG, true));
% Pastikan hasilnya berada antara 0 sampai dengan 255
[m, n] = size(G);

Segmentasi Citra

for i = 1 : m
for j = 1 : n
G(i, j) = round(G(i, j));

end

if G(i, j) > 255


G(i, j) = 255;
else
if G(i, j) < 0
G(i, j) = 0;
end
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

Pengolahan Citra : Teori dan Aplikasi

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

Penentuan awal untuk memberikan nilai


0, 128, dan 255
1+h2 : r-h2
j = 1+w2 : c-w2
if (Histeresis(i,j) >= ambang_atas)
Histeresis(i,j) = 255;
end
if (Histeresis(i,j) < ambang_atas) && ...
(Histeresis(i,j) >= ambang_bawah)
Histeresis(i,j)= 128;
end

end

if (Histeresis(i,j) < ambang_bawah)


Histeresis(i,j) = 0;
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

(Histeresis(i, j-1) == 255) && ...


(Histeresis(i, j+1) == 255) && ...
(Histeresis(i+1, j-1) == 255) && ...
(Histeresis(i+1, j) == 255) && ...
(Histeresis(i+1, j+1) == 255)
Histeresis(i,j) = 255;
ulang = true; % Ulang pengujian
end
end

end

end

end
% ----% ----for i =
for

end

Penggantian angka 128 menjadi 0


untuk yang tersisa
1+h2 : r-h2
j = 1+w2 : c-w2
if (Histeresis(i,j) == 128)
Histeresis(i,j) = 0;
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 penggunaan fungsi canny:


>> Img = imread('C:\Image\lena256.png');
>> G = canny(Img, 0.05, 0.15); imshow(G)
>>

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

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.30 Contoh hasil antara hingga hasil akhir


pada pengenaan operator Canny
10.3.10 Operator Zero-Crossing
Operator zero-crossing atau dikenal dengan nama lain yaitu operator
Marr-Hildreth sebenarnya adalah operator LoG yang dilengkapi dengan upaya
untuk menemukan zero crossing. Zero-crossing menyatakan tanda perubahan pada
tepi-tepi dalam citra. Sebagaimana telah dibahas di depan, zero-crossing
merupakan perpotongan dengan sumbu X pada turunan kedua (Gambar 10.7).
Operasi inilah yang membuat operator Marr-Hildreth mampu menghasilkan kurva
yang tertutup, yang tidak dapat dipenuhi oleh operator Canny.
Ada beberapa teknik yang dapat digunakan untuk melakukan pemrosesan
zero-crossing, misalnya seperti yang dibahas pada Crane (1997) atau pada Nixon
dan Aguido (2002). Algoritma yang didasarkan pada Nixon dan Aguido dapat
dilihat berikut ini.

Segmentasi Citra

445

ALGORITMA 10.2 Memproses zero crossing


Masukan:
g: Citra hasil pemrosesan LoG, berukuran MxN
ukuran : Ukuran cadar
: Deviasi standar
Keluaran:
k: citra hasil pemrosesan operator Marr-Hildreth
zerocross(g, ukuran, ) :
1. // Bentuk larik k yang seluruhnya bernilai 0
FOR y 1 TO M
FOR y 1 TO M
k(y, x) 0
END
END
2. FOR y 2 TO M-1
FOR kolom 2 TO N-1
bag1 rerata(g(x-1, y-1), g(x, y), g(x-1, y-1), g(x, y))
bag2 rerata(g(x, y-1), g(x+1, y), g(x, y-1), g(x+1, y))
bag3 rerata(g(x, y-1), g(x+1, y), g(x+1, y-1), g(x+1, y))
bag4 rerata(g(x, y), g(x+1, y+1), g(x, y), g(x+1, y+1))
terbesar max(bag)
terkecil min(bag)
IF (terbesar > 0) AND (terkecil < 0)
k(y,x) 255
END-IF
END-FOR
END-FOR
3. RETURN k
Implementasi operator zero-crossing dapat dilihat pada zerocross.m.
Proses

zero-crossing

yang

digunakan

pada

algoritma

di

depan

dilaksanakan dengan memanfaatkan jendela berukuran 3 x 3. Setiap piksel yang


diperoleh melalui operasi Laplacian dikenai jendela tersebut. Adapun perhitungan
yang dilakukan adalah dengan mula-mula menghitung nilai rerata dari empat
bagian (masing-masing berukuran 2 x 2) seperti yang diperlihatkan pada Gambar

446

Pengolahan Citra : Teori dan Aplikasi

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).

Gambar 10.31 Area untuk deteksi zero-crossing


pada jendela berukuran 3 x 3
Implementasi operator Marr-Hilbreth ditunjukkan di bawah ini.
Program : zerocross.m

function [K] = zerocross(F, ukuran, sigma)


% ZEROCROSS Pemerolehan tepi objek pada citra F
%
melalui operator Marr-Hildreth
%
Hasil: citra K
H = cadarLoG(ukuran, sigma);
pembulatan = false;
potong = true;
G = deteksi(F, H, potong, pembulatan);
% Proses zero crossing
K = zeros(size(G));
[m, n] = size(K);
for y=2 : m-1

Segmentasi Citra

447

for x=2: n-1


jum = 0;
for p = x-1 : x
for q = y-1 : y
jum = jum + G(q,p);
end
end
rerata0 = jum / 4;
jum = 0;
for p = x-1 :
for q = y
jum =
end
end
rerata1 = jum

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

terbesar = max([rerata0 rerata1 rerata2 rerata3]);


terkecil = min([rerata0 rerata1 rerata2 rerata3]);
if (terbesar > 0) && (terkecil < 0)
K(y,x) = 255;
end

end
return

Akhir Program

Contoh penggunaan fungsi zerocross:


>> Img = imread('C:\Image\lena256.png');
>> G = zerocross(Img, 7,1); imshow(G)
>>

448

Pengolahan Citra : Teori dan Aplikasi

Lima contoh hasil pemrosesan dengan operator Harr-Hildreth dengan nilai


berbeda dapat dilihat pada Gambar 10.32.

Gambar 10.32 Hasil penerapan operator Marr-Hilldreth pada lena256.png


Contoh berikut menunjukkan penggunaan fungsi zerocross pada citra
bangunan2.png:
>> Img = imread('C:\Image\bangunan2.png');
>> G = zerocross(Img,7,1); imshow(G)
>>

Hasilnya ditunjukkan pada Gambar 10.33.

Segmentasi Citra

449

Gambar 10.33 Operator Marr-Hilldreth pada bangunan2.png


Catatan
Apabila dikehendaki untuk menggunakan yang besar, ukuran
cadar juga perlu diperbesar. Sebagai pedoman kasar, ukuran cadar
yang diperlukan sebesar round(6 ) + 1 .

450

Pengolahan Citra : Teori dan Aplikasi

10.3.11 Operator Gradien Kompas


Operator gradien kompas adalah jenis operator yang mencari tepi dengan
menggunakan delapan arah mata angin. Prosesnya adalah melakukan konvolusi
terhadap citra dengan menggunakan 8 cadar. Hasil operasinya berupa nilai
maksimum dari kedelapan konvolusi. Empat contoh operator beserta delapan
cadar masing-masing dapat dilihat pada Gambar 10.34 (Crane, 1997).

Gambar 10.34 Operator gradien kompas


Fungsi kompas berikut berguna untuk melakukan pengujian operator
gradien kompas terhadap citra berskala keabuan dengan menggunakan cadar
yang tertera pada Gambar 10.35.

Segmentasi Citra

451

Program : kompas.m

function [G] = kompas(F, jenis)


% KOMPAS Melakukan operasi dengan operator kompas
%
Argumen F berupa citra berskala keabuan dan
%
jenis berupa tipe operator
%
1 = Prewitt
%
2 = Kirsch
%
3 = Robinson 3-level
%
4 = Robinson 4-level
%
%
Hasil: citra G
if nargin < 2
jenis = 1;
end
% Operator
Prewitt1 =
Prewitt2 =
Prewitt3 =
Prewitt4 =
Prewitt5 =
Prewitt6 =
Prewitt7 =
Prewitt8 =
Kirsch1
Kirsch2
Kirsch3
Kirsch4
Kirsch5
Kirsch6
Kirsch7
Kirsch8

=
=
=
=
=
=
=
=

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

=
=
=
=
=
=
=
=

[1 0 -1;1 0 -1;1 0 -1];


[0 -1 -1;1 0 -1;1 1 0];
[-1 -1 -1;0 0 0;1 1 0];
[1 1 -1;1 -2 -1;1 1 -1];
[-1 0 1;-1 0 1;-1 0 1];
[0 1 1;-1 0 1;-1 -1 0];
[1 1 1;0 0 0;-1 -1 -1];
[1 1 0;1 0 -1;0 -1 -1];

Robinson5_1
Robinson5_2
Robinson5_3
Robinson5_4
Robinson5_5
Robinson5_6
Robinson5_7
Robinson5_8

=
=
=
=
=
=
=
=

[1 0 -1;2 0 -2;1 0 -1];


[0 -1 -2;1 0 -1;2 1 0];
[-1 -2 -1;0 0 0;1 2 -1];
[-2 -1 0;-1 0 1;0 1 2];
[-1 0 1;-2 0 2;-1 0 1];
[0 1 2;-1 0 1;-2 -1 0];
[1 2 1;0 0 0;-1 -2 -1];
[2 1 0;1 0 -1;0 -1 -2];

452

Pengolahan Citra : Teori dan Aplikasi

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;

% Tentukan operator yang dipakai


if jenis == 1
Opr = Prewitt;
elseif jenis == 2
Opr = Kirsch;
elseif jenis == 3
Opr = Robinson3;
elseif jenis == 4
Opr = Robinson5;
else
error('Operator kedua: 1 s/d 4');
end
% Lakukan proses konvolusi
F = double(F);
[m, n] = size(F);
for y=2 : m-1
for x=2 : n-1
% Pelaksanaan konvolusi
for i=1 : 8
Grad(i) = Opr(1,1,i) * F(y+1, x+1) + ...
Opr(1,2,i) * F(y+1, x) + ...

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)

*
*
*
*
*
*
*

F(y+1, x-1) + ...


F(y, x+1) + ...
F(y, x) + ...
F(y, x-1) + ...
F(y-1, x+1) + ...
F(y-1, x) + ...
F(y-1, x-1);

end

end

maks = max(Grad);
G(y-1, x-1) = maks;

end
G = uint8(G);

Akhir Program

Contoh penggunaan fungsi kompas:


>> Img = rgb2gray(imread('C:\Image\mainan.png'));
>> G = kompas(Img, 1);
>> imshow(G)
>>

Angka 1 pada pemanggilan fungsi kompas menyatakan bahwa operator yang


dipakai adalah Prewitt. Angka yang dapat digunakan pada argumen kedua berupa
1, 2 ,3, atau 4, dengan ketentuan sebagai berikut:
1 = Prewitt
2 = Kirsch
3 = Robinson 3-level
4 = Robinson 4-level
Gambar 10.35 memperlihatkan contoh hasil deteksi tepi dengan keempat operator
tersebut.

454

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.35 Hasil deteksi tepi dengan operator gradien kompas


10.4 Peng-ambangan Dwi-Aras
Segmentasi yang paling sederhana dilaksanakan dengan menggunakan
ambang intensitas. Nilai yang lebih kecil daripada nilai ambang diperlakukan
sebagai area pertama dan yang lebih besar daripada atau sama dengan nilai
ambang dikelompokkan sebagai area yang kedua. Dalam hal ini, salah satu area
tersebut berkedudukan sebagai latarbelakang. Cara seperti itulah yang disebut
peng-ambangan dwi-aras (bi-level thresholding) atau terkadang dinamakan pengambangan intensitas. Secara matematis, hal itu dinyatakan dengan

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

1) tidak memperlihatkan hubungan spasial antarpiksel;


2) sensitif terhadap pencahayaan yang tidak seragam;
3) hanya berlaku untuk keadaan yang ideal (misalnya, latarbelakang
hitam dan objek berwarna putih).

Gambar 10.36 Citra daun dan histogramnya


Salah satu cara untuk menentukan nilai ambang adalah dengan memperhatikan
histogram citra. Sebagai contoh, perhatikan Gambar 10.36. Berdasarkan
histogram, pemisahan dapat dilakukan dengan memilih nilai ambang pada bagian
lembah. Sebagai contoh, nilai di sekitar 100 dapat digunakan sebagai nilai
ambang. Untuk mengujinya, mula-mula siapkan skrip berikut.
Program : ambang.m

function [G] = ambang(F, t)


% AMBANG Menentukan nilai ambang yang digunakan
%
untuk melakukan pengambangan
%
F = Citra berskala keabuan
%
t = nilai ambang
%
% Keluaran: G = Citra biner
[m, n] = size(F);
for i=1 : m
for j=1:n
if F(i,j) <= t

456

Pengolahan Citra : Teori dan Aplikasi

G(i,j) = 0;
else

G(i,j) = 1;

end

end

end

Akhir Program

Contoh peng-ambangan dengan nilai ambang sebesar 100:


>> Img = imread('C:\Image\ipomoea.png');
>> G = ambang(Img, 100);
>> imshow(1-G)
>>
Penggunaan 1-G dalam imshow ditujukan untuk membalik nilai 1 dan 0. Dengan
ungkapan tersebut, bagian daun akan diberi nilai 1 (putih). Contoh hasilnya dapat
dilihat pada Gambar 10.37.

Gambar 10.37 Hasil pembalikan latarbelakang dan objek


Persoalan utama dalam peng-ambangan intensitas terletak pada penentuan
nilai ambang (T) secara otomatis. Salah satu cara yang dilakukan adalah dengan
menentukan nilai ambang iteratif secara interaktif (Gonzalez & Woods, 2002;

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.

Algoritma peng-ambangan iteratif dituangkan dalam bentuk program seperti


berikut.
Program : titeratif.m

function [t1] = titeratif(F)


% TITERATIF Menentukan nilai ambang yang digunakan
%
untuk melakukan pengambangan
%
F = Citra berskala keabuan
%

458

Pengolahan Citra : Teori dan Aplikasi

Keluaran: G = Citra biner

[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

Pengujian fungsi titeratif dapat dilihat di bawah ini.


>> Img = imread('C:\Image\ipomoea.png');
>> t = titeratif(Img)
t = 130
>> G = ambang(Img, t);
>> imshow(1-G)

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.

Gambar 10.38 Contoh hasil peng-ambangan secara iteratif


10.5 Peng-ambangan Global Vs. Lokal
Terkait dengan nilai ambang yang digunakan pada segmentasi citra,
terdapat istilah peng-ambangan global dan peng-ambangan lokal. Pengertiannya
sebagai berikut.
Apabila nilai ambang t bergantung hanya pada satu nilai aras keabuan f(y,
x), peng-ambangan disebut sebagai global. Dalam hal ini, semua piksel
dalam citra akan ditentukan oleh satu nilai ambang t.
Peng-ambangan disebut lokal kalau nilai ambang t bergantung pada f(y, x)
dan g(y, x) dengan g(y,x) menyatakan properti citra lokal pada titik (y, x).
Dalam hal ini, properti citra lokal dapat diperoleh melalui statisti
(misalnya rerata tetangga di sekitar titik (y, x) ). Dengan kata lain, nilai
ambang untuk setiap piksel ditentukan oleh nilai piksel tetangga. Dengan
demikian, nilai ambang untuk piksel masing-masing belum tentu sama.

460

Pengolahan Citra : Teori dan Aplikasi

10.6 Peng-ambangan Aras-jamak


Pada peng-ambangan beraras-jamak (multilevel thresholding), citra dibagi
menjadi beberapa bagian dengan menggunakan beberapa nilai ambang, Cara
seperti itu dilakukan kalau pada histogram terdapat puncak-puncak yang
membedakan antara satu objek terhadap yang lain. Sebagai contoh, perhatikan
Gambar 10.39(a) dan kemudian lihatlah pada histogram yang terdapat pada
Gambar 10.39(b).

Gambar 10.39 Contoh citra dengan beberapa puncak dan


lembah yang terpisah
Contoh berikut menunjukkan algoritma yang digunakan pada peng-ambangan
aras-jamak yang menggunakan dua buah nilai ambang.
ALGORITMA 10.3 Segmentasi dengan peng-ambangan arasjamak
Masukan:
f (MxN): Citra berskala keabuan (berukuran MxN)
Keluaran:
g (M, N): Citra biner
ambang_aras_jamak(ukuran, ):
FOR y 1 TO ukuran -1
FOR x 1 TO ukuran -1
nx x cx
ny y cy

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

Implementasi berdasarkan algoritma di atas dapat dilihat di bawah ini.


Program : arasjamak.m

function [G] = arasjamak(F, t1, t2)


% Pengambanan dengan dua nilai ambang
%
F = Citra berskala keabuan
%
t1 = nilai ambang bawah
%
t2 = nilai ambang atas
%
% Keluaran: G = Citra biner
[m, n] = size(F);
for i=1 : m
for j=1:n
if F(i,j) <= t1 || F(i,j) >= t2
G(i,j) = 0;
else
G(i,j) = 1;
end
end
end

Akhir Program

Contoh penggunaan fungsi arasjamak:


>> Img = imread('C:\Image\benda.png');
>> G = arasjamak(Img, 50, 100); imshow(G);
>>

462

Pengolahan Citra : Teori dan Aplikasi

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).

Gambar 10.40 Hasil penerapan nilai ambang jamak


Contoh lain dapat dilihat di bawah ini:
>> Img = imread('C:\Image\ipomoea.png');
>> G = arasjamak(Img, 50, 100); imshow(G);
>>

Segmentasi Citra

463

Hasilnya dapat dilihat pada Gambar 10.41(b). Terlihat bahwa dengan cara seperti
itu, bayangan daun dapat dihilangkan.

Gambar 10.41 Contoh peng-ambangan aras jamak pada ipomoea.png


10.7 Peng-ambangan dengan Metode Otsu
Metode Otsu dipublikasikan oleh Nobuyuki Otsu pada tahun 1979. Metode
ini menentukan nilai ambang dengan cara membedakan dua kelompok, yaitu
objek dan latarbelakang, yang memiliki bagian yang saling bertumpukan,
berdasarkan histogram (lihat Gambar 10.42).

Gambar 10.42 Penentuan nilai ambang


untuk memperoleh hasil yang optimal
Prinsip metode Otsu dijelaskan berikut ini. Pertama-tama, probabilitas nilai
intensitas i dalam histogram dihitung melalui

464

Pengolahan Citra : Teori dan Aplikasi

p (i )=

256
ni
, p ( i ) 0, p ( i )=1
N
1

(10.14)

dengan ni menyatakan jumlah piksel berintensitas i dan N menyatakan jumlah


semua piksel dalam citra. Jika histogram dibagi menjadi dua kelas (objek dan
latarbelakang), pembobotan pada kedua kelas dinyatakan sebagai berikut:
t

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

Varians kedua kelas dinyatakan dengan rumus:


t

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)

Varians total dapat dinyatakan dengan


2 ( t ) = W 2 ( t )+ B2 ( t )

(10.21)

Segmentasi Citra

Dalam hal ini,


B2

465

W 2 dinamakan sebagai within-class variance (WCV) dan

disebut sebagai between-class variance (BCV). WCV dapat dinyatakan

dengan
2

W (t )=W 1 ( t ) . 1 (t) +W 2 ( t ) . 2 (t)

(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)

Dalam hal ini, mT adalah rerata total ( m T = i . p (i) ).


i=1

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

function [ambang] = otsu(F)


% OTSU Memperoleh nilai ambang menggunakan metode Otsu
%
F = Citra berskala keabuan
[m, n] = size(F);
jum_piksel = m * n;
% Kosongkan histogram
for i=1 : 256
h(i) = 0;
end
% Hitung histogram

466

Pengolahan Citra : Teori dan Aplikasi

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.

10.8 Peng-ambangan Adaptif


Peng-ambangan adaptif (adaptive thresholding) merupakan peng-ambangan
yang menggunakan nilai ambang lokal, yang dihitung secara adaptif berdasarkan
statistika piksel-piksel tetangga. Hal ini didasarkan kenyataan bahwa bagianbagian kecil dalam citra mempunyai iluminasi yang sama, sehingga lebih tepat
kalau nilai ambang dihitung berdasarkan bagian-bagian kecil dalam citra dan
bukan berdasarkan seluruh piksel dalam citra.
Ada tiga pendekatan yang biasa digunakan untuk mewujudkan pengambangan ini. Pendekatan pertama menggunakan statistika rerata terhadap
intensitas lokal. Terkadang, nilai yang konstan ikut dilibatkan. Rumusnya sebagai
berikut.

468

Pengolahan Citra : Teori dan Aplikasi

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

function [G] = adapmean(F, w, c)


% ADAPMEAN Melakukan pengambangan adaptif dengan menggunakan
%
mean.
%
F = Citra berskala keabuan
%
w = ukura jendela
%
c = nilai konstan
%
% Hasil: citra G
if nargin == 0
disp('Penggunaan adapmean(Citra, ukuran, konstanta');
return;
end
if nargin == 1
w = 2;
c = 0;
end
if nargin == 2
c = 0;
end
% Lakukan pemrosesan citra
[m, n] = size(F);
delta = floor(w/2);
if c < 0
G = zeros(m, n);
else
G = ones(m, n);
end

% 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

Contoh penggunaan fungsi adapmeaan:


>> Img = imread('C:\Image\ipomoea.png');
>> G = adapmean(Img, 3, -4); imshow(G)
>>
Berbagai contoh pengaturan argumen kedua (w) dan argumen ketiga (c)
ditunjukkan pada Gambar 10.43.

470

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.43 Efek peng-ambangan adaptif dengan


menggunakan nilai mean dengan berbagai ukuran jendela w dan
nilai ambang c
Pendekatan peng-ambangan adaptif yang kedua menggunakan statistika
median. Secara matematis, pendekatan ini dapat ditulis menjadi
T =median ( f ( y , x ) ,( y , x)W )C

(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

function [G] = adapmedian(F, w, c)


% ADAPMEDIAN Melakukan pengambangan adaptif dengan menggunakan
%
median.
%
F = Citra berskala keabuan
%
w = ukura jendela
%
c = nilai konstan
%
% Hasil: citra G
if nargin == 0
disp('Penggunaan adapmean(Citra, ukuran, konstanta');
return;
end
if nargin == 1
w = 2;
c = 0;
end
if nargin == 2
c = 0;
end
% Lakukan pemrosesan citra
[m, n] = size(F);
delta = floor(w/2);
if c < 0
G = zeros(m, n);
else
G = ones(m, n);
end
Nilai = [];

% Diasumsikan berlatarbelakang 0
% Diasumsikan berlatarbelakang 1

% Kosongkan array untuk median

for y=1+delta : m-delta


for x=1+delta : n-delta
rerata = 0.0;
jum = w * w;
pencacah = 0;
for p=1 : w

472

Pengolahan Citra : Teori dan Aplikasi

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

if F(y,x) >= median


G(y, x) = 1;
else
G(y, x) = 0;
end

end

Akhir Program

Contoh penggunaan fungsi adapmedian:


>> Img = imread('C:\Image\ipomoea.png');
>> G = adapmedian(Img, 10, 5); imshow(G)
>>
Efek berbagai pengaturan terhadap w dan c dapat dilihat pada Gambar 10.44.

Segmentasi Citra

473

Gambar 10.44 Efek peng-ambangan adaptif dengan


menggunakan nilai median dengan berbagai ukuran jendela dan
konstanta yang berbeda
Pendekatan peng-ambangan adaptif yang ketiga menggunakan statistika
maksimum dan minimum, yang dinyatakan dengan rumus

474

Pengolahan Citra : Teori dan Aplikasi

T=

max ( f ( y , x ) ,( y , x)W ) + min ( f ( y , x ) ,( y , x ) W )


2
(10.26)

Dalam hal ini, W menyatakan jendela pada citra, NW menyatakan jumlah piksel
dalam jendela. Implementasinya sebagai berikut.
Program : adapmaxmin.m

function [G] = adapmaxmin(F, w, c)


% ADAPMAXMIN Melakukan pengambangan adaptif dengan menggunakan
%
maximum dan minumum.
%
F = Citra berskala keabuan
%
w = ukura jendela
%
c = nilai konstan
%
% Hasil: citra G
if nargin == 0
disp('Penggunaan adapmean(Citra, ukuran, konstanta');
return;
end
if nargin == 1
w = 2;
c = 0;
end
if nargin == 2
c = 0;
end
% Lakukan pemrosesan citra
[m, n] = size(F);
delta = floor(w/2);
if c < 0
G = zeros(m, n);
else
G = ones(m, n);
end

% Diasumsikan berlatarbelakang 0
% Diasumsikan berlatarbelakang 1

for y=1+delta : m-delta


for x=1+delta : n-delta
rerata = 0.0;
terbesar = 0.0;

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

if nilai < terkecil


terkecil = nilai;
end

end

end

rerata = floor((terbesar - terkecil) / 2) - c;


if F(y,x) >= rerata
G(y, x) = 1;
else
G(y, x) = 0;
end

end

Akhir Program

Contoh penggunaan fungsi adapmaxmin:


>> Img = imread('C:\Image\ipomoea.png');
>> G = adapmaxmin(Img, 10, -30); imshow(G)
>>
Gambar 10.45 memperlihatkan berbagai efek nilai w (ukuran jendela) dan c
(konstanta pengurang).

476

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.45 Efek peng-ambangan adaptif dengan


menggunakan nilai maksimum dan minimum dengan berbagai ukuran
jendela dan konstanta yang berbeda
Penggunaan peng-ambangan adaptif pada citra berisi teks dapat dilihat di
bawah ini.
>> Img = imread('C:\Image\maryamah.png');
>> G = adapmean(Img, 13, 15); imshow(G);

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.

Gambar 10.46 Contoh penerapan peng-ambangan adaptif


menggunakan rerata pada citra teks
dengan latar belakang tidak merata

478

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.47 Hasil peng-ambangan aras-jamak


terhadap citra maryamah.png
10.9 Peng-ambangan Berdasarkan Entropi
Entropi adalah istilah yang diperkenalkan oleh Shannon, yang menyatakan
sebuah ukuran informasi yang terkandung di dalam citra. Entropi telah digunakan
dalam peng-ambangan untuk memperoleh nilai ambang yang optimal. Kapur,
Sahoo, dan Wang memperkenalkan penggunaan entropi dalam peng-ambangan di
tahun 1985 (Acharya dan Ray, 2005). Namun, sesungguhnya Kapur dkk.
mengemukan metode yang diusulkan tersebut sebagai koreksi terhadap artikel
yang ditulis oleh peneliti bernama Pun, yang dipublikasikan pada tahun 1980
(Demirkaya, 2009).
Metode peng-ambangan berbasis entropi yang dikemukakan oleh Kapur dkk.
dapat dijelaskan sebagai berikut. Misalkan, f 1, f2, , fn adalah frekuensi pada citra
beraras keabuan. Maka,
f i L1
p (i )= , f i=1 i=0,1,2, , L1
N i=0

(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)

dan entropi objek adalah:


L1

H o ( t )=

i=t +1

p ( i)
p ( i)
. ln
Po(t )
Po(t )

(10.29)

Dalam hal ini,


t

L1

i=0

i=t +1

Pb ( t ) = p ( i ) , P o ( t )= p (i )

(10.30)

Jumlah Hb dan Ho dinyatakan dengan (t). Jadi,


t

( 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)

Optimalisasi dilakukan dengan memaksimalkan fungsi (t).


Implementasi peng-ambangan berbasis entropi Kapur dapat dilihat berikut
ini.
Program : kapur.m

function [ambang] = tentropi(F)


% TENTROPI Memperoleh nilai ambang menggunakan
%
metode entropi Kapur
%
berdasarkan rumus pada Acharya dan Ray (2005)
%
F = Citra berskala keabuan
F = double(F);
[m, n] = size(F);
jum_piksel = m * n;
% Kosongkan histogram

480

Pengolahan Citra : Teori dan Aplikasi

for i=1 : 256


h(i) = 0.0;
end
% Hitung histogram
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 t optimal
ambang = 0;
varMaks = 0;
for t=0 : 255
% Hitung Pb(t)
pbt = 0.0;
for i=0 : t
pbt = pbt + p(i+1);
end
% Hitung Po(t)
pot = 0;
for i=t+1 : 255
pot = pot + p(i+1);
end
% Hitung Hb(t)
hbt = 0;
for i = 0 : t
if p(i+1) ~= 0
hbt = hbt + p(i+1) / pbt * log(p(i+1) / pbt);
end
end
hbt = -hbt;
% Hitung Hb(t)
hot = 0;
for i = t+1 : 255
if p(i+1) ~= 0
hot = hot + p(i+1) / pot * log(p(i+1) / pot);
end
end
hot = -hot;
% Hitung w(t)
wt = hot + hbt;
if wt > varMaks

Segmentasi Citra

end

481

varMaks = wt;
ambang = t;

end

Akhir Program

Contoh penggunaan fungsi kapur:


>> Img = imread('C:\Image\ipomoea.png');
>> t = kapur(Img); G = ambang(Img, t); imshow(G)
>>

Gambar 10.48(c) menunjukkan hasil perintah di atas. Pada gambar tersebut,


terlihat perbedaan empat citra setelah mengalami peng-ambangan dengan Otsu
dan Kapur.

482

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.48 Perbandingan peng-ambangan dengan Otsu dan Kapur


Peng-ambangan berbasis entropi yang lain dikemukakan oleh Renyi
(Acharya dan Ray, 2005). Rumus yang digunakan seperti berikut:
H b ( t )=

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

function [ambang] = renyi(F, rho)


% RENYI Memperoleh nilai ambang menggunakan metode entropi Renyi
%
berdasarkan rumus pada Acharya dan Ray (2005)
%
F = Citra berskala keabuan
F = double(F);
[m, n] = size(F);
jum_piksel = m * n;
% Kosongkan histogram
for i=1 : 256
h(i) = 0.0;
end
% Hitung histogram
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 t optimal
ambang = 0;
varMaks = 0;
for t=0 : 255
% Hitung Pb(t)
pbt = 0.0;
for i=0 : t
pbt = pbt + p(i+1);
end

484

Pengolahan Citra : Teori dan Aplikasi

% 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

Contoh penggunaan fungsi renyi:


>> Img = imread('C:\Image\ipomoea.png');
>> t = renyi(Img, 0.05); G = ambang(Img, t);
>> imshow(G)
>>
Contoh hasil penerapan berbagai parameter ditunjukkan pada Gambar 10.49.

Segmentasi Citra

485

Gambar 10.49 Peng-ambangan dengan entropi Renyi


10.10 Segmentasi Warna
Segmentasi warna dapat dilakukan pada ruang warna HLS. Kemudian,
dengan berpedoman pada susunan warna sesuai dengan Gambar 9.12, dilakukan
pengubahan warna Hue yang berdekatan dengan warna yang menjadi pusat dalam
fungsi keanggotaan fuzzy. Sebagai contoh, warna hijau dengan H = 80 akan
diubah menjadi 85 dan warna kuning dengan H = 40 diubah menjadi 45. Adapun
nilai pada komponen L dan S disederhanakan menjadi tiga nilai, yaitu 0, 128, dan
255. Warna yang mungkin timbul ada dua belas buah, yaitu merah, jingga, kuning,
hijau, cyan, biru, ungu, magenta, merah muda, hitam, putih, dan abu-abu.
Selanjutnya, warna HLS diubah kembali ke RGB. Implementasinya seperti
berikut.

486

Pengolahan Citra : Teori dan Aplikasi

Program : segwarna.m

function [RGB] = segwarna(nama_file)


% SEGWARNA Digunakan untuk melakukan segmentasi citra
%
berdasarkan warna
%
F = citra berwarna
%
Keluaran:
%
G = citra berwarna yang telah disegmentasi
Img = imread(nama_file);
[tinggi, lebar, dim] = size(Img);
if dim < 3
error('Masukan harus berupa citra berwarna');
end
% Konversi ke HVS
[H,S,L] = RGBkeHSL(Img(:,:,1),Img(:,:,2),Img(:,:,3));
for y=1: tinggi
for x=1: lebar
h = H(y,x);
% Ubah warna
if h < 11
h = 0;
elseif h < 32
h = 21;
elseif h < 54
h = 43;
elseif h < 116
h = 85;
elseif h < 141
h = 128;
elseif h < 185
h = 170;
elseif h < 202
h = 191;
elseif h < 223
h = 213;
elseif h < 244
h = 234;
else
h = 0;
end
% Ubah komponen H
H(y,x) = h;
% Ubah komponen S
if S(y,x) >= 200
S(y,x) = 255;
elseif S(y,x) <= 20
S(y,x) = 0;

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

[R, G, B] = HSLkeRGB(H, S, L);


RGB(:,:,1) = R;
RGB(:,:,2) = G;
RGB(:,:,3) = B;
return

Akhir Program

Contoh penggunaan fungsi segwarna:


>> G = segwarna('C:\Image\bangunan.png'); imshow(G)
>>

Hasilnya dapat dilihat pada Gambar 10.50. Dua contoh lain hasil pemrosesan
dengan segwarna dapat dilihat pada Gambar 10.51.

488

Pengolahan Citra : Teori dan Aplikasi

Gambar 10.50 Hasil segmentasi warna terhadap citra bangunan.png

Segmentasi Citra

489

Gambar 10.51 Contoh lain hasil segmentasi warna dengan segwarna


Contoh aplikasi segmentasi warna dengan menggunakan segwarna dapat
dilihat pada skrip segdaun.m. Suatu daun dipotret dengan latarbelakang putih

490

Pengolahan Citra : Teori dan Aplikasi

(Gambar 10.52(a)). Hasilnya, latarbelakang tidak putih diakibatkan pencahayaan


yang tidak baik. Selanjutnya, citra disegmentasi dengan fungsi segwarna.
Hasilnya ditunjukkan pada Gambar 10.52(b). Terlihat bahwa latarbelakang ada
yang berwarna hitam, abu-abu, dan putih. Nah, selanjutnya dengan membuat
warna abu-abu dan hitam menjadi putih maka bagian daun diperoleh (Gambar
10.52(c)).
Program : segdaun.m

% SEGDAUN Contoh eksperimen untuk memisahkan daun


%
yang dipotret dengan latarbelakang putih
%
tetapi pencahayaan tidak sempurna
close all;
berkas = 'C:\Image\ficus.png';
G = imread(berkas);
figure(1); imshow(G)
G = segwarna(berkas);
figure(2); imshow(G)
H = G;
[m, n, dim] = size(H);
for i=1: m
for j=1:n
% Buang warna abu-abu
if H(i,j,1) == 128 && H(i,j,2) == 128 && H(i,j,3) == 128
H(i,j,1) = 255;
H(i,j,2) = 255;
H(i,j,3) = 255;
end
% Buang warna hitam
if H(i,j,1) == 0 && H(i,j,2) == 0 && H(i,j,3) == 0
H(i,j,1) = 255;
H(i,j,2) = 255;
H(i,j,3) = 255;
end
end

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.

Gambar 10.52 Segmentasi daun


Segmentasi juga dapat dilakukan melalui perantaraan citra biner. Contoh
ditunjukkan pada skrip segdaun2.m.
Program : segdaun2.m

% SEGDAUN2 Contoh segmentasi daun melalui citra biner


RGB = imread('C:\Image\ficus.png');
[m,n,dim] = size(RGB);
% Konversi ke citra berskala keabuan
for baris=1 : m
for kolom=1 : n
r = RGB(baris,kolom,1);
g = RGB(baris,kolom,2);
b = RGB(baris,kolom,3);
kelabu = r * 0.2989 + g * 0.5870 + b * 0.1140;

492

Pengolahan Citra : Teori dan Aplikasi

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

B(baris, kolom) = jum/9;

end
B = uint8(B);
%
t
t
C

Gunakan pengambangan otsu


= otsu(B);
= t + 13; % Koreksi ambang. Sesuaikan dengan kebutuhan
= ambang(B, t);

% Lakukan operasi morfologi opening


H = ones(3);
D = opening(C, H);
figure(2); imshow(C);
% Atur bagian tepi berwarna putih
%
sebagai kompnesasi bagian
%
yang tidak diproses sewaktu
%
melakukan pemerataan nilai
for baris=1 : m
D(baris,1) = 1;
D(baris,n) = 1;
end
for kolom=1 : n
D(1,kolom) = 1;
D(m,kolom) = 1;
end
figure(3); imshow(D);
% Kosongkan bagian latarbelakang
% untuk mendapatkan bagian daun
E = RGB;

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

Proses untuk mendapatkan daun ditunjukkan pada gambar berikut.

Gambar 10.53 Urutan segmentasi daun melalui citra biner

493

494

Pengolahan Citra : Teori dan Aplikasi

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

Pengolahan Citra : Teori dan Aplikasi

Anda mungkin juga menyukai