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
402 Pengolahan Citra : Teori dan Aplikasi

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 tersebut
memperlihatkan pemilihan area yang ditandai dengan warna khusus.

(b) Citra daun (a) Hasil segmentasi dalam


bentuk biner

Gambar 10.1 Pemisahan objek daun terhadap latarbelakang


Segmentasi Citra 403

Area ini diperoleh


melalui “Magic Wand”

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
Segmentasi Digunakan
Mobil Mobil, jalan, dan Pelacakan mobil Gerakan dan
latarbelakang warna
Struktur Foto satelit Pengklasifikasian Tekstur dan
permukaan bumi area warna
Wajah orang Kerumunan orang Pengenalan wajah Warna, bentuk,
di pasar dan tekstur
Apel Kumpulan apel Pemilahan buah apel 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
404 Pengolahan Citra : Teori dan Aplikasi

contoh, fitur objek dapat berupa perbandingan lebar dan panjang objek, warna
rata-rata objek, atau bahkan tekstur pada objek. Selanjutnya, melalui
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

Citra masukan

Segmentasi
Citra

Objek daun
Ekstraksi
Fitur

Fitur-fitur
pada daun
Pengklasifikasi

Jenis tanaman

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 45 o , cadar (c) untuk memperoleh garis tegak,
dan cadar (d) untuk mendapatkan garis yang berorientasi -45o .

−1 −1 −1 −1 −1 2 −1 2 −1 2 −1 −1
2 2 2 −1 2 −1 −1 2 −1 −1 2 −1
−1 −1 −1 2 −1 −1 −1 2 −1 −1 −1 2

(a) (b) (c) (d)

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 cadar-
cadar 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]) 
>>

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

(a) Citra jaring.png (b) Hasil deteksi garis horizontal

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)

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
𝑑𝑓 𝑓 (𝑦, 𝑥 + ∆𝑥 )𝑓(𝑦, 𝑥) f(y,x+1)f(y,x)
lim
𝑑𝑥 ∆𝑥→0 ∆𝑥
𝑑𝑓 𝑓(𝑦 + ∆𝑦, 𝑥 )𝑓(𝑦, 𝑥) f(y+1,x)f(y,x)
lim
𝑑𝑦 ∆𝑥→0 ∆𝑦
∇𝑓(𝑦, 𝑥) 𝑑𝑓 𝑑𝑓 [f(y, x+1)f(y,x),
[ , ]
𝑑𝑦 𝑑𝑥 f(y+1,x)f(y,x)]
Segmentasi Citra 411

Turunan Bentuk kontinu Bentuk diskret


𝑑2𝑓 𝑑𝑓 𝑑𝑓 f(y,x+1)- 2f(y,x)+f(y,x-1)
(𝑑𝑥 ) (𝑦, 𝑥 + ∆𝑥 ) (𝑑𝑥 ) 𝑓(𝑦, 𝑥)
𝑑𝑥 2 lim
∆𝑥→0 ∆𝑥
𝑑2𝑓 𝑑𝑓 ( 𝑑𝑓
( ) 𝑦 + ∆𝑦, 𝑥 ) ( ) 𝑓 (𝑦, 𝑥 ) f(y+1,x) -2f(y,x)+f(y-1,x)
𝑑𝑦 𝑑𝑦
𝑑𝑦 2 lim
∆𝑥→0 ∆𝑦
∇ 2 𝑓(𝑦, 𝑥 ) 𝑑 𝑓 𝑑2𝑓
2
f(y,x+1)+f(y,x-1) -
+ 4f(y,x)+f(y+1,x)+f(y-1,x)
𝑑𝑥 2 𝑑𝑦 2

𝑓(𝑥) (a) Fungsi citra

Nilai maksimum

Batas
(b) Deteksi tepi
𝑑
𝑓(𝑥) derivatif orde pertama
𝑑𝑥

a b

Persilangan nol
(zero-crossing)
𝑑2
𝑓(𝑥) (c) Deteksi tepi
𝑑𝑥 2 derivatif orde kedua

Gambar 10.7 Deteksi tepi orde pertama dan orde kedua pada arah x
412 Pengolahan Citra : Teori dan Aplikasi

Apabila profil citra mempunyai tepi dengan bentuk tanjakan


(ramp), fungsi dan turunannya ditunjukkan berikut ini.

Profil aras
keabuan

Turunan
pertama

Turunan
kedua

Profil citra dapat berupa tepi dengan bentuk atap, garis, undakan,
atau tanjakan.

Tepi
tanjakan

Tepi garis

Tepi
undakan

Tepi atap

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

Untuk memahami profil citra yang berhubungan dengan tepi,


perhatikan matriks yang berukuran 4 x 6 berikut.

