Anda di halaman 1dari 22

9.

1 Ekstraksi Fitur pada


Citra Biner
CAPAIAN PEMBELAJARAN
• Memahami Ekstraksi Fitur Citra Biner
– Perimeter
– Luas
– Diameter
– Fitur Dispersi
– Pelabelan
Perimeter
• Perimeter atau keliling menyatakan
panjang tepi suatu objek.

ALGORITMA 8.6 – Estimasi perimeter


Masukan:
 f (M,N): Citra masukan berukuran M baris dan N kolom Gambar 10 Perimeter dan luas daun
Keluaran: Program : perim1.m

 perimeter

function hasil = perim1(BW)


% PERIM1 Untuk menghitung perimeter suatu objek pada
1. Peroleh citra biner. % BW (citra biner)
% hasil menyatakan hasil perhitungan perimeter

2. Kenakan algoritma deteksi tepi. U = inbound_tracing(BW);


hasil = length(U) - 1;

3. Perimeter  jumlah piksel pada tepi objek hasil langkah 2.


Akhir Program
• Contoh pengujian fungsi perim1:
>> Img = imread('C:\Image\daun_bin.png');
>> perim1(Img)
• Apabila tepi objek diproses dengan
ans = 1409
menggunakan rantai kode (dibahas
>>
pada Subbab 8.4), perimeter dapat
diperkirakan dengan menggunakan
rumus:

𝑃 = 𝑁𝑒 + 𝑁𝑜 2 (8.2)

• dengan Ne menyatakan jumlah kode


genap dan No menyatakan jumlah
kode ganjil. Contoh berikut
menunjukkan penggunaan cara seperti
itu.

Gambar 11 Jarak antarpiksel pada 8-ketetanggaan


Luas
• Cara sederhana untuk menghitung Program : luas.m
luas suatu objek adalah dengan cara
menghitung jumlah piksel pada objek
tersebut. Algoritmanya sebagai
berikut. function hasil = luas(BW)
% LUAS Untuk menghitung luas citra BW (citra biner)

ALGORITMA 8.7 – Menghitung luas objek [tinggi, lebar] = size(BW);


Masukan:
hasil = 0;
 f (m,n): Citra masukan berukuran M baris dan N kolom for p = 1 : tinggi
Keluaran: for q = 1 : lebar
if BW(p, q) == 1
 luas
hasil = hasil + 1;
end
end
luas  0
end
FOR p = 1 to m
FOR j = 1 to n
Akhir Program
IF piksel(p, q) dalam objek
luas  luas + 1
END-IF
END-FOR Contoh implementasi algoritma
END-FOR
• Contoh:
>> D = [ 0 0 0 0 0 0
011110
001110
011100
Contoh Objek dengan rantai kode
001110 berupa 0770764554341234201
0 0 0 0 0 0 ];
>> luas(D)
ans = 13
>>
>> Daun = imread('c:\image\daun_bin.png');
>> luas(Daun)
ans = 31862
>>

• Pendekatan yang lain untuk menghitung luas suatu objek


dilakukan melalui kode rantai (Putra, 2010). Perhitungannya
sebagai berikut:

• Kode 0: Area = Area + Y


• Kode 1: Area = Area + (Y + 0.5)
• Kode 2: Area = Area + 0
• Kode 3: Area = Area – (Y + 0,5)
• Kode 4: Area = Area - Y
• Kode 5: Area = Area – (Y + 0,5)
• Kode 6: Area = Area + 0
• Kode 7: Area = Area + (Y + 0,5)
• Secara manual dapat dilihat bahwa
target yang dicari ada tiga buah. Untuk
menemukan posisinya, dapat
digunakan operasi erosi.
Penyelesaiannya seperti berikut:

>> H1 = [ 1 0 0 0
1001
1111
0001
0 0 0 1 ]; 
>> Citra = [ 0 0 0 0 0 1 0 0 0 0 0 0 0 0 Hasil erosi. Arsiran dimaksudkan untuk
00000100100000 menunjukkan letak target yang dicari
10010111101000
11110111101001
00010000101111
00010001100001
0 0 0 0 0 0 0 0 0 0 0 0 0 1 ]; 
>> G = erosi(Citra, H1) 
Tabel 3 Perhitungan luas objek Program : luas2.m
melalui rantai kode

function hasil = luas2(BW)


% LUAS2 Untuk menghitung luas citra BW (citra biner)
Kode pada Ordinat (Y) Luas % melalui kode rantai
Rantai Kode [tinggi, lebar] = size(BW);
0 8 8 U = inbound_tracing(BW);

