SlideShare une entreprise Scribd logo
1  sur  96
Télécharger pour lire hors ligne
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

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

tersebut
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

Kegunaan

Mobil, jalan, dan

Acuan yang

Segmentasi
Mobil

Citra

Digunakan

Pelacakan mobil

latarbelakang
Struktur

warna

Foto satelit

Pengklasifikasian

Kerumunan orang

Tekstur dan

area

permukaan bumi
Wajah orang

warna

Pengenalan wajah

Warna, bentuk,

di pasar
Apel

Gerakan dan

dan tekstur

Kumpulan apel

Bentuk, warna,

pada ban berjalan

Segmentasi

Pemilahan buah apel
berdasarkan ukuran

ukuran

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

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

(a)

(b)

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

(c)

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

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

Turunan
𝑑𝑓
𝑑𝑥
𝑑𝑓
𝑑𝑦
∇𝑓(𝑦,

Tabel 10.2 Turunan orde pertama dan kedua pada
bentuk kontinu dan diskret
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

Turunan
𝑑2 𝑓
𝑑𝑥 2
𝑑2 𝑓
𝑑𝑦 2
∇2 𝑓(𝑦, 𝑥)

411

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

𝑓(𝑥)

(a) Fungsi citra

Nilai maksimum
Batas
(b) Deteksi tepi
derivatif orde pertama

𝑑
𝑓(𝑥)
𝑑𝑥

a b

Persilangan nol
(zero-crossing)
𝑑2
𝑓(𝑥)
𝑑𝑥 2

(c) Deteksi tepi
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
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

168
168
168

168
168
168

138
138
138

87
87
87

30
30
30

0 0
0 0
0 0

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

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

𝑑𝑓

𝑑𝑓

1/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

+

𝑑2 𝑓(𝑦,𝑥)
𝑑𝑦 2

(10.4)

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:Imagemainan.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 +
(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

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:Imagemainan.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:Imagemainan.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

x-1

421

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:Imagemainan.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:Imagemainan.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

(c) Operator Sobel

(b) Operator Prewitt

(d) Operator Frei-Chen

Gambar 10.16 Perbedaan hasil deteksi tepi dengan
menggunakan keempat macam operator

(a) Hasil deteksi tepi dengan
(a) Hasil deteksi tepi dengan
operator Roberts
operator Roberts

(b) Hasil setelah peng-ambangan
dengan nilai ambang 20

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:Imagemainan.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
𝐿𝑜𝐺(𝑦, 𝑥) = −

1

*1 −
𝜋𝜍4

𝑥 2 +𝑦 2
2𝜍2

+ 𝑒

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

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:
𝐿𝑜𝐺(𝑦, 𝑥) =

1
𝑥 2 + 𝑦 2 −(𝑥 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:Imagemainan.png')); 
 H = [

0

0 -1

0

0

0 -1 -2 -1

0

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

0

0

0]; 

0 -1

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

nilai 

1
𝜍2

*

𝑛𝑥 2 + 𝑛𝑦 2
𝜍2

− 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𝜎1

2𝜍1 2

−

−(𝑥2 +𝑦2 )
2
𝑒 2𝜎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:Imagemainan.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

5

4

2

4

9

12

9

4

5

12

15

12

5

4

9

12

9

4

2

1 / 115

4

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  G y

(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 0o, 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 )
(H )
45 yi  f   wij x j 



 j

arah  
90 y  f (T )  w (TH ) y ( H ) 
  ij

j


135 i
 j



(10.12)

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

Arah tepi 0o:

439

i, j-1

i, j

i, j+1

Arah tepi 45o:

i-1, j+1

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

Arah tepi 90o:

i-1, j

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

Arah tepi 135o:

i-1, j-1

i, j

i, j

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

end

i, j+1
if (Grad(i,j) = Grad(i+1,j+1)) || ...
(Grad(i,j) = Grad(i-1,j-1))
Non_max(i,j) = 0;
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

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

441
442

Pengolahan Citra : Teori dan Aplikasi

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

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
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
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
% ----% ----for i =
for

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
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:Imagelena256.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

(d) Penghilangan non-maksimum

(c) Besaran gradien

(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 MarrHildreth sebenarnya adalah operator LoG yang dilengkapi dengan upaya untuk
menemukan zero crossing. Zero-crossing menyatakan tanda perubahan pada tepitepi 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 4

Bagian 2

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 :
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;
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:Imagelena256.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:Imagebangunan2.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
3-level
1
1
1

Timur
H1

1
1
1

1
−2
1

−1
−1
−1

5
5
5

Timur Laut
H2

1
1
1

−1
−2
1

−1
−1
−1

−3
5
5

−3
0
5

−3
−3
−3

0
1
1

−1
1
1

−3
−3
5

−3
0
5

−3
−3
5

1
1
1

0
0
0

−1
0
1

Utara
H3

−1
1
1

−1
−2
1

−3
0
−3

−3
−3
−3

Barat Laut
H4

−1
−1
1

−1
−2
1

1
1
1

−3
−3
−3

−3
0
5

−3
5
5

Barat
H5

−1
−1
−1

1
−2
1

1
1
1

−3
−3
−3

−3
0
−3

5
5
−3

Barat Daya
H6

1
−1
−1

1
−2
−1

1
1
1

−3
−3
−3

5
0
−3

5
5
−3

1
1
−1

5
−3
−3

5
0
−3

5
−3
−3

1
0
−1

1
1
1

5
5
−3

5
0
−3

−3
−3
−3

1
1
0

Selatan
H7
Tenggara
H8

1
1
−1
1
−1
−1

1
−2
−1
1
−2
−1

0
−1
−1

−1
−1
−1

−1
0
1
−1
0
1
1
−2
1

−1
−1
−1

Robinson
5-level

0
0
0
1
0
−1
1
0
−1

1
0
−1

1
2
1

−1
−1
0
−1
0
0

0
1
2

−2
0
2

−2
−1
0

1
1
1

−1
0
1

−1
−2
−1

1
1
0

0
−1
−2
1
0
−1

0
−1
−1

2
1
0

−1
−2
−1

−1
0
1

−1
0
1

−1
−1
−1

1
0
−1

0
0
0

0
0
0
1
0
−1
2
0
−2

1
0
−1

−2
−1
0
−1
0
−1
0
1
2
1
2
1
2
1
0
1
0
−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
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

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)

Pengolahan Citra : Teori dan Aplikasi

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

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) + ...
Opr(1,3,i) * F(y+1, x-1) + ...
Segmentasi Citra

453

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, x+1) + ...
F(y, x) + ...
F(y, x-1) + ...
F(y-1, x+1) + ...
F(y-1, x) + ...
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:Imagemainan.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

(c) Robinson 3-level

(b) Kirsch

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

𝑏(𝑦, 𝑥) = 𝑓(𝑥) = {

1, 𝑢𝑛𝑡𝑢𝑘 (𝑦, 𝑥) ≥ 𝑇
0, 𝑢𝑛𝑡𝑢𝑘 (𝑦, 𝑥)  𝑇

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

(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:Imageipomoea.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 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:Imageipomoea.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).

T1

Objek
lingkaran
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 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

nilai 

1
𝜍2

*

𝑛𝑥 2 + 𝑛𝑦 2
𝜍2

− 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:Imagebenda.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

(c) Nilai ambang t1=175 dan t2=200

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

(b) Nilai ambang t1=50 dan t2=100

(d) Nilai ambang t1=220 dan t2=230

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

𝑝(𝑖)
𝑊1 (𝑡)

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

𝑝(𝑖)
𝑊2 (𝑡)

(10.19)
(10.20)

Varians total dapat dinyatakan dengan
𝜎 2 (𝑡) = 𝜎 𝑊 2 (𝑡) + 𝜎 𝐵 2 (𝑡)
Dalam hal ini,

(10.21)

𝜎 𝑊 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

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

465

(10.23)

𝑁
Dalam hal ini, mT 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:Imageipomoea.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 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.

𝑇=

∑(𝑦,𝑥)∈𝑊 𝑓(𝑖,𝑗)
𝑁𝑤

− 𝐶

(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.
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);
else
G = ones(m, n);
end

% Diasumsikan berlatarbelakang 0
% Diasumsikan berlatarbelakang 1

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:Imageipomoea.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, 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
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:Imageipomoea.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

𝑇=

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

(10.26)
474

Pengolahan Citra : Teori dan Aplikasi

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;
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:Imageipomoea.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:Imagemaryamah.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
dengan t1=140, t2=200

(b) Pengambangan aras-jamak
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,
𝑡
𝐿−1
𝑃 𝑏 (𝑡) = ∑ 𝑖=0 𝑝(𝑖) , 𝑃𝑜 (𝑡) = ∑ 𝑖=𝑡+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:Imageipomoea.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

𝑝(𝑖)

𝑡
𝐻 𝑏 (𝑡) = 1−𝜌 𝑙𝑛 *∑ 𝑖=0 ( 𝑃

𝑏

𝜌

) +
(𝑡)

(10.32)
Segmentasi Citra

1

483

𝜌
𝑝(𝑖)
) +
𝑜 (𝑡)

𝐿−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:Imageipomoea.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

(c)  = 0,5

(b)  = 0,05

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

(a) Citra lapangan.png

(c) Citra mainan.png

(e) Citra inns.png

489

(b) Hasil segmentasi lapangan.png

(d) Hasil segmentasi mainan.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:Imageficus.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:Imageficus.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);
%
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

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