168 168 168 0 0 0


[ 168 168 168 0 0 0]
168 168 168 0 0 0
168 168 168 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

𝑑𝑓
𝐺
𝒗𝒇 = [𝐺𝑥 ] = [𝑑𝑥
𝑑𝑓 ] (10.1)
𝑦
𝑑𝑦
414 Pengolahan Citra : Teori dan Aplikasi

Besaran vektor dihitung menggunakan rumus

1/2 𝑑𝑓 𝑑𝑓 1/2
∇𝑓 = 𝑚𝑎𝑔(∇f) = [𝐺𝑥 2 + 𝐺𝑦 2 ] = [(𝑑𝑥 )2 + (𝑑𝑦 )2 ] (10.2)

Namun, untuk alasan penyederhanaan komputasi, operasi akar ditiadakan


sehingga besaran vektor tersebut dihampiri melalui

∇𝑓 ≈ 𝐺𝑥 2 + 𝐺𝑦 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 𝑓(𝑦,𝑥) 𝑑2 𝑓(𝑦,𝑥)
∇2 𝑓(𝑦, 𝑥 ) = + (10.4)
𝑑𝑥 2 𝑑𝑦2

 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.
Segmentasi Citra 415

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

x x+1

y z1 z2 1 0 0 -1

y+1 z3 z4 0 -1 1 0

(a) Posisi pada citra f (b) Gx (c) Gy

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

𝑟(𝑦, 𝑥 ) = √(𝑧1 − 𝑧4 )2 + (𝑧3 − 𝑧2 )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
416 Pengolahan Citra : Teori dan Aplikasi

[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

(a) Citra mainan.png

(b) Hasil deteksi tepi dengan operator Roberts

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

𝑟(𝑦, 𝑥 ) = 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 + (10.6)
(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))
418 Pengolahan Citra : Teori dan Aplikasi

x-1 x x+1

y-1 z1 z2 z3 1 0 -1 -1 -1 -1

y z4 z5 z6 1 0 -1 0 0 0

y+1 z7 z8 z9 1 0 -1 1 1 1

(a) Posisi pada citra f (b) Gx (c) Gy

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

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

x-1 x x+1

y-1 z1 z2 z3 -1 0 1 1 2 1

y z4 z5 z6 -2 0 2 0 0 0

y+1 z7 z8 z9 -1 0 1 -1 -2 -1

(a) Posisi pada citra f (b) Gx (c) Gy

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.
x-1 x x+1

y-1 z1 z2 z3 -1 0 1 1 √2 1

y z4 z5 z6 -√2 0 √2 0 0 0

y+1 z7 z8 z9 -1 0 1 -1 -√2 -1

(a) Posisi pada citra f (b) Gx (c) Gy

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

(a) Operator Roberts (b) Operator Prewitt

(c) Operator Sobel (d) Operator Frei-Chen

Gambar 10.16 Perbedaan hasil deteksi tepi dengan


menggunakan keempat macam operator

(a) Hasil deteksi tepi dengan (b) Hasil setelah peng-ambangan


(a) Hasil deteksi
operator tepi dengan
Roberts dengan nilai ambang 20
operator Roberts

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

x-1 x x+1

y-1 z1 z2 z3 0 -1 0 -1 -1 -1

y z4 z5 z6 -1 4 -1 -1 8 -1

y+1 z7 z8 z9 0 -1 0 -1 -1 -1

(a) Posisi pada citra f (b) #1 (c) #2

Gambar 10.18 Operator Laplacian

Berdasarkan cadar #1 pada Gambar 10.18(b), nilai operator Laplacian


pada (y, x) didefinisikan sebagai

𝑙 (𝑦, 𝑥 ) = 4 𝑓(𝑦, 𝑥 ) − [𝑓(𝑦 − 1, 𝑥 ) + 𝑓(𝑦, 𝑥 − 1) +


𝑓(𝑦, 𝑥 + 1) + 𝑓(𝑦 + 1, 𝑥)] (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) + ...
F(y-1,x-1)+ F(y-1,x+1)+F(y+1,x-1)+F(y+1,x+1));
Segmentasi Citra 427

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

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
428 Pengolahan Citra : Teori dan Aplikasi

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
−(𝑥 2+𝑦2 )
1 𝑥 2 +𝑦2
𝐿𝑜𝐺(𝑦, 𝑥 ) = − 𝜋𝜎4 [1 − ]𝑒 2𝜎2 (10.8)
2𝜎2

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

Dalam praktik, terdapat berbagai variasi rumus yang digunakan