7 8 7,5 kode_rantai = chain_code(U);


hasil = 0;
7 7 6,5 for p=1: length(kode_rantai)
0 6 6 kode = kode_rantai(p);
y = tinggi + 1 -U(p);
7 6 5,5
switch kode
6 5 0 case '0'
hasil = hasil + y;
4 4 -4 case '1'
hasil = hasil + y + 0.5;
5 4 -3,5 case '3'
5 3 -2,5 hasil = hasil - y - 0.5;
case '4'
4 2 -2 hasil = hasil - y;
case '5'
3 2 -2,5 hasil = hasil - y + 0.5;
case {'2','6'}
4 3 -2 hasil = hasil ;
1 3 -2,5 case '7'
hasil = hasil + y - 0.5;
2 4 0 end
end
3 5 -5,5
4 6 -6 Akhir Program
2 6 0
0 7 7
1 7 7,5

contoh skrip yang digunakan untuk


melakukan perhitungannya
Diameter
Diameter adalah jarak terpanjang antara dua titik
dalam tepi objek.
• Untuk menghitungnya dapat menggunakan Contoh implementasi algoritma
metode “Brute force” (Costa dan Cesar,
2001). Algoritmanya sebagai berikut. Program : peroleh_diameter.m

ALGORITMA 8.8 – Estimasi diameter bentuk


Masukan:
 f (m,n): Citra masukan berukuran m baris dan n kolom function [diameter, x1, y1, x2, y2] = peroleh_diameter(BW)
% PEROLEH_DIAMETER Digunakan untuk menghitung panjang objek
Keluaran: % pada citra BW (citra biner).
% Hasil:
 diameter % diameter : panjang objek
% x1, y1, x2, y2 : menyatakan dua titik yang
% mewakili panjang tersebut
1. U  tepi objek (misalnya melalui morfologi)
U = get_contour(BW);
2. c  jumlah elemen U n = length(U);
jarak_maks = 0;
3. jarak_maks  0 piksel1 = 0;
piksel2 = 0;
4. FOR p1 TO c-1 for p=1 : n-1
for q=p+1 : n
FOR qp+1 TO c jarak = sqrt((U(p,1)-U(q,1)) ^ 2 + (U(p,2)-U(q,2)) ^ 2);
if jarak > jarak_maks
IF | U(p) – U(q) | > jarak_maks jarak_maks = jarak;
piksel1 = p;
jarak_maks  | U(p) – U(q) | piksel2 = q;
end
piksel1  p end
end
piksel2  q
y1 = U(piksel1, 1);
END-IF x1 = U(piksel1, 2);
y2 = U(piksel2, 1);
END-FOR x2 = U(piksel2, 2);
END-FOR
diameter = jarak_maks;
5. diameter  jarak_maks

Akhir Program
Contoh penggunaan fungsi peroleh_diameter diberikan di bawah ini:

>> Daun = imread('c:\image\daun_bin.png'); 


>> [d,x1,y1,x2,y2] = peroleh_diameter(Daun); 
>> d
d = 515.1641

>> X = [x1,x2] 
X=

144 131

Gambar 13 Garis merah menyatakan diameter daun


>> Y = [y1,y2]; 
>> line(X,Y, 'Color','r') 
>>
Berdasarkan diameter yang telah dibahas, lebar objek dapat diperoleh.
Sebagai contoh, perhatikan Gambar 8. 14. Pada contoh tersebut, lebar adalah garis Persoalan berikutnya adalah mencari jarak terbesar antara dua piksel pada kontur
terpanjang yang menghubungkan dua piksel di tepi objek yang t egak lurus daun yang mempunyai gradien sama dengan grad2. Namun, dala m praktiknya
terhadap panjang maksimum pada objek. Setelah dua titik dengan jarak terpanjang
toleransi sebesar 10% perlu diberikan karena sangat sulit untuk mendapatkan garis
diperoleh, gradien garis yang melalui kedua piksel tersebut dihitung dengan
yang tepat sama dengan grad2, terutama kalau objek berukuran kecil.
menggunakan rumus:

(𝑦 −𝑦 )
𝑔𝑟𝑎𝑑1 = (𝑥2−𝑥1 ) (8.3)
2 1

Selanjutnya, garis yang tegak lurus dengan garis dengan gradien sebesar grad1
mempunyai gradien sebesar:

1
𝑔𝑟𝑎𝑑2 = − 𝑔𝑟𝑎𝑑 1 (8.4) Gambar 14 Panjang dan lebar objek
Fitur Menggunakan Perimeter,
Luas, dan Diameter
 Kebulatan bentuk adalah perbandingan antara luas objek dan kuadrat
perimeter, yang dinyatakan dengan rumus seperti berikut:

𝐴(𝑅)
𝑘𝑒𝑏𝑢𝑙𝑎𝑡𝑎𝑛 𝑅 = 4𝜋 (8.5)
𝑃 2 (𝑅)

 Fitur alternatif yang menggunakan perband ingan antara luas dan perimeter
dapat dilihat berikut ini (Rangayyan, 2005).

4𝜋𝐴
𝑐𝑓 = 1 − 𝑃2
(8.6) Gambar 16 Kebulatan bentuk membedakan bentuk daun
yang kurus dan yang gemuk
Berdasarkan rumus di atas, nilai kekompakan berkisar antara 0 sampai
dengan 1. Nilainya berupa nol kalau objek berbentuk lingkaran.

 Kerampingan bentuk adalah perbandingan antara lebar dengan panjang,


yang dinyatakan dengan rumus seperti berikut:

𝑙𝑒𝑏𝑎𝑟
𝑘𝑒𝑟𝑎𝑚𝑝𝑖𝑛𝑔𝑎𝑛 = 𝑝𝑎𝑛𝑗𝑎𝑛𝑔
(8.7)

dengan panjang adalah panjang objek dan lebar adalah lebar objek. Fitur ini
terkadang disebut sebagai rasio aspek (Wu, dkk., 2007). Dengan menggunakan
fitur ini, objek yang gemuk dan yang kurus d apat dibedakan Gambar 17 Kerampingan bentuk membedakan bentuk daun
yang kurus dan yang membulat
contoh fungsi yang digunakan memperoleh
kebulatan.
Program : peroleh_kebulatan.m
implementasi fungsi yang dipakai untuk menghitung
kerampingan objek.

Program : peroleh_kerampingan.m

function rasio = peroleh_kebulatan(BW)


% PEROLEH_KEBULATAN Untuk memperoleh rasio kebulatan milik objek
% yang terdapat pada citra biner BW
function rasio = peroleh_kerampingan(BW)
p = perim2(BW); % PEROLEH_KERAMPINGAN Untuk memperoleh rasio kerampingan
a = luas2(BW); % milik objek yang terdapat pada citra biner BW

rasio = 4 * pi * a / (p^2); [panjang, lebar] = peroleh_lebar(BW);

rasio = lebar / panjang;

Akhir Program
Akhir Program

Contoh penggunaan fungsi peroleh_kebulatan:


Contoh penggunaan fungsi peroleh_kerampingan:
>> Daun1 = imread('C:\Image\adv.png'); 
>> peroleh_kebulatan(Daun1)  >> Daun1 = imread('C:\Image\adv.png'); 
ans = 0.28708 >> peroleh_kerampingan(Daun1) 
ans = 0.14605
>> Daun2 = imread('C:\Image\aw.png');  >> Daun2 = imread('C:\Image\aw.png'); 
>> peroleh_kebulatan(Daun2)  >> peroleh_kerampingan(Daun2) 
ans = 0.76921
ans = 0.66130 >>
>>
Pusat Massa dan Fitur
Menggunakan Pusat Massa
• Pusat massa atau sentroid (centroid) Implementasi untuk memperoleh pusat massa.
lazim ditemukan dengan
menggunakan nilai rerata koordinat
Program : centroid.m
setiap piksel yang menyusun objek.
ALGORITMA 8.9 – Estimasi diameter bentuk

Masukan: function [pusat_x, pusat_y] = centroid(BW)


% CENTROID Untuk memperoleh pusat massa sebuah objek
 f (m,n): Citra masukan berukuran m baris dan n kolom % yang terletak pada citra biner BW

Keluaran: [tinggi, lebar] = size(BW);


 pusat_x dan pusat_y pusat_x = 0;
pusat_y = 0;
1. pusat_x  0 luas = 0;
for q = 1 : tinggi
2. pusat_y  0 for p = 1 : lebar
3. luas  0 if BW(q, p) == 1
luas = luas + 1;
4. FOR q = 1 to m pusat_x = pusat_x + p;
FOR p = 1 to n pusat_y = pusat_y + q;
IF F(q, p) = 1 end
end
luas  luas + 1 end
pusat_x  pusat_x + p
pusat_x = pusat_x / luas;
pusat_y  pusat_y + q pusat_y = pusat_y / luas;
END-IF
END-FOR
END-FOR Akhir Program

