PCD 10
PCD 10
Segmentasi
Citra
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.
Citra masukan
Segmentasi
Citra
Objek daun
Ekstraksi
Fitur
Fitur-fitur
pada daun
Pengklasifikasi
Jenis tanaman
−1 −1 −1 −1 −1 2 −1 2 −1 2 −1 −1
2 2 2 −1 2 −1 −1 2 −1 −1 2 −1
−1 −1 −1 2 −1 −1 −1 2 −1 −1 −1 2
Program : deteksi.m
if nargin < 3
potong = false;
end
if nargin < 4
pembulatan = true;
end
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);
F2=double(F);
Segmentasi Citra 407
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:
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
Gambar 10.6 Contoh hasil deteksi garis untuk empat arah yang berbeda
terhadap gambar pada Gambar 10.5(a)
Nilai maksimum
Batas
(b) Deteksi tepi
𝑑
𝑓(𝑥) derivatif orde pertama
𝑑𝑥
a b
Persilangan nol
(zero-crossing)
𝑑2
𝑓(𝑥) (c) Deteksi tepi
𝑑𝑥 2 derivatif orde kedua
Gambar 10.7 Deteksi tepi orde pertama dan orde kedua pada arah x
412 Pengolahan Citra : Teori dan Aplikasi
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
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:
𝑑𝑓
𝐺
𝒗𝒇 = [𝐺𝑥 ] = [𝑑𝑥
𝑑𝑓 ] (10.1)
𝑦
𝑑𝑦
414 Pengolahan Citra : Teori dan Aplikasi
1/2 𝑑𝑓 𝑑𝑓 1/2
∇𝑓 = 𝑚𝑎𝑔(∇f) = [𝐺𝑥 2 + 𝐺𝑦 2 ] = [(𝑑𝑥 )2 + (𝑑𝑦 )2 ] (10.2)
∇𝑓 ≈ 𝐺𝑥 2 + 𝐺𝑦 2 (10.3)
𝑑2 𝑓(𝑦,𝑥) 𝑑2 𝑓(𝑦,𝑥)
∇2 𝑓(𝑦, 𝑥 ) = + (10.4)
𝑑𝑥 2 𝑑𝑦2
Cadar yang digunakan pada deteksi tepi dalam buku ini telah
disesuaikan agar proses terhadap citra dapat dilakukan secara
korelasi (bukan konvolusi). Itulah sebabnya, ada kemungkinan
cadar yang digunakan pada buku ini berbeda dengan cadar di
literatur lain.
x x+1
y z1 z2 1 0 0 -1
y+1 z3 z4 0 -1 1 0
Gambar 10.8 Operator Roberts (b) dan (c) serta posisi pada citra f
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
[m, n] = size(F);
F=double(F);
for y=1 : m-1
for x=1 : n-1
G = uint8(G);
Akhir Program
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.9.
Segmentasi Citra 417
𝑟(𝑦, 𝑥 ) = sqrt((f(y-1,x-1)+f(y,x-1)+f(y+1,x-1) -
f(y-1,x+1)-f(y,x+1)-f(y+1,x+1))^2 + (10.6)
(f(y+1,x-1)+ f(y+1,x) + f(y+1,x+1) -
f(y-1,x-1) - f(y-1,x) - f(y-1,x+1))^2))
418 Pengolahan Citra : Teori dan Aplikasi
x-1 x x+1
y-1 z1 z2 z3 1 0 -1 -1 -1 -1
y z4 z5 z6 1 0 -1 0 0 0
y+1 z7 z8 z9 1 0 -1 1 1 1
Gambar 10.10 Operator Prewitt (b) dan (c) serta posisi pada citra f
Program : prewitt.m
[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
>> 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
Operator Sobel dapat dilihat pada Gambar 10.12. Operator Sobel lebih
sensitif terhadap tepi diagonal daripada tepi vertikal dan horizontal Hal ini
berbeda dengan operator Prewitt, yang lebih sensitif terhadap tepi vertikal dan
horizontal (Crane, 1997).
Segmentasi Citra 421
x-1 x x+1
y-1 z1 z2 z3 -1 0 1 1 2 1
y z4 z5 z6 -2 0 2 0 0 0
y+1 z7 z8 z9 -1 0 1 -1 -2 -1
Gambar 10.12 Operator Sobel (b) dan (c) serta posisi dalam citra f
Program : sobel.m
[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
>> G = sobel(Img);
>> imshow(G)
>>
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.13.
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
Gambar 10.14 Operator Frei-Chen (b) dan (c) serta posisi dalam citra f
Segmentasi Citra 423
Program : freichen.m
[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
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.15.
424 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
Program : laplacian2.m
[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
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.19.
Deteksi tepi orde kedua yang makin kurang sensitif terhadap derau adalah
Laplacian of Gaussian (LoG). Hal ini disebabkan penggunaan fungsi Gaussian
428 Pengolahan Citra : Teori dan Aplikasi
yang memuluskan citra dan berdampak pada pengurangan derau pada citra.
Akibatnya, operator mereduksi jumlah tepi yang salah terdeteksi (Crane, 1997).
Menurut Fisher, dkk. (2003), operator LoG diperoleh melalui konvolusi
dengan
−(𝑥 2+𝑦2 )
1 𝑥 2 +𝑦2
𝐿𝑜𝐺(𝑦, 𝑥 ) = − 𝜋𝜎4 [1 − ]𝑒 2𝜎2 (10.8)
2𝜎2
Fungsi di atas disebut sebagai filter topi Meksiko (the Mexican hat filter) karena
bentuknya seperti topi yang biasa dikenakan orang Meksiko (lihat Gambar 10.20).
Dalam hal ini, semakin besar nilai , semakin besar pula cadar yang diperlukan.
Contoh cadar berukuran 5 x 5 yang mewakili operator LoG ditunjukkan pada
Gambar 10.21 (Gonzalez & Woods, 2002).
2 2)
1 𝑥 2 + 𝑦2 −(𝑥 +𝑦
𝐿𝑜𝐺(𝑦, 𝑥 ) = 2 [ − 2] 𝑒 2𝜎2
𝜎 𝜎2
2 2)
1 𝑥 2 + 𝑦 2 −(𝑥 +𝑦
𝐿𝑜𝐺(𝑦, 𝑥 ) = [1 − ] 𝑒 2𝜎2
𝜋𝜎 4 2𝜎 2
Segmentasi Citra 429
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
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.22.
430 Pengolahan Citra : Teori dan Aplikasi
Nixon & Aguado (2002) memberikan cara yang dapat digunakan untuk
memperoleh cadar LoG berdasarkan nilai dan ukuran. Cara tersebut tertuang
dalam algoritma berikut.
Masukan:
Ukuran : ukuran cadar
: Deviasi standar
Keluaran:
h (M, N): Cadar LoG
cadarLoG(ukuran, ):
1. cx floor((ukuran-1) / 2)
2. cy cx
3. jum 0
4. FOR y 0 TO ukuran -1
FOR x 0 TO ukuran -1
nx x – cx
ny y – cy
Segmentasi Citra 431
−(𝑛𝑥 2 + 𝑛𝑦2 )
1 𝑛𝑥 2 + 𝑛𝑦2
nilai 𝜎2 [ − 2] 𝑒 2𝜎2
𝜎2
h(y+1, x+1) nilai
jum jum + nilai
END-FOR
END-FOR
5. // Lakukan normalisasi
FOR y 1 TO ukuran
FOR y 1 TO ukuran
h(y, x) h(y, x) / jum
END-FOR
END-FOR
6. RETURN h
Pada algoritma di atas, normalisasi dilakukan agar jumlah koefisien pada cadar
bernilai 1. Implementasi perolehan cadar LoG dapat dilihat pada cadarLoG.m.
Program : cadarLoG.m
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;
% Lakukan normalisasi
for y=1 : ukuran
432 Pengolahan Citra : Teori dan Aplikasi
Akhir Program
>>
>> cadarLoG(7, 1)
ans =
>>
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
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
Hasil deteksi tepi pada citra mainan.png dapat dilihat pada Gambar 10.24.
Segmentasi Citra 435
Operator Canny, yang dikemukakan oleh John Canny pada tahun 1986,
terkenal sebagai operator deteksi tepi yang optimal. Algoritma ini memberikan
tingkat kesalahan yang rendah, melokalisasi titik-titik tepi (jarak piksel-piksel tepi
yang ditemukan deteksi dan tepi yang sesungguhnya sangat pendek), dan hanya
memberikan satu tanggapan untuk satu tepi.
Terdapat enam langkah yang dilakukan untuk mengimplementasikan
deteksi tepi Canny (Green, 2002). Keenam langkah tersebut dijabarkan berikut
ini.
Langkah 1:
Pertama-tama dilakukan penapisan terhadap citra dengan tujuan untuk
menghilangkan derau. Hal ini dapat dilakukan dengan menggunakan filter
Gaussian dengan cadar sederhana. Cadar yang digunakan berukuran jauh lebih
kecil daripada ukuran citra. Contoh ditunjukkan pada Gambar 10.25.
436 Pengolahan Citra : Teori dan Aplikasi
2 4 5 4 2
4 9 12 9 4
1 / 115 5 12 15 12 5
4 9 12 9 4
2 4 5 4 2
Langkah 2:
Setelah penghalusan gambar terhadap derau dilakukan, dilakukan proses
untuk mendapatkan kekuatan tepi (edge strength). Hal ini dilakukan dengan
menggunakan operator Gaussian.
Selanjutnya, gradien citra dapat dihitung melalui rumus:
G Gx Gy (10.10)
Langkah 3:
Langkah ketiga berupa penghitungan arah tepi. Rumus yang digunakan
untuk keperluan ini:
Langkah 4:
Setelah arah tepi diperoleh, perlu menghubungkan antara arah tepi dengan
sebuah arah yang dapat dilacak dari citra. Sebagai contoh, terdapat susunan piksel
berukuran 5 x 5 seperti terlihat pada Gambar 10.26. Dengan melihat piksel “a”
tampak bahwa a hanya memiliki 4 arah berupa 0 o , 45o , 90o , dan 135o .
Segmentasi Citra 437
X X X X X
X X X X X
X X a X X
X X X X X
X X X X X
Gambar 10.26 Matriks piksel berukuran 5x5
Selanjutnya, arah tepi yang diperoleh akan dimasukkan ke dalam salah satu
kategori dari keempat arah tadi berdasarkan area yang tertera pada Gambar 10.27.
Berikut adalah aturan konversi yang berlaku:
0 (H) (HI)
45 yi f j wij xj
(H)
arah (10.12)
90 yi f (T) wij(TH) yj (H)
135 j
90o
135o 45o
Semua arah tepi yang berkisar antara 0 dan 22,5 serta 157,5 dan 180 derajat
(warna biru) diubah menjadi 0 derajat. Semua arah tepi yang berkisar antara 22,5
dan 67,5 derajat (warna kuning) diubah menjadi 45 derajat. Semua arah tepi yang
438 Pengolahan Citra : Teori dan Aplikasi
berkisar antara 67,5 dan 112,5 derajat (warna merah) diubah menjadi 90 derajat.
Semua arah tepi yang berkisar antara 112,5 dan 157,5 derajat (warna hijau) diubah
menjadi 135 derajat.
Langkah 5
Setelah arah tepi diperoleh, penghilangan non-maksimum dilaksanakan.
Penghilangan non-maksimum dilakukan di sepanjang tepi pada arah tepi dan
menghilangkan piksel-piksel (piksel diatur menjadi 0) yang tidak dianggap
sebagai tepi. Dengan cara seperti itu, diperoleh tepi yang tipis.
Langkah 6:
Langkah keenam berupa proses yang disebut hysteresis. Proses ini
menghilangkan garis-garis yang seperti terputus-putus pada tepi objek. Caranya
adalah dengan menggunakan dua ambang T1 dan T2 . Lalu, semua piksel citra
yang bernilai lebih besar daripada T1 dianggap sebagai piksel tepi. Selanjutnya,
semua piksel yang terhubung dengan piksel tersebut dan memiliki nilai lebih
besar dari T2 juga dianggap sebagai piksel tepi.
Bagian penting yang perlu dijelaskan adalah penghilangan non-maksimum
dan peng-ambangan histeresis. Penghilangan non-maksimum dilakukan dengan
mula-mula menyalin isi larik Grad (yang berisi besaran gradien) ke Non_max.
Selanjutnya, penghilangan non-maksimum dilaksanakan dengan memperhatikan
dua titik tetangga yang terletak pada arah tepi (yang tersimpan dalam Theta).
Misalnya, arah tepi adalah 0. Apabila titik yang menjadi perhatian mempunyai
koordinat (r, c), dua titik tetangga berupa (r, c-1) dan (r, c+1). Apabila gradien titik
perhatian lebih besar daripada gradien kedua tetangga, nilainya akan
dipertahankan. Sebaliknya, jika nilai titik perhatian lebih kecil daripada nilai salah
satu atau kedua gradien tetangga, nilainya akan diabaikan (diubah menjadi nol).
Seluruh kemungkinan proses seperti itu dijabarkan dalam Gambar 10.28.
Segmentasi Citra 439
i, j
i+1, j-1
if (Grad(i,j) <= Grad(i,j+1)) || ...
(Grad(i,j)<= Grad(i,j-1))
Non_max(i,j) = 0; if (Grad(i,j) <= Grad(i-1,j+1)) || ...
end (Grad(i,j) <= Grad(i+1,j-1))
Non_max(i,j) = 0;
end
i, j i, j
i, j+1 i, j+1
j-1 j j+1
i-1 255 255 255 255 255 255
Program : canny.m
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);
for i = 1 : m
for j = 1 : n
G(i, j) = round(G(i, j));
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;
elseif Theta(i,j) == 45
if (Grad(i,j) <= Grad(i-1,j+1)) || ...
(Grad(i,j) <= Grad(i+1,j-1))
Non_max(i,j) = 0;
end
elseif Theta(i,j) == 90
if (Grad(i,j) <= Grad(i+1,j) ) || ...
(Grad(i,j) <= Grad(i-1,j))
Non_max(i,j) = 0;
end
else
if (Grad(i,j) <= Grad(i+1,j+1)) || ...
(Grad(i,j) <= Grad(i-1,j-1))
Non_max(i,j) = 0;
end
end
end
end
% Pengambangan histeresis
ambang_bawah = ambang_bawah * max(max(Non_max));
ambang_atas = ambang_atas * max(max(Non_max));
Histeresis = Non_max;
% Buang tepi
for i = 1+h2 : r-h2
for j = 1+w2 : c-w2
K(i-1,j-1) = Histeresis(i,j);
end
end
Akhir Program
Contoh di atas menggunakan peng-ambangan berupa 0,05 untuk batas bawah dan
0,15 untuk batas atas. Hasilnya dapat dilihat pada Gambar 10.30.
444 Pengolahan Citra : Teori dan Aplikasi
Operator zero-crossing atau dikenal dengan nama lain yaitu operator Marr-
Hildreth sebenarnya adalah operator LoG yang dilengkapi dengan upaya untuk
menemukan zero crossing. Zero-crossing menyatakan tanda perubahan pada tepi-
tepi dalam citra. Sebagaimana telah dibahas di depan, zero-crossing merupakan
perpotongan dengan sumbu X pada turunan kedua (Gambar 10.7). Operasi inilah
yang membuat operator Marr-Hildreth mampu menghasilkan kurva yang tertutup,
yang tidak dapat dipenuhi oleh operator Canny.
Ada beberapa teknik yang dapat digunakan untuk melakukan pemrosesan
zero-crossing, misalnya seperti yang dibahas pada Crane (1997) atau pada Nixon
dan Aguido (2002). Algoritma yang didasarkan pada Nixon dan Aguido dapat
dilihat berikut ini.
Segmentasi Citra 445
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)
3. RETURN k
diperoleh. Piksel yang nilai terbesarnya melebihi nol dan nilai terkecilnya kurang
dari nol akan dijadikan sebagai tepi (diberi nilai 255).
Bagian 1 Bagian 3
Bagian 2 Bagian 4
Program : zerocross.m
H = cadarLoG(ukuran, sigma);
pembulatan = false;
potong = true;
G = deteksi(F, H, potong, pembulatan);
for p = x-1 : x
for q = y-1 : y
jum = jum + G(q,p);
end
end
rerata0 = jum / 4;
jum = 0;
for p = x-1 : x
for q = y : y+1
jum = jum + G(q,p);
end
end
rerata1 = jum / 4;
jum = 0;
for p = x : x+1
for q = y-1 : y
jum = jum + G(q,p);
end
end
rerata2 = jum / 4;
jum = 0;
for p = x : x+1
for q = y : y+1
jum = jum + G(q,p);
end
end
rerata3 = jum / 4;
return
Akhir Program
(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
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).
Timur 1 1 −1 5 −3 −3 1 0 −1 1 0 −1
H1 1 −2 −1 5 0 −3 1 0 −1 2 0 −2
1 1 −1 5 −3 −3 1 0 −1 1 0 −1
Timur Laut 1 −1 −1 −3 −3 −3 0 −1 −1 0 −1 −2
H2 1 −2 −1 5 0 −3 1 0 −1 1 0 −1
1 1 −1 5 5 −3 1 1 0 2 1 0
Utara −1 −1 −1 −3 −3 −3 −1 −1 −1 −1 −2 −1
H3 1 −2 1 −3 0 −3 0 0 0 0 0 0
1 1 1 5 5 5 1 1 0 1 2 −1
Barat Laut −1 −1 1 −3 −3 −3 1 1 −1 −2 −1 0
H4 −1 −2 1 −3 0 5 1 −2 −1 −1 0 1
1 1 1 −3 5 5 1 1 −1 0 1 2
Barat −1 1 1 −3 −3 5 −1 0 1 −1 0 1
H5 −1 −2 1 −3 0 5 −1 0 1 −2 0 2
−1 1 1 −3 −3 −3 −1 0 1 −1 0 1
Barat Daya 1 1 1 −3 5 5 0 1 1 0 1 2
H6 −1 −2 1 −3 0 5 −1 0 1 −1 0 1
−1 −1 1 −3 −3 −3 −1 −1 0 −2 −1 0
Selatan 1 1 1 5 5 5 1 1 1 1 2 1
H7 1 −2 1 −3 0 −3 0 0 0 0 0 0
−1 −1 −1 −3 −3 −3 −1 −1 −1 −1 −2 −1
Tenggara 1 1 1 5 5 −3 1 1 0 2 1 0
H8 −1 −2 1 5 0 −3 1 0 −1 1 0 −1
−1 −1 1 −3 −3 −3 0 −1 −1 0 −1 −2
Program : kompas.m
if nargin < 2
jenis = 1;
end
% Operator kompas
Prewitt1 = [1 1 -1;1 -2 -1;1 1 -1];
Prewitt2 = [1 -1 -1;1 -2 -1;1 1 -1];
Prewitt3 = [-1 -1 -1;1 -2 1;1 1 1];
Prewitt4 = [-1 -1 1;-1 -2 1;1 1 1];
Prewitt5 = [-1 1 1;-1 -2 1;-1 1 1];
Prewitt6 = [1 1 1;-1 -2 1;-1 -1 1];
Prewitt7 = [1 1 1;1 -2 1;-1 -1 -1];
Prewitt8 = [1 1 1;-1 -2 1;-1 -1 1];
Prewitt(:,:,1) = Prewitt1;
Prewitt(:,:,2) = Prewitt2;
Prewitt(:,:,3) = Prewitt3;
Prewitt(:,:,4) = Prewitt4;
Prewitt(:,:,5) = Prewitt5;
Prewitt(:,:,6) = Prewitt6;
Prewitt(:,:,7) = Prewitt7;
Prewitt(:,:,8) = Prewitt8;
Kirsch(:,:,1) = Kirsch1;
Kirsch(:,:,2) = Kirsch2;
Kirsch(:,:,3) = Kirsch3;
Kirsch(:,:,4) = Kirsch4;
Kirsch(:,:,5) = Kirsch5;
Kirsch(:,:,6) = Kirsch6;
Kirsch(:,:,7) = Kirsch7;
Kirsch(:,:,8) = Kirsch8;
Robinson3(:,:,1) = Robinson3_1;
Robinson3(:,:,2) = Robinson3_2;
Robinson3(:,:,3) = Robinson3_3;
Robinson3(:,:,4) = Robinson3_4;
Robinson3(:,:,5) = Robinson3_5;
Robinson3(:,:,6) = Robinson3_6;
Robinson3(:,:,7) = Robinson3_7;
Robinson3(:,:,8) = Robinson3_8;
Robinson5(:,:,1) = Robinson5_1;
Robinson5(:,:,2) = Robinson5_2;
Robinson5(:,:,3) = Robinson5_3;
Robinson5(:,:,4) = Robinson5_4;
Robinson5(:,:,5) = Robinson5_5;
Robinson5(:,:,6) = Robinson5_6;
Robinson5(:,:,7) = Robinson5_7;
Robinson5(:,:,8) = Robinson5_8;
maks = max(Grad);
G(y-1, x-1) = maks;
end
end
G = uint8(G);
Akhir Program
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
1, 𝑢𝑛𝑡𝑢𝑘 (𝑦, 𝑥) ≥ 𝑇
𝑏(𝑦, 𝑥 ) = 𝑓(𝑥 ) = { (10.13)
0, 𝑢𝑛𝑡𝑢𝑘 (𝑦, 𝑥) < 𝑇
Pada rumus di atas, T menyatakan ambang intensitas. Dalam praktik, nilai 1 atau 0
pada Persamaan 10.13 dapat dipertukarkan.
Peng-ambangan intensitas biasa digunakan untuk memisahkan tulisan
hitam yang berada di atas secarik kertas putih. Namun, perlu diketahui, peng-
ambangan ini mempunyai kelemahan, yaitu:
Segmentasi Citra 455
Program : ambang.m
[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
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.
Acharya & Ray, 2005). Algoritma untuk menentukan T secara iteratif adalah
seperti berikut.
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
Program : titeratif.m
[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
t0 = t1;
end
t1 = floor(t1);
Akhir Program
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.
Objek
lingkaran
T1 T2
Objek kotak
Masukan:
f (MxN): Citra berskala keabuan (berukuran MxN)
Keluaran:
g (M, N): Citra biner
ambang_aras_jamak(ukuran, ):
FOR y 1 TO ukuran -1
FOR x 1 TO ukuran -1
nx x – cx
ny y – cy
Segmentasi Citra 461
−(𝑛𝑥 2 + 𝑛𝑦2 )
1 𝑛𝑥 2 + 𝑛𝑦2
nilai 𝜎2 [ − 2] 𝑒 2𝜎2
𝜎2
h(y+1, x+1) nilai
jum jum + nilai
END-FOR
END-FOR
7. RETURN g
Program : arasjamak.m
[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
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).
(c) Nilai ambang t1=175 dan t2=200 (d) Nilai ambang t1=220 dan t2=230
(e) Nilai ambang t1=235 dan t2=250 (f) Nilai ambang t1=220 dan t2=250
Hasilnya dapat dilihat pada Gambar 10.41(b). Terlihat bahwa dengan cara seperti
itu, bayangan daun dapat dihilangkan.
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).
Kelas 1 Kelas 2
𝑛𝑖
𝑝 (𝑖 ) = , 𝑝(𝑖 ) ≥ 0, ∑256
1 𝑝( 𝑖 ) = 1 (10.14)
𝑁
Dalam hal ini, L menyatakan jumlah aras keabuan. Rerata kedua kelas dihitung
melalui:
𝑝 (𝑖)
𝜎1 2 (𝑡) = ∑𝑡𝑖=1(1 − 𝑚 1 )2 . (10.19)
𝑊1 (𝑡)
𝑝(𝑖)
𝜎2 2 (𝑡) = ∑𝐿𝑖=𝑡+1 (1 − 𝑚 2 )2 . (10.20)
𝑊2 (𝑡)
Rumus di atas menunjukkan bahwa WCV adalah jumlah varians kelas secara
individual yang telah diboboti dengan probabilitas kelas masing-masing. Adapun
BCV dinyatakan dengan
Segmentasi Citra 465
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
[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 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;
Akhir Program
Contoh:
Hasil dengan menggunakan pendekatan Otsu tidak berbeda dengan hasil yang
menggunakan peng-ambangan iteratif.
∑(𝑦,𝑥)∈𝑊 𝑓 ( 𝑖,𝑗)
𝑇= −𝐶 (10.24)
𝑁𝑤
Dalam hal ini, W menyatakan jendela pada citra, N W menyatakan jumlah piksel
dalam jendela, dan C menyatakan suatu konstanta.
Contoh fungsi yang menggunakan pendekatan rerata dapat dilihat berikut
ini.
468 Pengolahan Citra : Teori dan Aplikasi
Program : adapmean.m
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
delta = floor(w/2);
if c < 0
G = zeros(m, n); % Diasumsikan berlatarbelakang 0
else
G = ones(m, n); % Diasumsikan berlatarbelakang 1
end
F=double(F);
for y=1+delta : m-delta
for x=1+delta : n-delta
rerata = 0.0;
jum = w * w;
for p=1 : w
for q=1 : w
rerata = rerata + F(y-round(w/2)+p, ...
x-round(w/2)+q);
end
end
G(y, x) = 0;
end
end
end
Akhir Program
Berbagai contoh pengaturan argumen kedua (w) dan argumen ketiga (c)
ditunjukkan pada Gambar 10.43.
470 Pengolahan Citra : Teori dan Aplikasi
(c) w = 2, c = -2 (d) w = 3, c = -4
Dalam hal ini, W menyatakan jendela pada citra, N W menyatakan jumlah citra
dalam jendela, dan C menyatakan suatu nilai yang konstan. Implementasinya
dapat dilihat pada kode berikut.
Program : adapmedian.m
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
delta = floor(w/2);
if c < 0
G = zeros(m, n); % Diasumsikan berlatarbelakang 0
else
G = ones(m, n); % Diasumsikan berlatarbelakang 1
end
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;
Akhir Program
Efek berbagai pengaturan terhadap w dan c dapat dilihat pada Gambar 10.44.
Segmentasi Citra 473
Dalam hal ini, W menyatakan jendela pada citra, N W menyatakan jumlah piksel
dalam jendela. Implementasinya sebagai berikut.
Program : adapmaxmin.m
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
delta = floor(w/2);
if c < 0
G = zeros(m, n); % Diasumsikan berlatarbelakang 0
else
G = ones(m, n); % Diasumsikan berlatarbelakang 1
end
Akhir Program
>>
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.
(c) w = 3, c = 5 (d) w = 7, c = 10
𝑓𝑖
𝑝 (𝑖 ) = , ∑𝐿−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)
𝑏 (𝑡) 𝑏 (𝑡)
𝑝 𝑖 ( )𝑝 𝑖 ( )
𝐻𝑜 (𝑡) = − ∑𝐿−1
𝑖 =𝑡+1 𝑃 ( 𝑡) . ln 𝑃 ( 𝑡) (10.29)
𝑜 𝑜
(10.30)
𝑝( 𝑖 ) 𝑝( 𝑖 ) 𝑝 ( 𝑖) 𝑝 ( 𝑖)
(t) = − ∑𝑡𝑖=0 𝑃 𝑙𝑛 𝑃 − ∑𝐿−1
𝑖=𝑡+1 𝑃 𝑙𝑛 (10.31)
𝑏 ( 𝑡) 𝑏 ( 𝑡) (
𝑜 𝑡 ) 𝑃𝑜 ( 𝑡)
Program : kapur.m
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
1 𝑝(𝑖) 𝜌
𝐻𝑏 (𝑡) = 𝑙𝑛 [∑𝑡𝑖=0 (𝑃 ) ] (10.32)
1−𝜌 𝑏 (𝑡)
Segmentasi Citra 483
1 𝑝( 𝑖 ) 𝜌
𝐻𝑜 (𝑡) = 1−𝜌 𝑙𝑛 [∑𝐿−1
𝑖 =𝑡+1 (1−𝑃 ) ] (10.33)
𝑜 ( 𝑡)
Notasi yang digunakan pada Persamaan 10.32 dan 10.33 sama seperti rumus yang
digunakan pada entropi Kapur. Parameter berguna untuk memperoleh nilai
ambang terbaik.
Implementasi peng-ambangan yang didasarkan Renyi dapat dilihat di
bawah ini.
Program : renyi.m
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
Program : segwarna.m
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));
% 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
Akhir Program
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
Program : segdaun.m
close all;
berkas = 'C:\Image\ficus.png';
G = imread(berkas);
figure(1); imshow(G)
G = segwarna(berkas);
figure(2); imshow(G)
H = G;
[m, n, dim] = size(H);
for i=1: m
for j=1:n
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
Program : segdaun2.m
RGB = imread('C:\Image\ficus.png');
[m,n,dim] = size(RGB);
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);
B = uint8(B);
for kolom=1 : n
D(1,kolom) = 1;
D(m,kolom) = 1;
end
figure(3); imshow(D);
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
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
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