dalam LoG. Gonzalez dan Woods (2002) menggunakan rumus
seperti berikut:
2 2)
𝑥 2 + 𝑦 2 − 𝜎 2 −(𝑥 +𝑦
( )
𝐿𝑜𝐺 𝑦, 𝑥 = − [ ] 𝑒 2𝜎2
𝜎4
Nixon dan Aguido (2002) menggunakan rumus:

2 2)
1 𝑥 2 + 𝑦2 −(𝑥 +𝑦
𝐿𝑜𝐺(𝑦, 𝑥 ) = 2 [ − 2] 𝑒 2𝜎2
𝜎 𝜎2

Adapun Crane (1997) menggunakan rumus:

2 2)
1 𝑥 2 + 𝑦 2 −(𝑥 +𝑦
𝐿𝑜𝐺(𝑦, 𝑥 ) = [1 − ] 𝑒 2𝜎2
𝜋𝜎 4 2𝜎 2
Segmentasi Citra 429

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

0 0 -1 0 0

0 -1 -2 -1 0

-1 -2 16 -2 -1

0 -1 -2 -1 0

0 0 -1 0 0

Gambar 10.21 Contoh operator LoG

Contoh penggunaan LoG:

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


>> H = [ 0 0 -1 0 0
0 -1 -2 -1 0
-1 -2 16 -2 -1
0 -1 -2 -1 0
0 0 -1 0 0]; 
>> 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
ny  y – cy
Segmentasi Citra 431

−(𝑛𝑥 2 + 𝑛𝑦2 )
1 𝑛𝑥 2 + 𝑛𝑦2
nilai  𝜎2 [ − 2] 𝑒 2𝜎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

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

% Lakukan normalisasi
for y=1 : ukuran
432 Pengolahan Citra : Teori dan Aplikasi

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
-1.5146 -5.2717 11.8132 38.9532 11.8132 -5.2717 -1.5146
Segmentasi Citra 433

-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 +𝑦2 ) −(𝑥 2 +𝑦2 )


2 2
𝑒 2𝜎1 𝑒 2𝜎2
𝐷𝑜𝐺 (𝑦. 𝑥 ) = 2𝜎1 2
− 2𝜎2 2
(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

0 0 -1 -1 -1 0 0
0 -2 -3 -3 -3 -2 0
-1 -3 5 5 5 -3 -1
-1 -3 5 16 5 -3 -1
-1 -3 5 5 5 -3 -1
0 -2 -3 -3 -3 -2 0
0 0 -1 -1 -1 0 0

(a) Cadar berukuran 7 x 7

0 0 0 -1 -1 -1 0 0 0
0 -2 -3 -3 -3 -3 -3 -2 0
0 -3 -2 -1 -1 -1 -2 -3 0
-1 -3 -1 9 9 9 -1 -3 -1
-1 -3 -1 9 9 9 -1 -3 -1
-1 -3 -1 9 9 9 -1 -3 -1
0 -3 -2 -1 -1 -1 -2 -3 0
0 -2 -3 -3 -3 -3 -3 -2 0
0 0 0 -1 -1 -1 0 0 0

(b) Cadar berukuran 9 x 9

Gambar 10.23 Contoh cadar DoG

Contoh penggunaan DoG:

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


>> H = [ 0 0 -1 -1 -1 0 0
0 -2 -3 -3 -3 -2 0
-1 -3 5 5 5 -3 -1
-1 -3 5 16 5 -3 -1
-1 -3 5 5 5 -3 -1
0 -2 -3 -3 -3 -2 0
0 0 -1 -1 -1 0 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

2 4 5 4 2

4 9 12 9 4

1 / 115 5 12 15 12 5

4 9 12 9 4

2 4 5 4 2

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  Gy (10.10)

Langkah 3:
Langkah ketiga berupa penghitungan arah tepi. Rumus yang digunakan
untuk keperluan ini:

theta = tan-1 (Gy, Gx) (10.11)

Langkah 4:
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 0 o , 45o , 90o , dan 135o .
Segmentasi Citra 437

X X X X X
X X X X X
X X a X X
X X X X X
X X X X X
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) 
45 yi  f j wij xj 
(H)

arah    (10.12)
90 yi  f (T) wij(TH) yj (H) 
135  j 

90o
135o 45o

Gambar 10.27 Area untuk mengonversi arah tepi ke dalam


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

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
438 Pengolahan Citra : Teori dan Aplikasi

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

Arah tepi 0o: Arah tepi 45o: i-1, j+1


i, j-1 i, j i, j+1

i, j

i+1, j-1
if (Grad(i,j) <= Grad(i,j+1)) || ...
(Grad(i,j)<= Grad(i,j-1))
Non_max(i,j) = 0; if (Grad(i,j) <= Grad(i-1,j+1)) || ...
end (Grad(i,j) <= Grad(i+1,j-1))
Non_max(i,j) = 0;
end

Arah tepi 90o: i-1, j Arah tepi 135o: i-1, j-1

i, j i, j

i, j+1 i, j+1

if (Grad(i,j) <= Grad(i+1,j) ) || ... if (Grad(i,j) <= Grad(i+1,j+1)) || ...


(Grad(i,j) <= Grad(i-1,j)) (Grad(i,j) <= Grad(i-1,j-1))
Non_max(i,j) = 0; Non_max(i,j) = 0;
end end

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 T2 diubah menjadi putih
(nilai 255). Lalu, bagaimana nilai yang lebih dari atau sama dengan T1 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

j-1 j j+1
i-1 255 255 255 255 255 255

i 255 128 255 255 255 255

i+1 255 255 255 255 255 255

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 441

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

if G(i, j) > 255


G(i, j) = 255;
else
if G(i, j) < 0
G(i, j) = 0;
end
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))
Non_max(i,j) = 0;
end
442 Pengolahan Citra : Teori dan Aplikasi