5. pusat_x  pusat_x / luas


6. pusat_y  pusat_y / luas
Contoh penggunaan fungsi centroid:

>> Daun = imread('C:\Image\daun_bin.png'); 


Pusat massa banyak digunakan untuk memperoleh fitur lebih lanjut. Beberapa
>> [x, y] = centroid(Daun); 
contoh dapat dilihat di bawah ini.
>> imshow(Daun); 
>> [panjang, lebar] = size(Daun); 
>> line([0 lebar], [round(y) round(y)],’Color’,’b’)   Pusat massa untuk memperoleh fitur dispersi (dibahas pada Subbab 8.12).
>> line([round(x) round(x)], [0 panjang],’Color’,’b’)   Menghitung jarak terpanjang antara pusat massa dan titik dalam kontur
>> (Dmax).
 Menghitung jarak terpendek antara pusat massa dan titik dalam kontur
(Dmin).
 Menghitung jarak rata -rata antara pusat massa dan titik dalam kontur
(Dmean).
 Histogram jarak antara pusat massa dan titik dalam kontur.
𝐷 𝐷 𝐷
 Perbandingan: 𝐷𝑚𝑎𝑥 , 𝐷 𝑚𝑎𝑥 , 𝐷 𝑚𝑖𝑛
𝑚𝑖𝑛 𝑚𝑒𝑎 𝑛 𝑚𝑒𝑎𝑛
Gambar 18 Contoh untuk menunjukkan centroid
Fitur Dispersi
Berdasarkan definisi Chen di tahun 1995 (Nixon dan Aguado, 2002), dispersi
(atau juga disebut ketidak teraturan) diukur sebagai perbandingan panjang chord
utama terhadap area objek. Bila dinyatakan dalam rumus berupa seperti berikut:

Gambar 19 Kekompakan objek pada berbagai bentuk π max ⁡( 𝑥 𝑖 −𝑥 2 + 𝑦 𝑖 −𝑦 2 )


𝐼𝑆 = (8.8)
A(S)

Contoh pemakaian fungsi dispersi:


dengan (𝑥,𝑦) adalah titik pusat massa area A(S) dan A(S) sendiri menyatakan luas
>> Daun1 = imread('C:\Image\adv.png'); 
>> Daun2 = imread('C:\Image\aw.png'); 
objek. Alternatif yang kedua, dispersi dinyatakan sebagai rasio radius maksimum
>> [d1, d2] = dispersi(Daun1) 
terhadap radius minimum, yang dinyatakan dengan rumus seperti berikut:
d1 = 0.78285
d2 = 7.7401
>> [d1, d2] = dispersi(Daun2) 
max ⁡( 𝑥 𝑖 −𝑥 2 + 𝑦 𝑖 −𝑦 2 )
d1 = 0.57999 𝐼𝑅 𝑆 = (8.9)
d2 = 1.7292 min ⁡( 𝑥 𝑖 −𝑥 2 + 𝑦 𝑖 −𝑦 2 )
>>
Pelabelan Objek
Gambar 20 Citra dengan enam objek

pada setiap objek. Pemrosesannya dapat dilaksanakan pada citra biner. Ketentuan
yang dilakukan sebagai berikut:

0 𝑝𝑖𝑘𝑠𝑒𝑙 𝑙𝑎𝑡𝑎𝑟𝑏𝑒𝑙𝑎𝑘𝑎𝑛𝑔
𝐵 𝑦,𝑥 = 1 𝑝𝑖𝑘𝑠𝑒𝑙 𝑙𝑎𝑡𝑎𝑟𝑑𝑒𝑝𝑎𝑛 (8.10)
2,3,… 𝑙𝑎𝑏𝑒𝑙 𝑜𝑏𝑗𝑒𝑘
Gambar 21 Pelabelan pada citra biner

Objek yang diberi label akan terlihat


jelas jika nilai nol dihilangkan.

Gambar 22 Objek-objek citra yang telah diberi label