(d) Morfologi opening

(c) citra biner

(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

Contenu connexe

Tendances

Ppt unsur tata letak
Ppt unsur tata letakPpt unsur tata letak
Ppt unsur tata letakemri3
 
Penjelasan tentang kontur dan representasi citra
Penjelasan tentang kontur dan representasi citraPenjelasan tentang kontur dan representasi citra
Penjelasan tentang kontur dan representasi citraIztHo'ell Shoerento
 
Pengantar Structure from Motion Photogrammetry
Pengantar Structure from Motion PhotogrammetryPengantar Structure from Motion Photogrammetry
Pengantar Structure from Motion PhotogrammetryDany Laksono
 
Bab 4 operasi-operasi dasar pengolahan citra dijital
Bab 4 operasi-operasi dasar pengolahan citra dijitalBab 4 operasi-operasi dasar pengolahan citra dijital
Bab 4 operasi-operasi dasar pengolahan citra dijitalSyafrizal
 
Pengolahan Citra Digital (Resume materi kuliah)
Pengolahan Citra Digital (Resume materi kuliah)Pengolahan Citra Digital (Resume materi kuliah)
Pengolahan Citra Digital (Resume materi kuliah)Abdullah Azzam Al Haqqoni
 
Pcd dikawasan frekuensi
Pcd dikawasan frekuensiPcd dikawasan frekuensi
Pcd dikawasan frekuensidedidarwis
 
3 piksel_dan_histogram
 3 piksel_dan_histogram 3 piksel_dan_histogram
3 piksel_dan_histogramRoziq Bahtiar
 
Bab 6 histogram citra
Bab 6 histogram citraBab 6 histogram citra
Bab 6 histogram citraSyafrizal
 
Pcd 03 - dasar pengolahan citra
Pcd   03 - dasar pengolahan citraPcd   03 - dasar pengolahan citra
Pcd 03 - dasar pengolahan citraFebriyani Syafri
 
Penajaman dan interpretasi c itra menggunakan envi 5.1
Penajaman dan interpretasi c itra menggunakan envi 5.1 Penajaman dan interpretasi c itra menggunakan envi 5.1
Penajaman dan interpretasi c itra menggunakan envi 5.1 Mega Yasma Adha
 
Tugas mandiri pengolahan citra digital
Tugas mandiri pengolahan citra digitalTugas mandiri pengolahan citra digital
Tugas mandiri pengolahan citra digitalanggysanggy
 
01 introduction image processing analysis
01 introduction image processing analysis01 introduction image processing analysis
01 introduction image processing analysisRumah Belajar
 

Tendances (20)

Ppt unsur tata letak
Ppt unsur tata letakPpt unsur tata letak
Ppt unsur tata letak
 
Nine step methodology
Nine step methodologyNine step methodology
Nine step methodology
 
Menerapkan prinsip desain user interface pada multimedia interaktif berbasis ...
Menerapkan prinsip desain user interface pada multimedia interaktif berbasis ...Menerapkan prinsip desain user interface pada multimedia interaktif berbasis ...
Menerapkan prinsip desain user interface pada multimedia interaktif berbasis ...
 
Pcd 5
Pcd 5Pcd 5
Pcd 5
 
Penjelasan tentang kontur dan representasi citra
Penjelasan tentang kontur dan representasi citraPenjelasan tentang kontur dan representasi citra
Penjelasan tentang kontur dan representasi citra
 
Pengantar Structure from Motion Photogrammetry
Pengantar Structure from Motion PhotogrammetryPengantar Structure from Motion Photogrammetry
Pengantar Structure from Motion Photogrammetry
 
Bab 4 operasi-operasi dasar pengolahan citra dijital
Bab 4 operasi-operasi dasar pengolahan citra dijitalBab 4 operasi-operasi dasar pengolahan citra dijital
Bab 4 operasi-operasi dasar pengolahan citra dijital
 
Pengolahan Citra digital
Pengolahan Citra digitalPengolahan Citra digital
Pengolahan Citra digital
 
Pengolahan Citra Digital (Resume materi kuliah)
Pengolahan Citra Digital (Resume materi kuliah)Pengolahan Citra Digital (Resume materi kuliah)
Pengolahan Citra Digital (Resume materi kuliah)
 
Dasar desain grafis Fungsi dan Unsur Warna CMYK dan RGB
Dasar desain grafis Fungsi dan Unsur Warna CMYK dan RGBDasar desain grafis Fungsi dan Unsur Warna CMYK dan RGB
Dasar desain grafis Fungsi dan Unsur Warna CMYK dan RGB
 
10.kompresi citra
10.kompresi citra10.kompresi citra
10.kompresi citra
 
Pcd dikawasan frekuensi
Pcd dikawasan frekuensiPcd dikawasan frekuensi
Pcd dikawasan frekuensi
 
3 piksel_dan_histogram
 3 piksel_dan_histogram 3 piksel_dan_histogram
3 piksel_dan_histogram
 
Bab 6 histogram citra
Bab 6 histogram citraBab 6 histogram citra
Bab 6 histogram citra
 
Pcd 03 - dasar pengolahan citra
Pcd   03 - dasar pengolahan citraPcd   03 - dasar pengolahan citra
Pcd 03 - dasar pengolahan citra
 
Penajaman dan interpretasi c itra menggunakan envi 5.1
Penajaman dan interpretasi c itra menggunakan envi 5.1 Penajaman dan interpretasi c itra menggunakan envi 5.1
Penajaman dan interpretasi c itra menggunakan envi 5.1
 
Pcd 4
Pcd 4Pcd 4
Pcd 4
 
Tugas mandiri pengolahan citra digital
Tugas mandiri pengolahan citra digitalTugas mandiri pengolahan citra digital
Tugas mandiri pengolahan citra digital
 
Pengolahan audio video memahami alur proses multimedia
Pengolahan audio video memahami alur proses multimediaPengolahan audio video memahami alur proses multimedia
Pengolahan audio video memahami alur proses multimedia
 
01 introduction image processing analysis
01 introduction image processing analysis01 introduction image processing analysis
01 introduction image processing analysis
 

En vedette

7. pemrograman struktur
7. pemrograman struktur7. pemrograman struktur
7. pemrograman strukturRoziq Bahtiar
 
Techarea company profile
Techarea company profileTecharea company profile
Techarea company profileRoziq Bahtiar
 
Bab 11 citra biner
Bab 11 citra binerBab 11 citra biner
Bab 11 citra binerSyafrizal
 
Open GL T0074 56 sm1
Open GL T0074 56 sm1Open GL T0074 56 sm1
Open GL T0074 56 sm1Roziq Bahtiar
 
Pertemuan10 spywareadwaredanspam
Pertemuan10 spywareadwaredanspamPertemuan10 spywareadwaredanspam
Pertemuan10 spywareadwaredanspamRoziq Bahtiar
 
Open GL 09 scan conversion
Open GL 09 scan conversionOpen GL 09 scan conversion
Open GL 09 scan conversionRoziq Bahtiar
 
6. pemrograman pointer
6. pemrograman pointer6. pemrograman pointer
6. pemrograman pointerRoziq Bahtiar
 
Tarby magazine salafiyah kajen
Tarby magazine  salafiyah kajenTarby magazine  salafiyah kajen
Tarby magazine salafiyah kajenRoziq Bahtiar
 
Pengolahan Citra 2 - Pembentukan Citra Digital
Pengolahan Citra 2 - Pembentukan Citra DigitalPengolahan Citra 2 - Pembentukan Citra Digital
Pengolahan Citra 2 - Pembentukan Citra DigitalNur Fadli Utomo
 
Brand for Yoshkar-Ola - Yoshka (Strarov, Ryabota)
Brand for Yoshkar-Ola - Yoshka (Strarov, Ryabota)Brand for Yoshkar-Ola - Yoshka (Strarov, Ryabota)
Brand for Yoshkar-Ola - Yoshka (Strarov, Ryabota)Mikhail Starov
 

En vedette (15)

Pcd 11
Pcd 11Pcd 11
Pcd 11
 
7. pemrograman struktur
7. pemrograman struktur7. pemrograman struktur
7. pemrograman struktur
 
Techarea company profile
Techarea company profileTecharea company profile
Techarea company profile
 
Hso 24 september 2013
Hso 24 september 2013Hso 24 september 2013
Hso 24 september 2013
 
pengolahan-citra
pengolahan-citrapengolahan-citra
pengolahan-citra
 
Bab 11 citra biner
Bab 11 citra binerBab 11 citra biner
Bab 11 citra biner
 
Open GL T0074 56 sm1
Open GL T0074 56 sm1Open GL T0074 56 sm1
Open GL T0074 56 sm1
 
Pertemuan 1
Pertemuan 1Pertemuan 1
Pertemuan 1
 
Pertemuan10 spywareadwaredanspam
Pertemuan10 spywareadwaredanspamPertemuan10 spywareadwaredanspam
Pertemuan10 spywareadwaredanspam
 
Open GL 09 scan conversion
Open GL 09 scan conversionOpen GL 09 scan conversion
Open GL 09 scan conversion
 
6. pemrograman pointer
6. pemrograman pointer6. pemrograman pointer
6. pemrograman pointer
 
Tarby magazine salafiyah kajen
Tarby magazine  salafiyah kajenTarby magazine  salafiyah kajen
Tarby magazine salafiyah kajen
 
Matlab
MatlabMatlab
Matlab
 
Pengolahan Citra 2 - Pembentukan Citra Digital
Pengolahan Citra 2 - Pembentukan Citra DigitalPengolahan Citra 2 - Pembentukan Citra Digital
Pengolahan Citra 2 - Pembentukan Citra Digital
 
Brand for Yoshkar-Ola - Yoshka (Strarov, Ryabota)
Brand for Yoshkar-Ola - Yoshka (Strarov, Ryabota)Brand for Yoshkar-Ola - Yoshka (Strarov, Ryabota)
Brand for Yoshkar-Ola - Yoshka (Strarov, Ryabota)
 

Similaire à Pcd 10

Review paper
Review paperReview paper
Review paperananta200
 
Review paper
Review paperReview paper
Review paperananta200
 
Review paper
Review paperReview paper
Review papertrisvo
 
Pendeteksian Tepi - Buku Rinaldi Munir
Pendeteksian Tepi - Buku Rinaldi MunirPendeteksian Tepi - Buku Rinaldi Munir
Pendeteksian Tepi - Buku Rinaldi Munirdedidarwis
 
Bab 8 pendeteksian tepi
Bab 8 pendeteksian tepiBab 8 pendeteksian tepi
Bab 8 pendeteksian tepiSyafrizal
 
Contoh format tugas makalah
Contoh format tugas makalahContoh format tugas makalah
Contoh format tugas makalahsamoedra
 
kuliah if-itb interpretasi dan pengolahan citra.pptx
kuliah if-itb interpretasi dan pengolahan citra.pptxkuliah if-itb interpretasi dan pengolahan citra.pptx
kuliah if-itb interpretasi dan pengolahan citra.pptxssuser06c28f
 
segmentasi.ppt
segmentasi.pptsegmentasi.ppt
segmentasi.pptichsan41
 
Analisa spasial -_vektor
Analisa spasial -_vektorAnalisa spasial -_vektor
Analisa spasial -_vektorIrma Wahyuni
 
Bab 15 pengenalan pola
Bab 15 pengenalan polaBab 15 pengenalan pola
Bab 15 pengenalan polaSyafrizal
 
Bab 15 pengenalan pola
Bab 15 pengenalan polaBab 15 pengenalan pola
Bab 15 pengenalan poladedidarwis
 

Similaire à Pcd 10 (20)

LN s07-machine vision-s2
LN s07-machine vision-s2LN s07-machine vision-s2
LN s07-machine vision-s2
 
LN s06-machine vision-s2
LN s06-machine vision-s2LN s06-machine vision-s2
LN s06-machine vision-s2
 
Fotogrametri dijital sift dan surf
Fotogrametri dijital sift dan surfFotogrametri dijital sift dan surf
Fotogrametri dijital sift dan surf
 
Pcd 4
Pcd 4Pcd 4
Pcd 4
 
Pcd 8
Pcd 8Pcd 8
Pcd 8
 
Review paper
Review paperReview paper
Review paper
 
Review paper
Review paperReview paper
Review paper
 
Review paper
Review paperReview paper
Review paper
 
Pcd 8
Pcd 8Pcd 8
Pcd 8
 
Pendeteksian Tepi - Buku Rinaldi Munir
Pendeteksian Tepi - Buku Rinaldi MunirPendeteksian Tepi - Buku Rinaldi Munir
Pendeteksian Tepi - Buku Rinaldi Munir
 
Bab 8 pendeteksian tepi
Bab 8 pendeteksian tepiBab 8 pendeteksian tepi
Bab 8 pendeteksian tepi
 
Contoh format tugas makalah
Contoh format tugas makalahContoh format tugas makalah
Contoh format tugas makalah
 
LN s04-machine vision-s2
LN s04-machine vision-s2LN s04-machine vision-s2
LN s04-machine vision-s2
 
kuliah if-itb interpretasi dan pengolahan citra.pptx
kuliah if-itb interpretasi dan pengolahan citra.pptxkuliah if-itb interpretasi dan pengolahan citra.pptx
kuliah if-itb interpretasi dan pengolahan citra.pptx
 
segmentasi.ppt
segmentasi.pptsegmentasi.ppt
segmentasi.ppt
 
Analisa spasial -_vektor
Analisa spasial -_vektorAnalisa spasial -_vektor
Analisa spasial -_vektor
 
Presentasi pengolahan citra 2
Presentasi pengolahan citra 2Presentasi pengolahan citra 2
Presentasi pengolahan citra 2
 
Bab 15 pengenalan pola
Bab 15 pengenalan polaBab 15 pengenalan pola
Bab 15 pengenalan pola
 
Bab 15 pengenalan pola
Bab 15 pengenalan polaBab 15 pengenalan pola
Bab 15 pengenalan pola
 
Thinning belajar
Thinning belajarThinning belajar
Thinning belajar
 

Plus de Roziq Bahtiar

static and dynamic routing
static and dynamic routingstatic and dynamic routing
static and dynamic routingRoziq Bahtiar
 
Perintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating SistemPerintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating SistemRoziq Bahtiar
 
Pengantar algoritma pemrograman
Pengantar algoritma pemrogramanPengantar algoritma pemrograman
Pengantar algoritma pemrogramanRoziq Bahtiar
 
Flowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulatFlowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulatRoziq Bahtiar
 
5. pemrograman array dan_string
5. pemrograman array dan_string5. pemrograman array dan_string
5. pemrograman array dan_stringRoziq Bahtiar
 
4. pemrograman fungsi
4. pemrograman fungsi4. pemrograman fungsi
4. pemrograman fungsiRoziq Bahtiar
 
3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrograman3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrogramanRoziq Bahtiar
 
2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrogramanRoziq Bahtiar
 
1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_dataRoziq Bahtiar
 
Open GL T0074 56 sm3
Open GL T0074 56 sm3Open GL T0074 56 sm3
Open GL T0074 56 sm3Roziq Bahtiar
 
Open GL T0074 56 sm2
Open GL T0074 56 sm2Open GL T0074 56 sm2
Open GL T0074 56 sm2Roziq Bahtiar
 
Open GL 04 linealgos
Open GL 04 linealgosOpen GL 04 linealgos
Open GL 04 linealgosRoziq Bahtiar
 
Open GL T0074 56 sm4
Open GL T0074 56 sm4Open GL T0074 56 sm4
Open GL T0074 56 sm4Roziq Bahtiar
 

Plus de Roziq Bahtiar (18)

static and dynamic routing
static and dynamic routingstatic and dynamic routing
static and dynamic routing
 
Perintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating SistemPerintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating Sistem
 
Pengantar algoritma pemrograman
Pengantar algoritma pemrogramanPengantar algoritma pemrograman
Pengantar algoritma pemrograman
 
Flowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulatFlowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulat
 
5. pemrograman array dan_string
5. pemrograman array dan_string5. pemrograman array dan_string
5. pemrograman array dan_string
 
4. pemrograman fungsi
4. pemrograman fungsi4. pemrograman fungsi
4. pemrograman fungsi
 
3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrograman3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrograman
 
2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman
 
1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data
 
Alpro tutor
Alpro tutorAlpro tutor
Alpro tutor
 
Pcd 7
Pcd 7Pcd 7
Pcd 7
 
Eigen
EigenEigen
Eigen
 
2 pengolahan_citra
 2 pengolahan_citra 2 pengolahan_citra
2 pengolahan_citra
 
Open GL T0074 56 sm3
Open GL T0074 56 sm3Open GL T0074 56 sm3
Open GL T0074 56 sm3
 
Open GL T0074 56 sm2
Open GL T0074 56 sm2Open GL T0074 56 sm2
Open GL T0074 56 sm2
 
Open GL 04 linealgos
Open GL 04 linealgosOpen GL 04 linealgos
Open GL 04 linealgos
 
Open GL T0074 56 sm4
Open GL T0074 56 sm4Open GL T0074 56 sm4
Open GL T0074 56 sm4
 
Open GL Tutorial06
Open GL Tutorial06Open GL Tutorial06
Open GL Tutorial06
 

Dernier

PAMPHLET PENGAKAP aktiviti pengakap 2024
PAMPHLET PENGAKAP aktiviti pengakap 2024PAMPHLET PENGAKAP aktiviti pengakap 2024
PAMPHLET PENGAKAP aktiviti pengakap 2024MALISAAININOORBINTIA
 
slide presentation bab 2 sain form 2.pdf
slide presentation bab 2 sain form 2.pdfslide presentation bab 2 sain form 2.pdf
slide presentation bab 2 sain form 2.pdfNURAFIFAHBINTIJAMALU
 
Buku Saku Layanan Haji Ramah Lansia 2.pdf
Buku Saku Layanan Haji Ramah Lansia 2.pdfBuku Saku Layanan Haji Ramah Lansia 2.pdf
Buku Saku Layanan Haji Ramah Lansia 2.pdfWahyudinST
 
Keberagaman-Peserta-Didik-dalam-Psikologi-Pendidikan.pptx
Keberagaman-Peserta-Didik-dalam-Psikologi-Pendidikan.pptxKeberagaman-Peserta-Didik-dalam-Psikologi-Pendidikan.pptx
Keberagaman-Peserta-Didik-dalam-Psikologi-Pendidikan.pptxLeniMawarti1
 
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.aechacha366
 
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptx
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptxTopik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptx
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptxsyafnasir
 
KAMUS SOSIOLOGI LENGKAP.untuk sma umumdocx
KAMUS SOSIOLOGI LENGKAP.untuk sma umumdocxKAMUS SOSIOLOGI LENGKAP.untuk sma umumdocx
KAMUS SOSIOLOGI LENGKAP.untuk sma umumdocxjohan effendi
 
RENCANA + Link2 Materi Pelatihan/BimTek "Teknik Perhitungan & Verifikasi TKDN...
RENCANA + Link2 Materi Pelatihan/BimTek "Teknik Perhitungan & Verifikasi TKDN...RENCANA + Link2 Materi Pelatihan/BimTek "Teknik Perhitungan & Verifikasi TKDN...
RENCANA + Link2 Materi Pelatihan/BimTek "Teknik Perhitungan & Verifikasi TKDN...Kanaidi ken
 
KISI-KISI Soal PAS Geografi Kelas XII.docx
KISI-KISI Soal PAS Geografi Kelas XII.docxKISI-KISI Soal PAS Geografi Kelas XII.docx
KISI-KISI Soal PAS Geografi Kelas XII.docxjohan effendi
 
Teks ucapan Majlis Perpisahan Lambaian Kasih
Teks ucapan Majlis Perpisahan Lambaian KasihTeks ucapan Majlis Perpisahan Lambaian Kasih
Teks ucapan Majlis Perpisahan Lambaian Kasihssuserfcb9e3
 
Aksi Nyata PERENCANAAN BERBASIS DATA.pptx
Aksi Nyata PERENCANAAN BERBASIS DATA.pptxAksi Nyata PERENCANAAN BERBASIS DATA.pptx
Aksi Nyata PERENCANAAN BERBASIS DATA.pptxdonny761155
 
Sejarah Perkembangan Teori Manajemen.ppt
Sejarah Perkembangan Teori Manajemen.pptSejarah Perkembangan Teori Manajemen.ppt
Sejarah Perkembangan Teori Manajemen.pptssuser940815
 
LATIHAN SOAL geo ANALISA DATA PENDUDUK.doc
LATIHAN SOAL geo ANALISA DATA PENDUDUK.docLATIHAN SOAL geo ANALISA DATA PENDUDUK.doc
LATIHAN SOAL geo ANALISA DATA PENDUDUK.docjohan effendi
 
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdf
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdfPPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdf
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdfNatasyaA11
 
P_E_R_I_L_A_K_U__K_O_N_S_E_L_O_R__v.1.ppt
P_E_R_I_L_A_K_U__K_O_N_S_E_L_O_R__v.1.pptP_E_R_I_L_A_K_U__K_O_N_S_E_L_O_R__v.1.ppt
P_E_R_I_L_A_K_U__K_O_N_S_E_L_O_R__v.1.pptAfifFikri11
 
PPT TEKS TANGGAPAN KELAS 7 KURIKUKULM MERDEKA
PPT TEKS TANGGAPAN KELAS 7 KURIKUKULM MERDEKAPPT TEKS TANGGAPAN KELAS 7 KURIKUKULM MERDEKA
PPT TEKS TANGGAPAN KELAS 7 KURIKUKULM MERDEKARenoMardhatillahS
 
Materi pembelajaran tentang MISIOLOGI.pptx
Materi pembelajaran tentang MISIOLOGI.pptxMateri pembelajaran tentang MISIOLOGI.pptx
Materi pembelajaran tentang MISIOLOGI.pptxoperatorsttmamasa
 
Teknik Menjawab Kertas P.Moral SPM 2024.pptx
Teknik Menjawab Kertas P.Moral SPM  2024.pptxTeknik Menjawab Kertas P.Moral SPM  2024.pptx
Teknik Menjawab Kertas P.Moral SPM 2024.pptxwongcp2
 
materi pembelajaran tentang INTERNET.ppt
materi pembelajaran tentang INTERNET.pptmateri pembelajaran tentang INTERNET.ppt
materi pembelajaran tentang INTERNET.pptTaufikFadhilah
 
Catatan di setiap Indikator Fokus Perilaku
Catatan di setiap Indikator Fokus PerilakuCatatan di setiap Indikator Fokus Perilaku
Catatan di setiap Indikator Fokus PerilakuHANHAN164733
 

Dernier (20)

PAMPHLET PENGAKAP aktiviti pengakap 2024
PAMPHLET PENGAKAP aktiviti pengakap 2024PAMPHLET PENGAKAP aktiviti pengakap 2024
PAMPHLET PENGAKAP aktiviti pengakap 2024
 
slide presentation bab 2 sain form 2.pdf
slide presentation bab 2 sain form 2.pdfslide presentation bab 2 sain form 2.pdf
slide presentation bab 2 sain form 2.pdf
 
Buku Saku Layanan Haji Ramah Lansia 2.pdf
Buku Saku Layanan Haji Ramah Lansia 2.pdfBuku Saku Layanan Haji Ramah Lansia 2.pdf
Buku Saku Layanan Haji Ramah Lansia 2.pdf
 
Keberagaman-Peserta-Didik-dalam-Psikologi-Pendidikan.pptx
Keberagaman-Peserta-Didik-dalam-Psikologi-Pendidikan.pptxKeberagaman-Peserta-Didik-dalam-Psikologi-Pendidikan.pptx
Keberagaman-Peserta-Didik-dalam-Psikologi-Pendidikan.pptx
 
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.
PUEBI.bahasa Indonesia/pedoman umum ejaan bahasa Indonesia pptx.
 
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptx
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptxTopik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptx
Topik 1 - Pengenalan Penghayatan Etika dan Peradaban Acuan Malaysia.pptx
 
KAMUS SOSIOLOGI LENGKAP.untuk sma umumdocx
KAMUS SOSIOLOGI LENGKAP.untuk sma umumdocxKAMUS SOSIOLOGI LENGKAP.untuk sma umumdocx
KAMUS SOSIOLOGI LENGKAP.untuk sma umumdocx
 
RENCANA + Link2 Materi Pelatihan/BimTek "Teknik Perhitungan & Verifikasi TKDN...
RENCANA + Link2 Materi Pelatihan/BimTek "Teknik Perhitungan & Verifikasi TKDN...RENCANA + Link2 Materi Pelatihan/BimTek "Teknik Perhitungan & Verifikasi TKDN...
RENCANA + Link2 Materi Pelatihan/BimTek "Teknik Perhitungan & Verifikasi TKDN...
 
KISI-KISI Soal PAS Geografi Kelas XII.docx
KISI-KISI Soal PAS Geografi Kelas XII.docxKISI-KISI Soal PAS Geografi Kelas XII.docx
KISI-KISI Soal PAS Geografi Kelas XII.docx
 
Teks ucapan Majlis Perpisahan Lambaian Kasih
Teks ucapan Majlis Perpisahan Lambaian KasihTeks ucapan Majlis Perpisahan Lambaian Kasih
Teks ucapan Majlis Perpisahan Lambaian Kasih
 
Aksi Nyata PERENCANAAN BERBASIS DATA.pptx
Aksi Nyata PERENCANAAN BERBASIS DATA.pptxAksi Nyata PERENCANAAN BERBASIS DATA.pptx
Aksi Nyata PERENCANAAN BERBASIS DATA.pptx
 
Sejarah Perkembangan Teori Manajemen.ppt
Sejarah Perkembangan Teori Manajemen.pptSejarah Perkembangan Teori Manajemen.ppt
Sejarah Perkembangan Teori Manajemen.ppt
 
LATIHAN SOAL geo ANALISA DATA PENDUDUK.doc
LATIHAN SOAL geo ANALISA DATA PENDUDUK.docLATIHAN SOAL geo ANALISA DATA PENDUDUK.doc
LATIHAN SOAL geo ANALISA DATA PENDUDUK.doc
 
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdf
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdfPPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdf
PPT IPS Geografi SMA Kelas X_Bab 5_Atmosfer.pptx_20240214_193530_0000.pdf
 
P_E_R_I_L_A_K_U__K_O_N_S_E_L_O_R__v.1.ppt
P_E_R_I_L_A_K_U__K_O_N_S_E_L_O_R__v.1.pptP_E_R_I_L_A_K_U__K_O_N_S_E_L_O_R__v.1.ppt
P_E_R_I_L_A_K_U__K_O_N_S_E_L_O_R__v.1.ppt
 
PPT TEKS TANGGAPAN KELAS 7 KURIKUKULM MERDEKA
PPT TEKS TANGGAPAN KELAS 7 KURIKUKULM MERDEKAPPT TEKS TANGGAPAN KELAS 7 KURIKUKULM MERDEKA
PPT TEKS TANGGAPAN KELAS 7 KURIKUKULM MERDEKA
 
Materi pembelajaran tentang MISIOLOGI.pptx
Materi pembelajaran tentang MISIOLOGI.pptxMateri pembelajaran tentang MISIOLOGI.pptx
Materi pembelajaran tentang MISIOLOGI.pptx
 
Teknik Menjawab Kertas P.Moral SPM 2024.pptx
Teknik Menjawab Kertas P.Moral SPM  2024.pptxTeknik Menjawab Kertas P.Moral SPM  2024.pptx
Teknik Menjawab Kertas P.Moral SPM 2024.pptx
 
materi pembelajaran tentang INTERNET.ppt
materi pembelajaran tentang INTERNET.pptmateri pembelajaran tentang INTERNET.ppt
materi pembelajaran tentang INTERNET.ppt
 
Catatan di setiap Indikator Fokus Perilaku
Catatan di setiap Indikator Fokus PerilakuCatatan di setiap Indikator Fokus Perilaku
Catatan di setiap Indikator Fokus Perilaku
 

Pcd 10

  • 1. 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
  • 2. 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 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 tersebut
  • 3. 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 Kegunaan Mobil, jalan, dan Acuan yang Segmentasi Mobil Citra Digunakan Pelacakan mobil latarbelakang Struktur warna Foto satelit Pengklasifikasian Kerumunan orang Tekstur dan area permukaan bumi Wajah orang warna Pengenalan wajah Warna, bentuk, di pasar Apel Gerakan dan dan tekstur Kumpulan apel Bentuk, warna, pada ban berjalan Segmentasi Pemilahan buah apel berdasarkan ukuran ukuran 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
  • 4. 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.
  • 5. 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 45o, cadar (c) untuk memperoleh garis tegak, dan cadar (d) untuk mendapatkan garis yang berorientasi -45o. −1 −1 −1 2 2 2 −1 −1 −1 −1 −1 2 −1 2 −1 2 −1 −1 (a) (b) −1 2 −1 −1 2 −1 −1 2 −1 (c) 2 −1 −1 −1 2 −1 −1 −1 2 (d) Gambar 10.4 Empat pasang cadar untuk mendeteksi keberadaan garis
  • 6. 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);
  • 7. 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:Imagejaring.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.
  • 8. 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.
  • 9. 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).
  • 10. 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. Turunan 𝑑𝑓 𝑑𝑥 𝑑𝑓 𝑑𝑦 ∇𝑓(𝑦, Tabel 10.2 Turunan orde pertama dan kedua pada bentuk kontinu dan diskret 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)] 𝑑𝑦 𝑑𝑥
  • 11. Segmentasi Citra Turunan 𝑑2 𝑓 𝑑𝑥 2 𝑑2 𝑓 𝑑𝑦 2 ∇2 𝑓(𝑦, 𝑥) 411 Bentuk kontinu Bentuk diskret 𝑑𝑓 𝑑𝑓 f(y,x+1)- 2f(y,x)+f(y,x-1) ( ) (𝑦, 𝑥 + ∆𝑥) ( ) 𝑓(𝑦, 𝑥) 𝑑𝑥 𝑑𝑥 lim ∆𝑥→0 ∆𝑥 𝑑𝑓 𝑑𝑓 f(y+1,x) -2f(y,x)+f(y-1,x) ( ) (𝑦 + ∆𝑦, 𝑥) ( ) 𝑓(𝑦, 𝑥) 𝑑𝑦 𝑑𝑦 lim ∆𝑥→0 ∆𝑦 2 f(y,x+1)+f(y,x-1) 𝑑 𝑓 𝑑2 𝑓 + 2 4f(y,x)+f(y+1,x)+f(y-1,x) 2 𝑑𝑥 𝑑𝑦 𝑓(𝑥) (a) Fungsi citra Nilai maksimum Batas (b) Deteksi tepi derivatif orde pertama 𝑑 𝑓(𝑥) 𝑑𝑥 a b Persilangan nol (zero-crossing) 𝑑2 𝑓(𝑥) 𝑑𝑥 2 (c) Deteksi tepi derivatif orde kedua Gambar 10.7 Deteksi tepi orde pertama dan orde kedua pada arah x
  • 12. 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.
  • 13. Segmentasi Citra 413 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 168 168 168 168 168 168 138 138 138 87 87 87 30 30 30 0 0 0 0 0 0 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)
  • 14. 414 Pengolahan Citra : Teori dan Aplikasi Besaran vektor dihitung menggunakan rumus 1/2 ∇𝑓 = 𝑚𝑎𝑔(∇f) = [𝐺 𝑥 2 + 𝐺 𝑦 2 ] 𝑑𝑓 𝑑𝑓 1/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 + 𝑑2 𝑓(𝑦,𝑥) 𝑑𝑦 2 (10.4) 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.
  • 15. 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
  • 16. 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:Imagemainan.png'));  G = roberts(Img);  imshow(G)  Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.9.
  • 17. 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 + (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)
  • 18. 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:Imagemainan.png')); 
  • 19. 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
  • 20. 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:Imagemainan.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).
  • 21. Segmentasi Citra x-1 421 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:Imagemainan.png')); 
  • 22. 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
  • 23. 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:Imagemainan.png'));  G = freichen(Img);  imshow(G)  Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.15.
  • 24. 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.
  • 25. Segmentasi Citra 425 (a) Operator Roberts (c) Operator Sobel (b) Operator Prewitt (d) Operator Frei-Chen Gambar 10.16 Perbedaan hasil deteksi tepi dengan menggunakan keempat macam operator (a) Hasil deteksi tepi dengan (a) Hasil deteksi tepi dengan operator Roberts operator Roberts (b) Hasil setelah peng-ambangan dengan nilai ambang 20 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.
  • 26. 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));
  • 27. Segmentasi Citra 427 end end G = uint8(G); Akhir Program Contoh penggunaan fungsi laplacian2: Img = rgb2gray(imread('C:Imagemainan.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
  • 28. 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 𝐿𝑜𝐺(𝑦, 𝑥) = − 1 *1 − 𝜋𝜍4 𝑥 2 +𝑦 2 2𝜍2 + 𝑒 −(𝑥2 +𝑦2 ) 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). 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: 𝐿𝑜𝐺(𝑦, 𝑥) = 1 𝑥 2 + 𝑦 2 −(𝑥 2 +𝑦 2 ) [1 − ] 𝑒 2𝜍2 𝜋𝜎 4 2𝜎 2
  • 29. 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:Imagemainan.png'));  H = [ 0 0 -1 0 0 0 -1 -2 -1 0 -1 -2 16 -2 -1 0 -1 -2 -1 0 0 0];  0 -1 0 G = deteksi(Img, H); imshow(G)  Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.22.
  • 30. 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
  • 31. Segmentasi Citra 431 nilai  1 𝜍2 * 𝑛𝑥 2 + 𝑛𝑦 2 𝜍2 − 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
  • 32. 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
  • 33. 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𝜎1 2𝜍1 2 − −(𝑥2 +𝑦2 ) 2 𝑒 2𝜎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).
  • 34. 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:Imagemainan.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.
  • 35. 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.
  • 36. 436 Pengolahan Citra : Teori dan Aplikasi 2 5 4 2 4 9 12 9 4 5 12 15 12 5 4 9 12 9 4 2 1 / 115 4 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  G y (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 0o, 45o, 90o, dan 135o.
  • 37. 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 ) (H ) 45 yi  f   wij x j      j  arah   90 y  f (T )  w (TH ) y ( H )    ij  j   135 i  j   (10.12) 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
  • 38. 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.
  • 39. Segmentasi Citra Arah tepi 0o: 439 i, j-1 i, j i, j+1 Arah tepi 45o: i-1, j+1 i, j if (Grad(i,j) = Grad(i,j+1)) || ... (Grad(i,j)= Grad(i,j-1)) Non_max(i,j) = 0; end Arah tepi 90o: i-1, j i+1, j-1 if (Grad(i,j) = Grad(i-1,j+1)) || ... (Grad(i,j) = Grad(i+1,j-1)) Non_max(i,j) = 0; end Arah tepi 135o: i-1, j-1 i, j i, j i, j+1 if (Grad(i,j) = Grad(i+1,j) ) || ... (Grad(i,j) = Grad(i-1,j)) Non_max(i,j) = 0; end i, j+1 if (Grad(i,j) = Grad(i+1,j+1)) || ... (Grad(i,j) = Grad(i-1,j-1)) Non_max(i,j) = 0; 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.
  • 40. 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);
  • 41. Segmentasi Citra 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 441
  • 42. 442 Pengolahan Citra : Teori dan Aplikasi 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 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 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 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) ...
  • 43. Segmentasi Citra 443 (Histeresis(i+1, j+1) == 255) Histeresis(i,j) = 255; ulang = true; % Ulang pengujian end end end end end % ----% ----for i = for 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 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:Imagelena256.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.
  • 44. 444 Pengolahan Citra : Teori dan Aplikasi (a) Citra lena256.tif (b) Efek Gaussian (d) Penghilangan non-maksimum (c) Besaran gradien (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 MarrHildreth sebenarnya adalah operator LoG yang dilengkapi dengan upaya untuk menemukan zero crossing. Zero-crossing menyatakan tanda perubahan pada tepitepi 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.
  • 45. 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
  • 46. 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 4 Bagian 2 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;
  • 47. 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 : 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; 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:Imagelena256.png');  G = zerocross(Img, 7,1); imshow(G) 
  • 48. 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:Imagebangunan2.png');  G = zerocross(Img,7,1); imshow(G)  Hasilnya ditunjukkan pada Gambar 10.33.
  • 49. 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 .
  • 50. 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 3-level 1 1 1 Timur H1 1 1 1 1 −2 1 −1 −1 −1 5 5 5 Timur Laut H2 1 1 1 −1 −2 1 −1 −1 −1 −3 5 5 −3 0 5 −3 −3 −3 0 1 1 −1 1 1 −3 −3 5 −3 0 5 −3 −3 5 1 1 1 0 0 0 −1 0 1 Utara H3 −1 1 1 −1 −2 1 −3 0 −3 −3 −3 −3 Barat Laut H4 −1 −1 1 −1 −2 1 1 1 1 −3 −3 −3 −3 0 5 −3 5 5 Barat H5 −1 −1 −1 1 −2 1 1 1 1 −3 −3 −3 −3 0 −3 5 5 −3 Barat Daya H6 1 −1 −1 1 −2 −1 1 1 1 −3 −3 −3 5 0 −3 5 5 −3 1 1 −1 5 −3 −3 5 0 −3 5 −3 −3 1 0 −1 1 1 1 5 5 −3 5 0 −3 −3 −3 −3 1 1 0 Selatan H7 Tenggara H8 1 1 −1 1 −1 −1 1 −2 −1 1 −2 −1 0 −1 −1 −1 −1 −1 −1 0 1 −1 0 1 1 −2 1 −1 −1 −1 Robinson 5-level 0 0 0 1 0 −1 1 0 −1 1 0 −1 1 2 1 −1 −1 0 −1 0 0 0 1 2 −2 0 2 −2 −1 0 1 1 1 −1 0 1 −1 −2 −1 1 1 0 0 −1 −2 1 0 −1 0 −1 −1 2 1 0 −1 −2 −1 −1 0 1 −1 0 1 −1 −1 −1 1 0 −1 0 0 0 0 0 0 1 0 −1 2 0 −2 1 0 −1 −2 −1 0 −1 0 −1 0 1 2 1 2 1 2 1 0 1 0 −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.
  • 51. 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];
  • 52. 452 Prewitt(:,:,1) Prewitt(:,:,2) Prewitt(:,:,3) Prewitt(:,:,4) Prewitt(:,:,5) Prewitt(:,:,6) Prewitt(:,:,7) Prewitt(:,:,8) Kirsch(:,:,1) Kirsch(:,:,2) Kirsch(:,:,3) Kirsch(:,:,4) Kirsch(:,:,5) Kirsch(:,:,6) Kirsch(:,:,7) Kirsch(:,:,8) Pengolahan Citra : Teori dan Aplikasi = = = = = = = = = = = = = = = = 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) + ... Opr(1,3,i) * F(y+1, x-1) + ...
  • 53. Segmentasi Citra 453 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, x+1) + ... F(y, x) + ... F(y, x-1) + ... F(y-1, x+1) + ... F(y-1, x) + ... 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:Imagemainan.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.
  • 54. 454 Pengolahan Citra : Teori dan Aplikasi (a) Prewitt (c) Robinson 3-level (b) Kirsch (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 pengambangan intensitas. Secara matematis, hal itu dinyatakan dengan 𝑏(𝑦, 𝑥) = 𝑓(𝑥) = { 1, 𝑢𝑛𝑡𝑢𝑘 (𝑦, 𝑥) ≥ 𝑇 0, 𝑢𝑛𝑡𝑢𝑘 (𝑦, 𝑥) 𝑇 (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:
  • 55. 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
  • 56. 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:Imageipomoea.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;
  • 57. 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 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 %
  • 58. 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:Imageipomoea.png');  t = titeratif(Img)  t = 130 G = ambang(Img, t);  imshow(1-G) 
  • 59. 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.
  • 60. 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). T1 Objek lingkaran 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 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
  • 61. Segmentasi Citra 461 nilai  1 𝜍2 * 𝑛𝑥 2 + 𝑛𝑦 2 𝜍2 − 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:Imagebenda.png');  G = arasjamak(Img, 50, 100); imshow(G); 
  • 62. 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 (c) Nilai ambang t1=175 dan t2=200 (e) Nilai ambang t1=235 dan t2=250 (b) Nilai ambang t1=50 dan t2=100 (d) Nilai ambang t1=220 dan t2=230 (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:Imageipomoea.png');  G = arasjamak(Img, 50, 100); imshow(G); 
  • 63. 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
  • 64. 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 . 𝑝(𝑖) 𝑊1 (𝑡) 𝐿 𝜎2 2 (𝑡) = ∑ 𝑖=𝑡+1(1 − 𝑚2 )2 . 𝑝(𝑖) 𝑊2 (𝑡) (10.19) (10.20) Varians total dapat dinyatakan dengan 𝜎 2 (𝑡) = 𝜎 𝑊 2 (𝑡) + 𝜎 𝐵 2 (𝑡) Dalam hal ini, (10.21) 𝜎 𝑊 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
  • 65. Segmentasi Citra 𝜎 𝐵 2 (𝑡) = 𝑊1 . [𝑚1 (𝑡) − 𝑚 𝑇 ]2 + 𝑊2 . [𝑚2 (𝑡) − 𝑚 𝑇 ]2 465 (10.23) 𝑁 Dalam hal ini, mT 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
  • 66. 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:Imageipomoea.png');  t = otsu(Img)  t = 130
  • 67. 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 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. 𝑇= ∑(𝑦,𝑥)∈𝑊 𝑓(𝑖,𝑗) 𝑁𝑤 − 𝐶 (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.
  • 68. 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); else G = ones(m, n); end % Diasumsikan berlatarbelakang 0 % Diasumsikan berlatarbelakang 1 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
  • 69. Segmentasi Citra 469 G(y, x) = 0; end end end Akhir Program Contoh penggunaan fungsi adapmeaan: Img = imread('C:Imageipomoea.png');  G = adapmean(Img, 3, -4); imshow(G)  Berbagai contoh pengaturan argumen kedua (w) dan argumen ketiga (c) ditunjukkan pada Gambar 10.43.
  • 70. 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)
  • 71. 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 for q=1 : w
  • 72. 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:Imageipomoea.png');  G = adapmedian(Img, 10, 5); imshow(G)  Efek berbagai pengaturan terhadap w dan c dapat dilihat pada Gambar 10.44.
  • 73. 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 𝑇= 𝑚𝑎𝑥(𝑓(𝑦,𝑥),(𝑦,𝑥)∈𝑊) + 𝑚𝑖𝑛(𝑓(𝑦,𝑥),(𝑦,𝑥)∈𝑊) 2 (10.26)
  • 74. 474 Pengolahan Citra : Teori dan Aplikasi 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; terkecil = 0.0; jum = w * w; pencacah = 0; for p=1 : w for q=1 : w pencacah = pencacah + 1;
  • 75. 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:Imageipomoea.png');  G = adapmaxmin(Img, 10, -30); imshow(G)  Gambar 10.45 memperlihatkan berbagai efek nilai w (ukuran jendela) dan c (konstanta pengurang).
  • 76. 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:Imagemaryamah.png');  G = adapmean(Img, 13, 15); imshow(G); 
  • 77. 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
  • 78. 478 Pengolahan Citra : Teori dan Aplikasi (a) Citra maryamah.png (a) Pengambangan aras-jamak dengan t1=140, t2=200 (b) Pengambangan aras-jamak 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:
  • 79. Segmentasi Citra 479 𝑡 𝐻 𝑏 (𝑡) = − ∑ 𝑖=0 𝑝(𝑖) 𝑃 𝑏 (𝑡) . ln 𝑝(𝑖) (10.28) 𝑃 𝑏 (𝑡) dan entropi objek adalah: 𝐿−1 𝐻 𝑜 (𝑡) = − ∑ 𝑖=𝑡+1 𝑝(𝑖) 𝑃 𝑜 (𝑡) . ln 𝑝(𝑖) (10.29) 𝑃 𝑜 (𝑡) Dalam hal ini, 𝑡 𝐿−1 𝑃 𝑏 (𝑡) = ∑ 𝑖=0 𝑝(𝑖) , 𝑃𝑜 (𝑡) = ∑ 𝑖=𝑡+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
  • 80. 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
  • 81. Segmentasi Citra 481 Akhir Program Contoh penggunaan fungsi kapur: Img = imread('C:Imageipomoea.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.
  • 82. 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 𝑝(𝑖) 𝑡 𝐻 𝑏 (𝑡) = 1−𝜌 𝑙𝑛 *∑ 𝑖=0 ( 𝑃 𝑏 𝜌 ) + (𝑡) (10.32)
  • 83. Segmentasi Citra 1 483 𝜌 𝑝(𝑖) ) + 𝑜 (𝑡) 𝐿−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)
  • 84. 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:Imageipomoea.png');  t = renyi(Img, 0.05); G = ambang(Img, t);  imshow(G)  Contoh hasil penerapan berbagai parameter  ditunjukkan pada Gambar 10.49.
  • 85. Segmentasi Citra 485 (a) Citra ipomoea.tif (c)  = 0,5 (b)  = 0,05 (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.
  • 86. 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;
  • 87. 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:Imagebangunan.png'); imshow(G)  Hasilnya dapat dilihat pada Gambar 10.50. Dua contoh lain hasil pemrosesan dengan segwarna dapat dilihat pada Gambar 10.51.
  • 88. 488 Pengolahan Citra : Teori dan Aplikasi Gambar 10.50 Hasil segmentasi warna terhadap citra bangunan.png
  • 89. Segmentasi Citra (a) Citra lapangan.png (c) Citra mainan.png (e) Citra inns.png 489 (b) Hasil segmentasi lapangan.png (d) Hasil segmentasi mainan.png (f) Hasil segmentasi inns.png Gambar 10.51 Contoh lain hasil segmentasi warna dengan segwarna
  • 90. 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:Imageficus.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
  • 91. 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:Imageficus.png'); [m,n,dim] = size(RGB); % Konversi ke citra berskala keabuan for baris=1 : m for kolom=1 : n r = RGB(baris,kolom,1);
  • 92. 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); % 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;
  • 93. 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 (d) Morfologi opening (c) citra biner (e) Hasil segmentasi Gambar 10.53 Urutan segmentasi daun melalui citra biner
  • 94. 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.
  • 95. 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.
  • 96. 496 Pengolahan Citra : Teori dan Aplikasi