elseif Theta(i,j) == 45
if (Grad(i,j) <= Grad(i-1,j+1)) || ...
(Grad(i,j) <= Grad(i+1,j-1))
Non_max(i,j) = 0;
end
elseif Theta(i,j) == 90
if (Grad(i,j) <= Grad(i+1,j) ) || ...
(Grad(i,j) <= Grad(i-1,j))
Non_max(i,j) = 0;
end
else
if (Grad(i,j) <= Grad(i+1,j+1)) || ...
(Grad(i,j) <= Grad(i-1,j-1))
Non_max(i,j) = 0;
end
end
end
end

% Pengambangan histeresis
ambang_bawah = ambang_bawah * max(max(Non_max));
ambang_atas = ambang_atas * max(max(Non_max));

Histeresis = Non_max;

% ----- Penentuan awal untuk memberikan nilai


% ----- 0, 128, dan 255
for i = 1+h2 : r-h2
for 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

if (Histeresis(i,j) < ambang_bawah)


Histeresis(i,j) = 0;
end
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) && ...
(Histeresis(i, j-1) == 255) && ...
(Histeresis(i, j+1) == 255) && ...
(Histeresis(i+1, j-1) == 255) && ...
(Histeresis(i+1, j) == 255) && ...
Segmentasi Citra 443

(Histeresis(i+1, j+1) == 255)


Histeresis(i,j) = 255;

ulang = true; % Ulang pengujian


end
end
end
end
end

% ----- Penggantian angka 128 menjadi 0


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

(a) Citra lena256.tif (b) Efek Gaussian (c) Besaran gradien

(d) Penghilangan non-maksimum (e) Hasil operator Canny

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
10.31. Berdasarkan keempat bagian tersebut, nilai terbesar dan nilai terkecil
446 Pengolahan Citra : Teori dan Aplikasi

diperoleh. Piksel yang nilai terbesarnya melebihi nol dan nilai terkecilnya kurang
dari nol akan dijadikan sebagai tepi (diberi nilai 255).

Bagian 1 Bagian 3

Bagian 2 Bagian 4

Piksel pusat dalam


jendela 3 x 3

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
for x=2: n-1
jum = 0;
Segmentasi Citra 447

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 : x
for q = y : y+1
jum = jum + G(q,p);
end
end
rerata1 = jum / 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;

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


terkecil = min([rerata0 rerata1 rerata2 rerata3]);
if (terbesar > 0) && (terkecil < 0)
K(y,x) = 255;
end
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.

(a) Citra lena256.tif (b) Zero crossing 7 x 7, =1 (c) Zero crossing 7 x 7, =0.6

(d) Zero crossing 9 x 9, =1 (e) Zero crossing 9 x 9, =0.6 (e) Zero crossing 9 x 9, =0.5

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

(a) Citra bangunan2.png

(b) Hasil operator Marr-Hilldreth

Gambar 10.33 Operator Marr-Hilldreth pada bangunan2.png

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

Prewitt Kirsch Robinson Robinson


3-level 5-level

Timur 1 1 −1 5 −3 −3 1 0 −1 1 0 −1
H1 1 −2 −1 5 0 −3 1 0 −1 2 0 −2
1 1 −1 5 −3 −3 1 0 −1 1 0 −1

Timur Laut 1 −1 −1 −3 −3 −3 0 −1 −1 0 −1 −2
H2 1 −2 −1 5 0 −3 1 0 −1 1 0 −1
1 1 −1 5 5 −3 1 1 0 2 1 0

Utara −1 −1 −1 −3 −3 −3 −1 −1 −1 −1 −2 −1
H3 1 −2 1 −3 0 −3 0 0 0 0 0 0
1 1 1 5 5 5 1 1 0 1 2 −1