• Cara yang umum digunakan untuk
melakukan pelabelan adalah melalui metode
pembanjiran (flood filling). Tiga cara untuk
melakukan pembanjiran dibahas oleh Algoritma Proses Pelabelan
Burger & Burge (2008), yaitu sebagai
berikut. ALGORITMA 8.10 – Melakukan pelabelan area pada citra
biner
Masukan:
• Pembanjiran secara rekursif: Pendekatan  f (M,N): Citra masukan berukuran M baris dan N kolom
ini dapat diterapkan dengan bahasa Keluaran:
pemrograman yang mendukung proses  g (M, N): Hasil citra yang telah diberi label
rekursif.
• Pembanjiran melalui Depth-first: Teknik 1. g  f
ini memerlukan struktur data tumpukan 2. label  2
untuk melaksanakan pembanjiran. 3. FOR baris  1 TO M
• Pembanjiran melalui Breadth-first: Teknik 4. FOR kolom  1 TO N
ini memerlukan struktur data antrian untuk 5. IF g(baris, kolom) = 1
melaksanakan pembanjiran. 6. banjiri(g, baris, kolom, label)
7. label  label + 1
8. END-IF
9. END-FOR
10. END-FOR
11. RETURN g
Pembanjiran secara rekursif Dengan
menggunakan pendekatan 4-ketetanggaan, Pembanjiran melalui depth-first (mendalam
dulu) memiliki algoritma seperti berikut .
ALGORITMA 8.11 – Pelabelan suatu area secara rekursif
ALGORITMA 8.12 – Pelabelan suatu area dengan pendekatan
mendalam dulu
banjiri(f, i, j, label):
Masukan: banjiri(f, i, j, label):
Masukan:
 f (M,N): Citra masukan berukuran M baris dan N kolom
 f (M,N): Citra masukan berukuran M baris dan N kolom
 i dan j menyatakan baris dan kolom sebagai biji pembanjiran  i dan j menya takan baris dan kolom sebagai biji pembanjiran
terhadap area terhadap area
 label menyatakan label untuk area
 label menyatakan label untuk area
Keluaran:
Keluaran:
 f (M, N): Hasil citra yang telah diberi label
 f (M, N): Hasil citra yang telah diberi label
1. Menciptakan tumpukan kosong T
2. Menaruh koordinat (i,j) ke tumpukan sebagai biji (push(T, (i,j))
1. IF koordinat (i, j) berada dalam citra dan f(i, j) = 1
3. WHILE tumpukan T tidak kosong
2. f(i, j)  label 4. Mengambil sebuah elemen dari tumpukan T ( (y,x)  pop(T))
3. banjiri( f, i-1, j, label) 5. IF koordinat (y, x) berada dalam citra dan f(i, j) = 1

4. banjiri( f, i+1, j, label) 6. f(y, x)  label


7. push(S, (y-1, x))
5. banjiri( f, i, j-1, label)
8. push(S, (y+1, x))
6. banjiri( f, i, j+1, label) 9. push(S, (y, x-1))
7. END-IF 10. push(S, (y, x+1))
11. END-IF
12. END-WHILE
Algoritma pembanjiran melalui breadth-
first (melebar dulu)
• Untuk mewujudkan Algoritma 8.13,
ALGORITMA 8.13 – Pelabelan suatu area dengan pendekatan melebar dibutuhkan struktur data bernama
dulu
antrean (queue). Di dalam struktur
banjiri(f, i, j, label): data antrean, insert berguna untuk
Masukan:
 f (M,N): Citra masukan berukuran M baris dan N kolom
memasukkan data ke dalam antrean,
 i dan j menyatakan baris dan kolom sebagai biji pembanjiran sedangkan remove digunakan untuk

terhadap area
label menyatakan label untuk area
mengambil data dari antrean.
Keluaran:
 f (M, N): Hasil citra yang telah diberi label

1. Menciptakan antrean kosong A


2. Menaruh koordinat (i,j) ke antrean sebagai biji (insert(A, (i,j))
3. WHILE antrean A tidak kosong Itulah sebabnya, disarankan untuk mempelajari algoritma yang
Mengambil sebuah elemen dari antrean A ( (y,x)  remove(A))
IF koordinat (y, x) berada dalam citra dan f(i, j) = 1 lain, untuk mendapatkan komputasi yang efisien. Sebagai contoh,
f(y, x)  label
pada Octave dan MATLAB terdapat fungsi bwlabel yang berguna
insert(A, (y-1, x))
insert(A, (y+1, x)) untuk melakukan pelabelan objek. Kode fungsi tersebut dapat
insert(A, (y, x-1))
insert(A, (y, x+1))
dipelajari untuk memungkinkan penulisan kode dengan bahasa
END-IF pemrograman yang lain.
END-WHILE
4. RETURN f(M,N)
Daftar Pustaka
• Kadir, Abdul, Susanto,A., “Pengolahan
Citra, Teori Dan Aplikasi”, Andi,
Yogyakarta, 2013.

Anda mungkin juga menyukai