Barat Laut −1 −1 1 −3 −3 −3 1 1 −1 −2 −1 0
H4 −1 −2 1 −3 0 5 1 −2 −1 −1 0 1
1 1 1 −3 5 5 1 1 −1 0 1 2

Barat −1 1 1 −3 −3 5 −1 0 1 −1 0 1
H5 −1 −2 1 −3 0 5 −1 0 1 −2 0 2
−1 1 1 −3 −3 −3 −1 0 1 −1 0 1

Barat Daya 1 1 1 −3 5 5 0 1 1 0 1 2
H6 −1 −2 1 −3 0 5 −1 0 1 −1 0 1
−1 −1 1 −3 −3 −3 −1 −1 0 −2 −1 0

Selatan 1 1 1 5 5 5 1 1 1 1 2 1
H7 1 −2 1 −3 0 −3 0 0 0 0 0 0
−1 −1 −1 −3 −3 −3 −1 −1 −1 −1 −2 −1

Tenggara 1 1 1 5 5 −3 1 1 0 2 1 0
H8 −1 −2 1 5 0 −3 1 0 −1 1 0 −1
−1 −1 1 −3 −3 −3 0 −1 −1 0 −1 −2

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 kompas
Prewitt1 = [1 1 -1;1 -2 -1;1 1 -1];
Prewitt2 = [1 -1 -1;1 -2 -1;1 1 -1];
Prewitt3 = [-1 -1 -1;1 -2 1;1 1 1];
Prewitt4 = [-1 -1 1;-1 -2 1;1 1 1];
Prewitt5 = [-1 1 1;-1 -2 1;-1 1 1];
Prewitt6 = [1 1 1;-1 -2 1;-1 -1 1];
Prewitt7 = [1 1 1;1 -2 1;-1 -1 -1];
Prewitt8 = [1 1 1;-1 -2 1;-1 -1 1];

Kirsch1 = [5 -3 -3;5 0 -3;5 -3 -3];


Kirsch2 = [-3 -3 -3;5 0 -3; 5 5 -3];
Kirsch3 = [-3 -3 -3;-3 0 -3;5 5 5];
Kirsch4 = [-3 -3 -3;-3 0 5;-3 5 5];
Kirsch5 = [-3 -3 5;-3 0 5;-3 -3 -3];
Kirsch6 = [-3 5 5;-3 0 5;-3 -3 -3];
Kirsch7 = [5 5 5;-3 0 -3;-3 -3 -3];
Kirsch8 = [5 5 -3;5 0 -3;-3 -3 -3];

Robinson3_1 = [1 0 -1;1 0 -1;1 0 -1];


Robinson3_2 = [0 -1 -1;1 0 -1;1 1 0];
Robinson3_3 = [-1 -1 -1;0 0 0;1 1 0];
Robinson3_4 = [1 1 -1;1 -2 -1;1 1 -1];
Robinson3_5 = [-1 0 1;-1 0 1;-1 0 1];
Robinson3_6 = [0 1 1;-1 0 1;-1 -1 0];
Robinson3_7 = [1 1 1;0 0 0;-1 -1 -1];
Robinson3_8 = [1 1 0;1 0 -1;0 -1 -1];

Robinson5_1 = [1 0 -1;2 0 -2;1 0 -1];


Robinson5_2 = [0 -1 -2;1 0 -1;2 1 0];
Robinson5_3 = [-1 -2 -1;0 0 0;1 2 -1];
Robinson5_4 = [-2 -1 0;-1 0 1;0 1 2];
Robinson5_5 = [-1 0 1;-2 0 2;-1 0 1];
Robinson5_6 = [0 1 2;-1 0 1;-2 -1 0];
Robinson5_7 = [1 2 1;0 0 0;-1 -2 -1];
Robinson5_8 = [2 1 0;1 0 -1;0 -1 -2];
452 Pengolahan Citra : Teori dan Aplikasi

Prewitt(:,:,1) = Prewitt1;
Prewitt(:,:,2) = Prewitt2;
Prewitt(:,:,3) = Prewitt3;
Prewitt(:,:,4) = Prewitt4;
Prewitt(:,:,5) = Prewitt5;
Prewitt(:,:,6) = Prewitt6;
Prewitt(:,:,7) = Prewitt7;
Prewitt(:,:,8) = Prewitt8;

Kirsch(:,:,1) = Kirsch1;
Kirsch(:,:,2) = Kirsch2;
Kirsch(:,:,3) = Kirsch3;
Kirsch(:,:,4) = Kirsch4;
Kirsch(:,:,5) = Kirsch5;
Kirsch(:,:,6) = Kirsch6;
Kirsch(:,:,7) = Kirsch7;
Kirsch(:,:,8) = Kirsch8;

Robinson3(:,:,1) = Robinson3_1;
Robinson3(:,:,2) = Robinson3_2;
Robinson3(:,:,3) = Robinson3_3;
Robinson3(:,:,4) = Robinson3_4;
Robinson3(:,:,5) = Robinson3_5;
Robinson3(:,:,6) = Robinson3_6;
Robinson3(:,:,7) = Robinson3_7;
Robinson3(:,:,8) = Robinson3_8;

Robinson5(:,:,1) = Robinson5_1;
Robinson5(:,:,2) = Robinson5_2;
Robinson5(:,:,3) = Robinson5_3;
Robinson5(:,:,4) = Robinson5_4;
Robinson5(:,:,5) = Robinson5_5;
Robinson5(:,:,6) = Robinson5_6;
Robinson5(:,:,7) = Robinson5_7;
Robinson5(:,:,8) = 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) + ...
Opr(1,3,i) * F(y+1, x-1) + ...
Segmentasi Citra 453

Opr(2,1,i) * F(y, x+1) + ...


Opr(2,2,i) * F(y, x) + ...
Opr(2,3,i) * F(y, x-1) + ...
Opr(3,1,i) * F(y-1, x+1) + ...
Opr(3,2,i) * F(y-1, x) + ...
Opr(3,3,i) * F(y-1, x-1);
end

maks = max(Grad);
G(y-1, x-1) = maks;
end
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

(a) Prewitt (b) Kirsch

(c) Robinson 3-level (c) Robinson 5-level

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 peng-
ambangan intensitas. Secara matematis, hal itu dinyatakan dengan

1, 𝑢𝑛𝑡𝑢𝑘 (𝑦, 𝑥) ≥ 𝑇
𝑏(𝑦, 𝑥 ) = 𝑓(𝑥 ) = { (10.13)
0, 𝑢𝑛𝑡𝑢𝑘 (𝑦, 𝑥) < 𝑇

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, peng-
ambangan 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).

(a) ipomoea.png (b) Histogram citra

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
456 Pengolahan Citra : Teori dan Aplikasi

if F(i,j) <= t
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.

(a) ipomoea.tif (b) Hasil pengambangan

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 ).
𝜇 +𝜇
4. Hitunglah nilai ambang: T  1 2 2
5. Ulangi langkah 2 sampai dengan 4 sampai tidak ada
perubahan nilai T.
6. RETURN T

Peng-ambangan iteratif dikenal juga dengan sebutan peng-


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

(a) ipomoea.tif (b) Hasil peng-ambangan

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

Objek
lingkaran
T1 T2
Objek kotak

(a) benda.png (b) Histogram

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 aras-


jamak

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

−(𝑛𝑥 2 + 𝑛𝑦2 )
1 𝑛𝑥 2 + 𝑛𝑦2
nilai  𝜎2 [ − 2] 𝑒 2𝜎2
𝜎2
h(y+1, x+1)  nilai
jum  jum + nilai
END-FOR
END-FOR
7. RETURN g

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

(a) benda.png (b) Nilai ambang t1=50 dan t2=100

(c) Nilai ambang t1=175 dan t2=200 (d) Nilai ambang t1=220 dan t2=230

(e) Nilai ambang t1=235 dan t2=250 (f) Nilai ambang t1=220 dan t2=250

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.

(a) ipomoea.png (b) Pengambangan t1=50, t2=100

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

Nilai ambang (t)

Kelas 1 Kelas 2

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

𝑛𝑖
𝑝 (𝑖 ) = , 𝑝(𝑖 ) ≥ 0, ∑256
1 𝑝( 𝑖 ) = 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:

𝑤1 (𝑡) = ∑𝑡𝑖=1 𝑝(𝑖) (10.15)


𝑤2 (𝑡) = ∑𝐿𝑖=𝑡+1 𝑝 (𝑖 ) = 1 − 𝑤1 (𝑡) (10.16)

Dalam hal ini, L menyatakan jumlah aras keabuan. Rerata kedua kelas dihitung
melalui:

𝑚 1 (𝑡) = ∑𝑡𝑖=1 𝑖. 𝑝(𝑖 ) /𝑊1 (𝑡) (10.17)


𝑚 2 (𝑡) = ∑𝑡𝑖=1 𝑖. 𝑝(𝑖 ) /𝑊2 (𝑡) (10.18)

Varians kedua kelas dinyatakan dengan rumus:

𝑝 (𝑖)
𝜎1 2 (𝑡) = ∑𝑡𝑖=1(1 − 𝑚 1 )2 . (10.19)
𝑊1 (𝑡)

𝑝(𝑖)
𝜎2 2 (𝑡) = ∑𝐿𝑖=𝑡+1 (1 − 𝑚 2 )2 . (10.20)
𝑊2 (𝑡)

Varians total dapat dinyatakan dengan

𝜎 2 (𝑡) = 𝜎𝑊 2 (𝑡) + 𝜎𝐵 2 (𝑡) (10.21)

Dalam hal ini, 𝜎𝑊 2 dinamakan sebagai within-class variance (WCV) dan 𝜎𝐵 2


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

𝜎𝑊 2 (𝑡) = 𝑊1 (𝑡). 𝜎1 (𝑡)2 + 𝑊2 (𝑡). 𝜎2 (𝑡)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
Segmentasi Citra 465

𝜎𝐵 2 (𝑡) = 𝑊1 . [𝑚 1 (𝑡) − 𝑚 𝑇 ]2 + 𝑊2 . [𝑚 2 (𝑡) − 𝑚 𝑇 ]2 (10.23)

Dalam hal ini, m T adalah rerata total (𝑚 𝑇 = ∑𝑁


𝑖 =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
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
466 Pengolahan Citra : Teori dan Aplikasi

% 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
end

Akhir Program

Contoh:

>> Img = imread('C:\Image\ipomoea.png'); 


>> t = otsu(Img) 
t = 130
>>
Segmentasi Citra 467

Hasil dengan menggunakan pendekatan Otsu tidak berbeda dengan hasil yang
menggunakan peng-ambangan iteratif.

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 bagian-
bagian 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 peng-
ambangan ini. Pendekatan pertama menggunakan statistika rerata terhadap
intensitas lokal. Terkadang, nilai yang konstan ikut dilibatkan. Rumusnya sebagai
berikut.

∑(𝑦,𝑥)∈𝑊 𝑓 ( 𝑖,𝑗)
𝑇= −𝐶 (10.24)
𝑁𝑤

Dalam hal ini, W menyatakan jendela pada citra, N W menyatakan jumlah piksel
dalam jendela, dan C menyatakan suatu konstanta.
Contoh fungsi yang menggunakan pendekatan rerata dapat dilihat berikut
ini.
468 Pengolahan Citra : Teori dan Aplikasi

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); % Diasumsikan berlatarbelakang 0
else
G = ones(m, n); % Diasumsikan berlatarbelakang 1
end

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
Segmentasi Citra 469

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

(a) Citra ipomoea.tif (b) w = 2, c = 0

(c) w = 2, c = -2 (d) w = 3, c = -4

(f) w = 7, c = -5 (e) w = 10, c = 5

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

𝑇 = 𝑚𝑒𝑑𝑖𝑎𝑛 (𝑓(𝑦, 𝑥 ), (𝑦, 𝑥) ∈ 𝑊 ) − 𝐶 (10.25)


Segmentasi Citra 471

Dalam hal ini, W menyatakan jendela pada citra, N W 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); % Diasumsikan berlatarbelakang 0
else
G = ones(m, n); % Diasumsikan berlatarbelakang 1
end

Nilai = []; % 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
for q=1 : w
472 Pengolahan Citra : Teori dan Aplikasi

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;

if F(y,x) >= median


G(y, x) = 1;
else
G(y, x) = 0;
end
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

(a) Citra ipomoea.tif (b) w = 4, c = 0

(c) w = 13, c = 2 (d) w = 3, c = -4

(f) w = 7, c = -5 (e) w = 10, c = 5

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

𝑚𝑎𝑥 ( 𝑓 ( 𝑦,𝑥 ) ,(𝑦,𝑥)∈𝑊) + 𝑚𝑖𝑛 ( 𝑓 ( 𝑦,𝑥 ) ,(𝑦,𝑥)∈𝑊)


𝑇= (10.26)
2
474 Pengolahan Citra : Teori dan Aplikasi

Dalam hal ini, W menyatakan jendela pada citra, N W 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); % Diasumsikan berlatarbelakang 0
else
G = ones(m, n); % Diasumsikan berlatarbelakang 1
end

for y=1+delta : m-delta


for x=1+delta : n-delta
rerata = 0.0;
terbesar = 0.0;
terkecil = 0.0;
jum = w * w;
pencacah = 0;
for p=1 : w
for q=1 : w
pencacah = pencacah + 1;
Segmentasi Citra 475

nilai= F(y-round(w/2)+p, ...


x-round(w/2)+q);
if nilai > terbesar
terbesar = nilai;
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
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

(a) Citra ipomoea.tif (b) w = 2, c = -50

(c) w = 4, c = -25 (d) w = 4, c = -25

(f) w = 10, c = -10 (e) w = 10, c = -30

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.

(a) Citra maryamah.png (b) w = 13, c = 15

(c) w = 3, c = 5 (d) w = 7, c = 10

Gambar 10.46 Contoh penerapan peng-ambangan adaptif


menggunakan rerata pada citra teks
dengan latar belakang tidak merata
478 Pengolahan Citra : Teori dan Aplikasi

(a) Citra maryamah.png

(a) Pengambangan aras-jamak (b) Pengambangan aras-jamak


dengan t1=140, t2=200 dengan t1=140, t2=220

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, f1 , f2 , …, fn adalah frekuensi pada citra
beraras keabuan. Maka,

𝑓𝑖
𝑝 (𝑖 ) = , ∑𝐿−1
𝑖 =0 𝑓𝑖 = 1 𝑖 = 0,1,2, … , 𝐿 − 1 (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 479

𝑝(𝑖 ) 𝑝(𝑖)
𝐻𝑏 (𝑡) = − ∑𝑡𝑖=0 𝑃 . ln 𝑃 (10.28)
𝑏 (𝑡) 𝑏 (𝑡)

dan entropi objek adalah:

𝑝 𝑖 ( )𝑝 𝑖 ( )
𝐻𝑜 (𝑡) = − ∑𝐿−1
𝑖 =𝑡+1 𝑃 ( 𝑡) . ln 𝑃 ( 𝑡) (10.29)
𝑜 𝑜

Dalam hal ini,

𝑃𝑏 (𝑡) = ∑𝑡𝑖=0 𝑝(𝑖 ) , 𝑃𝑜 (𝑡) = ∑𝐿−1


𝑖 =𝑡+1 𝑝( 𝑖 )

(10.30)

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

𝑝( 𝑖 ) 𝑝( 𝑖 ) 𝑝 ( 𝑖) 𝑝 ( 𝑖)
 (t) = − ∑𝑡𝑖=0 𝑃 𝑙𝑛 𝑃 − ∑𝐿−1
𝑖=𝑡+1 𝑃 𝑙𝑛 (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
for i=1 : 256
h(i) = 0.0;
end
480 Pengolahan Citra : Teori dan Aplikasi

% 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
varMaks = wt;
ambang = t;
end
end
Segmentasi Citra 481

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

(a) benda.png (b) Otsu (c) Entropy (Kapur)

(d) benda.png (e) Otsu (f) Entropy (Kapur)

(g) sidikjari.png (h) Otsu (i) Entropy (Kapur)

(j) gedung.tif (k) Otsu (l) Entropy (Kapur)

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:

1 𝑝(𝑖) 𝜌
𝐻𝑏 (𝑡) = 𝑙𝑛 [∑𝑡𝑖=0 (𝑃 ) ] (10.32)
1−𝜌 𝑏 (𝑡)
Segmentasi Citra 483

1 𝑝( 𝑖 ) 𝜌
𝐻𝑜 (𝑡) = 1−𝜌 𝑙𝑛 [∑𝐿−1
𝑖 =𝑡+1 (1−𝑃 ) ] (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

% Hitung Hb(t)
484 Pengolahan Citra : Teori dan Aplikasi

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;

if wt > varMaks
varMaks = wt;
ambang = t;
end
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

(a) Citra ipomoea.tif (b)  = 0,05

(c)  = 0,5 (d)  = 0,6

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
S(y,x) = 128;
end

% 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

(a) Citra lapangan.png (b) Hasil segmentasi lapangan.png

(c) Citra mainan.png (d) Hasil segmentasi mainan.png

(e) Citra inns.png (f) Hasil segmentasi inns.png

Gambar 10.51 Contoh lain hasil segmentasi warna dengan segwarna


490 Pengolahan Citra : Teori dan Aplikasi

Contoh aplikasi segmentasi warna dengan menggunakan segwarna dapat


dilihat pada skrip segdaun.m. Suatu daun dipotret dengan latarbelakang putih
(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
Segmentasi Citra 491

figure(3); imshow(H)
clear G H;

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.

(a) Citra ficus.png (b) Hasil segwarna (c) 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);
492 Pengolahan Citra : Teori dan Aplikasi

g = RGB(baris,kolom,2);
b = RGB(baris,kolom,3);
kelabu = r * 0.2989 + g * 0.5870 + b * 0.1140;
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);

B(baris, kolom) = jum/9;


end
end

B = uint8(B);

% Gunakan pengambangan otsu


t = otsu(B);
t = t + 13; % Koreksi ambang. Sesuaikan dengan kebutuhan
C = 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 493

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.

(a) Citra ficus.png (b) Konversi ke abu-abu (c) citra biner

(d) Morfologi opening (e) Hasil segmentasi

Gambar 10.53 Urutan segmentasi daun melalui citra biner


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