BAB 12 Ekstraksi Fitur Bentuk dan Kontur Setekah bab ini berakhir, diharapkan pembaca mendapatkan berbagai bahasan yang berhubungan dengan pemerolehan fitur bentuk dan kontur serta mampu mempraktikkannya.
Ekstraksi fitur Tanda-tangan Kontur Deskriptor Fourier Sifat bundar Convex hull dan soliditas Momen spasial dan momen pusat Momen invariant Momen jarak ke pusat Momen Zernike Polar Fourier Transform Kotak pembatas
576
Pengolahan Citra Teori dan Aplikasi
12.1 Pengantar Ekstraksi Fitur Beberapa fitur berdasarkan bentuk dan kontur telah dibahas pada Bab 8. Sebagai contoh, fitur kekompakan diperoleh melalui perimeter dan luas objek. Beberapa fitur lain yang telah dikupas antara lain berupa dispersi dan kerampingan. Pada bab ini, beberapa fitur lain yang terkait dengan bentuk dan kontur akan dibahas. Fitur-fitur yang dimaksud antara lain tanda tangan kontur, deskriptor Fourier, dan momen Zernike. Namun, sebelum membahas fitur-fitur tersebut, dua pengertian dasar akan dibahas, yaitu bentuk, deskriptor dan fitur. Definisi bentuk menurut D.G. Kendall (Stegmann dan Gomez, 2002) adalah infomasi geometris yang tetap ketika efek lokasi, skala, pemutaran dilakukan terhadap sebuah objek (lihat Gambar 12.1). Deskriptor adalah seperangkat parameter yang mewakili karakteristik tertentu objek, yang dapat digunakan untuk menyatakan fitur objek. Adapun fitur dinyatakan dengan susunan bilangan yang dapat dipakai untuk mengidentifikasi objek.
Gambar 12.1 Objek yang sama melalui efek penyekalaan (b), translasi (c), dan pemutaran (d) Fitur-fitur suatu objek mempunyai peran yang penting untuk berbagai aplikasi berikut.
1. Pencarian citra: Fitur dipakai untuk mencari objek-objek tertentu yang berada di dalam database.
Pemerolehan Fitur Bentuk dan Kontur
577
2. Penyederhanaan dan hampiran bentuk: Bentuk objek dapat dinyatakan dengan representasi yang lebih ringkas. 3. Pengenalan dan klasifikasi: Sejumlah fitur dipakai untuk menentukan jenis objek. Sebagai contoh, fitur
citra daun digunakan untuk menentukan nama
tanaman.
Untuk kepentingan aplikasi yang telah disebutkan, fitur hendaknya efisien. Fitur yang efisien perlu memenuhi sifat-sifat penting berikut (Mingqiang, dkk., 2008).
1. Teridentifikasi: Fitur berupa nilai yang dapat digunakan untuk membedakan antara suatu objek dengan objek lain. Jika kedua fitur tersebut didampingkan, dapat ditemukan perbedaan yang hakiki. Hal ini sama seperti kalau dilakukan oleh manusia secara visual. 2. Tidak dipengaruhi oleh translasi, rotasi, dan penyekalaan: Dua objek yang sama tetapi berbeda dalam lokasi, arah pemutaran, dan ukuran tetap dideteksi sama. 3. Tidak bergantung pada affine: Pengertian affine telah dibahas pada Bab 5. Idealnya, efek affine tidak mempengaruhi fitur. 4. Tahan terhadap derau: Fitur mempunyai sifat yang andal terhadap derau atau cacat data. Sebagai contoh, daun yang sama tetapi salah satu sedikit robek tetap dikenali sebagai objek yang sama. 5. Tidak bergantung pada tumpang-tindih: Apabila objek sedikit tertutupi oleh objek lain, fitur bernilai sama dengan kalau objek itu terpisah. 6. Tidak bergantung secara statistis: Dua fitur harus tidak bergantung satu dengan yang lain secara statistik. 12.2 Tanda-Tangan Kontur Tanda-tangan kontur didefinisikan sebagai
𝑑 (𝑛) = √(𝑥 (𝑛) − 𝑥̅ )2 +(𝑦(𝑛) − 𝑦̅ )2
(12.1)
578
Pengolahan Citra Teori dan Aplikasi
Dalam hal ini, (𝑦̅, 𝑥̅) menyatakan pusat massa kontur, yang diperoleh melalui rumus 1
1
𝑦̅ = 𝑁 ∑𝑁 ̅ = 𝑁 ∑𝑁 𝑖 𝑦( 𝑖 ) , 𝑥 𝑖 𝑥(𝑖 )
(12.2)
dengan n=1,2,3,….,N. Ilustrasi tanda-tangan
kontur ditunjukkan pada Gambar
12.1.
d(1) d(n)
d(2) d(3) d(4) (𝑦̅, 𝑥̅ )
Gambar 12.2 Tanda-tangan kontur diperoleh dengan mula-mula menghitung jarak antara pusat massa dan beberapa titik pada kontur Contoh tanda-tangan empat
objek ditunjukkan pada Gambar 12.2.
Gambar 12.2(b) dan 12.2(d) menunjukkan bahwa translasi menghasilkan bentuk grafik tanda-tangan yang sama. Gambar 12.2(f) menunjukkan bahwa hasil rotasi membuat bentuk tanda tangan tergeser, sedangkan Gambar 12.2(h) menyatakan sedikit perbedaan pada objek membuat tanda tangan ikut berubah. Hal ini menunjukkan bahwa tanda-tangan kontur peka terhadap derau pada tepi objek.
Pemerolehan Fitur Bentuk dan Kontur
579
(a) Citra ikan-1.png
(b) Tanda-tangan ikan-1.png
(c) Citra ikan-2.png
(d) Tanda-tangan ikan-2.png
(e) Citra ikan-4.png
(f) Tanda-tangan ikan-4.png
(g) Citra ikan-5.png
(h) Tanda-tangan ikan-5.png
Gambar 12.3 Contoh tanda-tangan empat citra ikan
Dalam
praktik,
titik-titik
yang
digunakan
untuk
memperoleh
d(1)
dilakukan dengan memindai kontur dari arah kiri dan atas. Titik pada kontur yang ditemukan
pertama
kali
akan
dipakai
untuk
selengkapnya diperlihatkan pada algoritma berikut.
menghitung
d(1).
Langkah
580
Pengolahan Citra Teori dan Aplikasi
ALGORITMA 10.1 – Memperoleh tanda-tangan objek
Masukan:
f(M,N) : citra biner berukuran M x N
Keluaran:
jarak sebanyak piksel batas
tandatangan(BW): 1. batas inbound_tracing(f) 2. jum jumlah piksel batas 3. [xp, yp] pusat massa objek dalam f 4. FOR p 1 TO jum Jarak(p) jarak antara piksel batas (batas(p)) dan titik pusat massa END-FOR 5. RETURN jarak
Fungsi yang dapat digunakan untuk
memperoleh tanda-tangan dan
menampilkan hasilnya ditunjukkan berikut ini.
Program : tandatangan.m
function [Jarak] = tandatangan(BW) % TANDATANGAN Digunakan untuk memperoleh jarak-jarak antara % piksel dalam batas objek dri citra biner BW % Keluaran: Jarak - Berisi sejumlah pasangan Y, X % yang menyatakan jarak [m,n] = size(BW); Batas = double(inbound_tracing(BW)); [jum, z] = size(Batas); [pusat_x, pusat_y] = centroid(BW);
Pemerolehan Fitur Bentuk dan Kontur
581
Jarak = zeros(1,m); for p=1 : jum Jarak(p) = sqrt((Batas(p,1)-pusat_y)^2 + ... (Batas(p,2)-pusat_x)^2); end % Plot jarak X = 1: p; plot(X, Jarak);
Akhir Program
Contoh untuk memperoleh tanda-tangan objek yang terdapat pada ikan1.png : >> Img = im2bw(imread('C:\Image\ikan-1.png'), 0.5); >> X = tandatangan(Img); >>
Pada contoh di atas, im2bw dipakai untuk mengonversikan dari citra berskala keabuan ke citra biner. Terakhir, X akan berisi jarak setiap piksel pada kontur dari titik pusat massa. Perlu diketahui, tanda-tangan yang telah dibahas di depan mempunyai sifat yang hanya bebas dari translasi, tetapi tidak bebas dari rotasi ataupun penyekalaan. Agar fitur yang didapatkan bebas dari rotasi dan penyekalaan, perlu langkah lebih lanjut. Salah satu cara yang dapat dilakukan adalah dengan memanfaatkan deskriptor Fourier. 12.3 Deskriptor Fourier Deskriptor Fourier (Fourier Descriptor / FD) menjabarkan bentuk
biasa
dipakai
untuk
dalam dua dimensi dengan menggunakan transformasi
Fourier. Deskriptor ini pertama kali dibahas pada tahun 1960 oleh Cosgriff (Nixon dan Aguado, 2002). Dengan menggunakan deskriptor Fourier, suatu bentuk dapat dinyatakan dengan sejumlah bilangan (yaitu koefisien Fourier).
582
Pengolahan Citra Teori dan Aplikasi
Berbagai aplikasi telah menggunakan deskriptor Fourier, antara lain oleh Leon dan Sucar (2000) untuk mengenali bayangan manusia serta Zhang dan Lu (2003) yang menggunakannya untuk pencarian bentuk objek melalui beberapa jenis tanda tangan bentuk objek. Konsep dasar untuk mendapatkan deskriptor Fourier sangat sederhana. Pertama-tama, kontur objek perlu didapatkan terlebih dahulu. Hal ini dapat dilakukan dengan memanfaatkan fungsi inbound_tracing yang dibahas di Bab
8.
Selanjutnya,
piksel-piksel
di
kontur
tersebut
ditransformasikan
menggunakan FFT. Implementasinya ditunjukkan di bawah ini.
Program : perolehFD.m
function [F] = perolehFD(Kontur) % PEROLEHFD Memperoleh deskriptor Fourier berdasarkan % kontur suatu bentuk. % Masukan: Kontur = kontur objek % Keluaran: F = deskriptor Fourier jum = length(Kontur); % Atur supaya jumlah elemen genap if rem(jum, 2) == 1 Kontur = [Kontur; Kontur(1,:)]; end % Peroleh bentuk Fourier kontur K = Kontur(:, 2) - i * Kontur(:,1); F = fft(K);
Akhir Program
Dasar yang digunakan untuk
memperoleh koefisien Fourier adalah
transformasi Fourier berdimensi satu. Transformasi Fourier diskret berupa:
𝑢𝑜 =
1 𝑁
−𝑗2𝜋𝑛𝑡 ∑𝑁 ) , 𝑛 = 0,1,2, … , 𝑁 − 1 𝑡 =0 𝑠 ( 𝑡) . exp ( 𝑁
(12.3)
Pemerolehan Fitur Bentuk dan Kontur
583
Nah, un dengan n = 0,1,2,..,N-1 dinamakan deskriptor Fourier untuk bentuk. Dalam implementasi di depan,
transformasi Fourier
dilaksanakan dengan
menggunakan fungsi FFT yang disediakan di Octave dan MATLAB. Untuk mempraktikkan fungsi perolehFD, cobalah perintah berikut: >> Img = im2bw(imread('C:\Image\ikan-5.png'), 0.5); >> Kontur = inbound_tracing(Img); >> F = perolehFD(Kontur);
Dengan cara seperti itu, F berisi koefisien-koefisien Fourier (deskriptor Fourier). Jumlahnya tentu saja lebih kompak daripada ukuran citra ikan-5.png, karena hanya sebanyak piksel yang berada pada kontur objek. Hal ini ditunjukkan di bawah ini: >> length(F) ans = 544 >> >> [m,n]=size(Img); m * n ans = 62500 >>
Jumlah data pada citra sebanyak 62500 buah, sedangkan jumlah deskriptor Fourier hanya 544. Nilai 544 seperti itu pun masih dapat dikurangi. Hal ini akan dijelaskan belakangan. Koefisien-koefisien
yang
tercatat
dalam F
dapat
digunakan
untuk
membentuk kontur objek. Hal itu dapat ditangani oleh fungsi plotFD berikut.
Program : plotFD.m
function [] = plotFD(F) % PLOTFD Menampilkan kontur berdasarkan deskriptor Fourier. % Masukan: F = Deskriptor Fourier
584
Pengolahan Citra Teori dan Aplikasi
jum = length(F); if jum > 0 G = ifft(F); % Transformasi balik G = [G; G(1)]; % Tambahkan elemen pertama plot(G); axis off; end
Akhir Program
Contoh penggunaan plotFD dapat dilihat di bawah ini: >> plotFD(F)
Hasilnya ditunjukkan pada Gambar 12.4(b), yang menunjukkan kontur objek.
(a) Citra asli
(b) Hasil melalui deskriptor Fourier
Gambar 12.4 Gambar kontur melalui deskriptor Fourier
Dalam praktik, deskriptor sebanyak 544 pada contoh di depan terlalu banyak kalau dijadikan sebagai fitur objek. Oleh karena itu, jumlah fitur yang perlu dikurangi. Adapun cara yang digunakan untuk mereduksi deskriptor Fourier dapat dilihat berikut ini.
Program : fiturFourier.m
Pemerolehan Fitur Bentuk dan Kontur
585
function [G] = fiturFourier(F, n) % FITURFOURIER Memperoleh fitur Fourier sebanyak n buah. % Masukan: % F : Deskriptor Fourier yang lengkap % n : Jumlah fitur yang dikehendaki % Keluaran: % G : Deskriptor Fourier sebanyak n buah jum = length(F); if jum > n K1 = fftshift(F); delta = round((jum-n) / 2); K2 = K1(1 + delta : n+delta); G = ifftshift(K2); else G = F; end
Akhir Program
Kode di atas hanya akan mengubah deskriptor Fourier kalau jumlah elemen deskriptor semula melebihi
jumlah deskriptor yang diminta (n). Pertama-
tama, fungsi fftshift mengubah susunan F menjadi K seperti yang diperlihatkan pada Gambar 12.5. Selanjutnya, delta = round((jum-n) / 2); K2 = K1(1 + delta : n+delta);
digunakan untuk mengambil n elemen pada K1 dimulai dari 1 + delta hingga n + delta. Hasilnya disusun ulang melalui fungsi ifftshift. Dengan cara seperti itu, jumlah deskriptor yang semula sebanyak jum diturunkan menjadi n.
586
Pengolahan Citra Teori dan Aplikasi
K1 = fftshift(F) F
K1
a + ib
m + in
c + id
o + ip
e + if
q + ir
g + ih
s + it
m + in
a + ib
o + ip
c + id
q + ir
e + if
s + it
g + ih
n=4 delta = (8-4)/2 =2 1 + delta
n + delta
8 elemen a + ib
q + ir
c + id
s + it
q + ir
a + ib
s + it
c + id
G
K2 K1 = ifftshift(F)
Gambar 12.5 Mekanisme penurunan jumlah deskriptor Cara menggunakan fungsi fiturFourier dan hasil deskriptor yang didapatkan ditunjukkan di bawah ini: >> G = fiturFourier(F, 20); >> plotFD(G) >>
Contoh hasil pemilihan berbagai jumlah deskriptor Fourier ditunjukkan pada Gambar 12.6. Sebagai contoh, dengan menggunakan seluruh deskriptor (n = 544), citra yang dihasilkan adalah kontur objeknya (Gambar 12.6(b)). Manakala jumlah deskriptor diturunkan menjadi 100,
hasil kontur (Gambar 12.6(c)) masih
menyerupai kontur pada Gambar 12.6(a). Namun, gambar kontur akan terus menjauh dari bentuk aslinya kalau n terlalu kecil.
Pemerolehan Fitur Bentuk dan Kontur
(a) Citra ikan-5.png
(c) n = 100
587
(b) n = 544
(d) n = 50
(f) n = 25
(e) n = 20
(g) n = 15
(h) n = 10
Gambar 12.6 Jumlah deskriptor Fourier dan pengaruh bentuk yang dihasilkan
588
Pengolahan Citra Teori dan Aplikasi
Agar deskriptor Fourier mempunyai sifat yang bebas terhadap translasi, rotasi, penyekalaan, dan letak awal kontur, perlu dilakukan normalisasi. Pertamatama yang perlu diketahui, kecuali komponen DC (a 0 ), semua koefisien yang lain tidak dipengaruhi oleh translasi (Zhang, 2002). Oleh karena itu, komponen a0 dapat diabaikan. Agar bebas dari penyekalaan, semua koefisien perlu dibagi dengan a0 . Selanjutnya, berdasarkan kenyataan bahwa dalam kawasan frekuensi ternyata rotasi hanya akan menyebabkan perbedaan dalam fase, maka fase diabaikan dengan hanya menggunakan besaran koefisien. Kalau koefisien setelah pembagian dengan ao menjadi bn , |bn | akan menghasilkan besaran koefisien. Implementasinya Dapat dilihat pada fungsi normalisasiFD berikut.
Program : normalisasiFD.m
function [G] = normalisasiFD(F) % NORMALISASIFD Digunakan untuk melakukan normalisasi % agar FD bebas dari transalasi, rotasi, % penyekalaan, dan perubahaan titik awal. G = F; % Mengatur agar bebas terhadap penyekalaan m = abs(G(1)); % Ambil komponen kedua G = G ./ m; % Lakukan normalisasi % Mengatur agar bebas rotasi dan perubahan titik awal G = abs(G);
Akhir Program
Hasil
normalisasiFD
merekonstruksi kontur.
tidak
dapat
digunakan
untuk
Pemerolehan Fitur Bentuk dan Kontur
589
Untuk mengamati fitur yang dihasilkan dengan normalisasiFD, fungsi amatiFD berikut dapat digunakan.
Program : amatiFD.m
function [] = amatiFD(berkas) % AMATIFD Digunakan untuk mengamati deskriptor Fourier % yang telah dinormalisasi. Img = im2bw(imread(berkas),0.5); K = inbound_tracing(Img); F = perolehFD(K); G = fiturFourier(F,30); H = normalisasiFD(G); bar(H);
Akhir Program
Contoh penggunaan fungsi amatiFD: >> amatiFD('C:\Image\guppi-1.png'); Hasil pengamatan berbagai citra diperlihatkan pada Gambar 12.7. Diagram batang untuk ikan-1.png hingga ikan-5.png menunjukkan bahwa ada kemiripan pola, sedangkan diagram batang untuk guppy-1.png menunjukkan ada perbedaan dengan
kelompok
ikan-1.png
hingga
ikan-5.png.
Perlu
juga
diperhatikan,
koefisien paling kiri (a0 ) selalu bernilai 1 karena efek normalisasi. Itulah sebabnya, nilai ini dapat diabaikan dalam pembandingan dua objek.
590
Pengolahan Citra Teori dan Aplikasi
(d) FD ikan-2.png
(a) Citra ikan-1.png
(b) FD ikan-1.png
(c) Citra ikan-2.png
(e) Citra ikan-3.png
(f) FD ikan-3.png
(g) Citra ikan-4.png
(h) FD ikan-4.png
(k) Citra guppi-1.png
(l) FD guppi-1.png
(i) Citra ikan-5.png
(j) FD ikan-5.png
Gambar 12.7 Deskriptor Fourier yang telah dinormalisasi untuk berbagai bentuk 12.4 Sifat Bundar Sifat
bundar
(circularity)
adalah perbandingan antara rerata jarak
Euclidean dari sentroid terhadap tepi area dan deviasi standar jarak dari sentroid ke tepi area. Secara matematis, sifat bundar dinyatakan sebagai berikut: 𝜇
𝑐 = 𝜎𝑅
(12.4)
𝑅
Dalam hal ini, r berupa 1 𝜇𝑅 = 𝑁 ∑𝑁 ̅𝑐, 𝑥̅ 𝑐 )| 𝑖 =1|( 𝑦𝑖 , 𝑥 𝑖 ) − ( 𝑦
dan r berupa
(12.5)
Pemerolehan Fitur Bentuk dan Kontur
𝜎𝑅 =
1 𝑁
∑𝑁 ̅𝑐 , 𝑥̅ 𝑐 )| − 𝜇𝑅 ]2 𝑖 =1 [ |( 𝑦𝑖 , 𝑥 𝑖 ) − ( 𝑦
591
(12.6)
Contoh fungsi berikut dimaksudkan untuk memperoleh fitur sifat bundar. Fungsi memerlukan masukan berupa citra biner.
Program : sifatbundar.m
function [c] = sifatbundar(BW) % SIFATBUNDAR Digunakan untuk memperoleh fitur sifat bundar. % Masukan: BW adalah citra biner. [px, py] = centroid(BW); [m, n] = size(BW); Kontur = inbound_tracing(BW); % Hapus elemen terakhir Kontur(length(Kontur),:) = []; jum =length(Kontur); % Hitung mu total = 0; for i=1 : jum total = total + sqrt( (Kontur(i,1)-py)^2 + ... (Kontur(i,2)-px)^2); end mu = total / jum; % Hitung sigma total = 0; for i=1 : jum total = total + (sqrt( (Kontur(i,1)-py)^2 + ... (Kontur(i,2)-px)^2) - mu) ^ 2; end sigma = total / jum; c = mu / sigma;
Akhir Program
592
Pengolahan Citra Teori dan Aplikasi
Contoh pemakaian fungsi sifatbundar: >> Img = im2bw(imread('C:\Image\guppi-1.png'), 0.5); >> c = sifatbundar(Img) c =
0.10620
>>
Fungsi im2bw diperlukan jika citra tidak berupa citra biner. Tabel 12.1 memperlihatkan berbagai objek dan nilai sifat bundarnya.
Tabel 12.1 Sifat bundar berbagai objek Objek
Nilai Sifat Bundar 0,20595
ikan-1.png 0,20595 ikan-2.png 0,31363 ikan-3.png 0,21497 ikan-4.png 0,22230 ikan-5.png 0,10620 guppi-1.png 0,10110 kunci.png
Pemerolehan Fitur Bentuk dan Kontur
593
12.5 Convex Hull dan Soliditas Convex hull dengan menggunakan morfologi telah dibahas di Bab 7. Namun, hasilnya belum seperti yang diharapkan. Convex hull yang ideal adalah seperti karet gelang yang dipasang di tepi objek. Gambar menunjukkan bentuk konveks dan tidak konveks. Suatu himpunan S di dalam bidang dinamakan konveks jika di seluruh pasangan dua titik yang terkandung di dalamnya dibentuk oleh garis yang seluruhnya berada dalam S. Dengan demikian, Gambar 12.8(b) bukanlah bentuk konveks karena garis contoh menghasilkan titik di luar objek.
(a) Himpunan konveks
(b) Bukan Himpunan konveks
Gambar 12.8 Konveks dan bukan konveks
Salah satu algoritma yang digunakan untuk menangani perwujudan convex hull adalah ‘Graham Scan’. Algoritma ini sangat efisien untuk menangani convex hull baik untuk kurva tertutup ataupun piksel-piksel yang tersebar secara individual, berapa pun jumlahnya (Goodrich dan Tamassia, 2002). Kinerjanya sebesar O(n log n), dengan n adalah jumlah piksel yang akan dilingkupi oleh sabuk. Tabel 12.2 menunjukkan berbagai algoritma yang berhubungan dengan convex hull. Beberapa algoritma dibahas oleh O’Rourke (1995).
594
Pengolahan Citra Teori dan Aplikasi
Tabel 12.2 Berbagai algoritma convex hull Algoritma Brute Force Graham Scan Gift Wrapping QuickHull Divide-and-Conquer Monotone Chain Incremental Marriage-beforeConquest
Kinerja O(n4 ) dan O(n3 ) O(n log n) O(nh) O(nh) O(n log n) O(n log n) O(n log n) O(n log h)
Penemu Tidak diketahui Graham, 1972 Jarvis, 1973 Eddy, 1977 Preparata & Hong, 1977 Andrew, 1979 Kallay, 1984 Kirkpatrick & Seidel, 1986
Dasar untuk memperoleh convex hull pada algoritma Graham Scan dibagi menjadi tiga tahap.
1. Perolehan titik p0 di dalam himpunan P yang berisi kumpulan titik. Titik p0 ini biasa disebut sebagai titik jangkar atau pivot. Caranya adalah dengan mencari titik yang mempunyai nilai ordinat Y terkecil. seandainya terdapat beberapa nilai Y yang memenuhi hal itu, dicari nilai X yang paling kecil. 2. Penghitungan sudut semua titik di dalam P, selain p0 terhadap p0 . Kemudian, semua titik di dalam P selain p0 diurutkan secara radial berlawanan dengan arah jarum jam.
p0 (Titik jangkar)
Gambar 12.9 Penyiapan piksel di dalam convex hull secara radial berdasarkan titik jangkar
Pemerolehan Fitur Bentuk dan Kontur
595
3. Penyiapan sebuah tumpukan. Titik p0 dan titik pertama hasil pengurutan diletakkan ke dalam tumpukan H. Kemudian, setiap titik tersisa p i diproses dengan cara seperti berikut. (a) Jika pi membentuk putaran ke kiri terhadap dua titik yang berada di dalam tumpukan H, tambahkan pi ke H dan lanjutkan pemrosesan untuk titik berikutnya. (b) Untuk keadaan sebaliknya, ambil satu data dari tumpukan H.
Algoritma Graham Scan dapat dilihat berikut ini. ALGORITMA 12.1 – Algoritma ‘Graham Scan’ Masukan: P = n piksel Keluaran: Himpunan convex hull GrahamScan(BW): 1. P0 Titik jangkar 2. P P0 , P1 , P2 , P3 ,…,Pn-1 dengan P1 hingga Pn-1 telah diurutkan secara radial. Selanjutnya, P akan diindeks dari 1 sampai dengan n 3. H Stack kosong 4. Push(H, p0) 5. Push(H, p1) 6. i 2 7. WHILE i < n pa puncak H pb puncak H IF pi berputar ke kanan(Pa, Pb) Pop(H) ELSE Push(H, Pi) ii+1 END END 8. RETURN H
596
Pengolahan Citra Teori dan Aplikasi
Gambar 12.10 memperlihatkan contoh pembentukan convex hull dengan algoritma di atas. Gambar 12.10(a) menunjukkan keadaan awal ketika dua titik pertama diproses diletakkan ke dalam tumpukan. Gambar 12.10(b) menunjukkan ketika titik ketiga ditambahkan sebagai bagian dari convex hull. Hal ini terjadi karena titik ketiga mengalami putaran ke kiri terhadap titik terakhir yang berada di dalam tumpukan.
Gambar 12.10(d) menunjukkan hasil ketika titik kelima
diproses. Perhatikan bahwa terjadi putaran ke arah kanan. Oleh karena itu, titik di puncak tumpukan dikeluarkan dan digantikan dengan titik kelima tersebut. Gambar 12.10(f) menunjukkan keadaan akhir, yaitu setelah semua titik diproses. Dalam hal ini, titik terakhir tinggal dihubungkan ke titik jangkar.
(a)
(c)
(e)
(b)
(d)
(f)
Gambar 12.10 Ilustrasi pembentukan convex hull dengan menggunakan algoritma ‘Graham Scan’
Pemerolehan Fitur Bentuk dan Kontur
597
Dalam praktik, algoritma perlu dikembangkan lagi untuk mengantisipasi keadaan sejumlah titik yang mempunyai sudut sama tetapi memiliki panjang yang berbeda terhadap titik jangkar (Gambar 12.11(a)). Tujuannya adalah untuk mempercepat proses pemindaian saat membentuk convex hull. Dalam keadaan seperti itu, hanya titik dengan panjang yang terbesar yang dipertahankan. Implementasi pembentukan convex hull dengan memperhatikan hal seperti itu dapat dilihat pada fungsi convexhull.
Dua titik mempunyai sudut yang sama
Titik dengan jarak terpanjang dipertahankan
(a)
(b)
Gambar 12.11 Penghilangan titik-titik yang mempunyai sudut sama, dengan hanya mempertahankan satu saja yang terpanjang Program : convexhull.m
function [CH] = convexhull2(Kontur) % CONVEXHULL Digunakan untuk mendapatkan convex hull % dari suatu objek menggunakan metode 'Graham Scan'. % Masukan: Kontur = kontur objek, yamg berdimensi dua % dengan kolom pertama berisi data Y dan % kolom kedua berisi data X. % Keluaran: CH = Convex hull jum = length(Kontur); % Cari titik jangkar atau pivot terkecil = 1; for i=2 : jum if Kontur(i,1) == Kontur(terkecil, 1) if Kontur(i,2) < Kontur(terkecil, 2)
598
Pengolahan Citra Teori dan Aplikasi
terkecil = i; else if Kontur(i,1) < Kontur(terkecil, 1) terkecil = i; end end end end % Susun data dengan menyertakan sudut dan panjang, % kecuali titik dengan posisi = terkecil indeks = 0; for i=1 : jum if i == terkecil continue; end indeks = indeks + 1; Piksel(indeks).y = Kontur(i, 1); Piksel(indeks).x = Kontur(i, 2); Piksel(indeks).sudut = sudut(Kontur(terkecil,:), ... Kontur(i,:)); Piksel(indeks).jarak = jarak(Kontur(terkecil,:), ... Kontur(i,:)); end jum_piksel = indeks; % Lakukan pengurutan menurut sudut dan jarak for p = 2: jum_piksel x = Piksel(p); % Sisipkan x ke dalam data[1..p-1] q = p - 1; ketemu = 0; while ((q >= 1) && (~ketemu)) if x.sudut < Piksel(q).sudut Piksel(q+1) = Piksel(q); q = q - 1; else ketemu = 1; end Piksel(q+1) = x; end end % Kalau ada sejumlah piksel dengan nilai sudut sama % maka hanya yang jaraknya terbesar yang akan % dipertahankan Piksel = unik(Piksel); jum_piksel = length(Piksel); % Siapkan tumpukan H = []; top = 0; % Proses pemindaian
Pemerolehan Fitur Bentuk dan Kontur
% Mula-mula sisipkan dua titik top = top + 1; H(top).y = Kontur(terkecil, 1); H(top).x = Kontur(terkecil, 2); top = top + 1; H(top).y = Piksel(1).y; H(top).x = Piksel(1).x; i=2; while i <= jum_piksel titik.x = Piksel(i).x; titik.y = Piksel(i).y; % Ambil dua data pertama pada tumpukan H % tanpa membuangnya A.x = H(top).x; A.y = H(top).y; B.x = H(top-1).x; B.y = H(top-1).y; if berputar_ke_kanan(A, B, titik) % Pop data pada tumpukan H top = top - 1; else % Tumpuk titik ke tumpukan H top = top + 1; H(top).x = titik.x; H(top).y = titik.y; i=i+1; end end % Ambil data dari tumpukan H C = []; indeks = 0; while top ~= 0 indeks = indeks + 1; % Pop data dari tumpukan H C(indeks,2) = H(top).x; C(indeks,1) = H(top).y; top = top - 1; end % Balik urutannya for i=1 : indeks CH(indeks+1-i,1) = C(i,1); CH(indeks+1-i,2) = C(i,2); end function [s] = sudut(T1, T2) dy = T1(1,1)-T2(1,1); dx = T1(1,2)-T2(1,2); if dx == 0
599
600
Pengolahan Citra Teori dan Aplikasi
dx = 0.00000001; end s = atan(dy / dx); if s < 0 s = s + pi; end function [j] = jarak(T1, T2) j = (T1(1,1)-T2(1,1))^2 + (T1(1,2)-T2(1,2))^2; function [stat] = berputar_ke_kanan(p1, p2, p3) stat = ((p2.x - p1.x) * (p3.y - p1.y) - ... (p3.x - p1.x) * (p2.y - p1.y)) > 0; function [P] = unik(Piksel) jum = length(Piksel); sudut = -1; % Tandai jarak dengan -1 % kalau titik tidak terpakai for i=1 : jum if sudut ~= Piksel(i).sudut sudut = Piksel(i).sudut; jarak = Piksel(i).jarak; else if jarak < Piksel(i).jarak Piksel(i).jarak = -1; end end end indeks = 0; for i=1 : jum if Piksel(i).jarak ~= -1 indeks = indeks + 1; P(indeks) = Piksel(i); end end
Akhir Program
Kode penting yang perlu diperhatikan pada fungsi di atas adalaj pada fungsi berputar_ke_kanan. Fungsi itulah yang berperan untuk menentukan suatu titik berada di kiri atau di kanan suatu garis dan tentu saja dapat digunakan untuk menentukan arah putaran. Perhitungannya dilakukan melalui:
(p2.x - p1.x) * (p3.y - p1.y) - (p3.x - p1.x) * (p2.y - p1.y))
Pemerolehan Fitur Bentuk dan Kontur
601
Dalam hal ini, kemungkinan hasilnya ada tiga macam.
Kemungkinan 1: Hasil bernilai 0, yang menyatakan bahwa titik p3 terletak satu garis dengan garis yang dibentuk oleh p1 dan p2.
Kemungkinan 2: Hasil bernilai kurang dari 0, yang menyatakan bahwa titik p3 terletak di sebelah kanan garis yang dibentuk oleh p1 dan p2.
Kemungkinan 1: Hasil bernilai lebih dari 0, yang menyatakan bahwa titik p3 terletak di kiri garis yang dibentuk oleh p1 dan p2.
p1
p1
p3
p2 p2 (a) p3 di kiri garis. Dalam hal ini, p2 berputar ke kanan untuk menuju p3
p3 (b) p3 di kanan garis. Dalam hal ini, p2 berputar ke kiri untuk menuju p3
Gambar 12.12 Gambaran berputar ke kanan dan ke kiri
Selain itu, penanganan untuk menghapus titik yang terletak di sudut yang sama, yang diilustrasikan di depan, dilakukan oleh fungsi unik. Fungsi itulah yang menghasilkan satu titik dengan jarak terbesar sekiranya terdapat beberapa titik yang memiliki sudut yang sama. Contoh pengujian fungsi convexhull untuk membentuk convex hull pada sejumlah titik diperlihatkan di bawah ini: >> M = [1 1; 100 1; 100 100; 1 100; 1 10; 50 60; 34 40] M =
1
1
100
1
602
Pengolahan Citra Teori dan Aplikasi
100
100
1
100
1
10
50
60
34
40
>> H = convexhull(M) H = 1
1
1
100
100
100
100
1
>>
Hasil H menunjukkan bahwa semua titik pada M terlingkupi oleh sabuk yang ditentukan oleh titik-titik (1,1), (1, 100), (100, 100), dan (100, 1). Untuk mempermudah dalam mempraktikkan fungsi convexhull, fungsi bernama tesconvex dapat digunakan. Fungsi ini mengasumsikan bahwa citra yang
akan
diproses
memiliki
objek
yang
mudah
dibedakan
latarbelakangnya.
Program : tesconvex.m
function [] = tesconvex(berkas) % TESCONVEX Digunakan untuk membuat convex hull % pada objek. % Masukan: Nama berkas yang berisi objek biner. Img = im2bw(imread(berkas), 0.5e); Kontur = inbound_tracing(Img); K = convexhull(Kontur); X = K(:,2); Y = K(:,1); X = [X; X(1)]; % Tambahkan elemen pertama di akhir Y = [Y; Y(1)]; % Tambahkan elemen pertama di akhir imshow(1-Img); hold on; plot(X, Y, 'r');
dengan
Pemerolehan Fitur Bentuk dan Kontur
603
hold off;
Akhir Program
Contoh penggunaan fungsi tesconvex: >> tesconvex('C:\Image\guppi-1.png') Hasilnya ditunjukkan pada Gambar 12.13. Garis berwarna merah menyatakan convex hull.
Gambar 12.13 Ikan guppy dan convex hull
Terkait dengan convex hull, terdapat fitur bernama konveksitas dan soliditas (Russ, 2011). Definisinya sebagai berikut:
𝐾𝑜𝑛𝑣𝑒𝑘𝑠𝑖𝑡𝑎𝑠 = 𝑆𝑜𝑙𝑖𝑑𝑖𝑡𝑎𝑠 =
𝑝𝑒𝑟𝑖𝑚𝑒𝑡𝑒𝑟 𝑘𝑜𝑛𝑣𝑒𝑘𝑠 𝑝𝑒𝑟𝑖𝑚𝑒𝑡𝑒𝑟 𝑜𝑏𝑗𝑒𝑘
𝑙𝑢𝑎𝑠 𝑜𝑏𝑗𝑒𝑘 𝑙𝑢𝑎𝑠 𝑘𝑜𝑛𝑣𝑒𝑘𝑠
(12.7) (12.8)
Berikut adalah fungsi yang berguna untuk memperoleh konveksitas objek.
604
Pengolahan Citra Teori dan Aplikasi
Program : konveksitas.m
function [konv] = konveksitas(BW) % KONVEKSITAS Berguna untuk memperoleh konveksitas objek. % Masukan: BW = Citra biner yang berisi objek. % Keluaran: konv = nilai konveksitas Kontur = inbound_tracing(BW); CHull = convexhull(Kontur); X = CHull(:,2); Y = CHull(:,1); X = [X; X(1)]; Y = [Y; Y(1)]; perimeter_objek = perim2(BW); % Hitung perimeter konveks perimeter_konveks = 0; for i=2 : length(X) perimeter_konveks = perimeter_konveks + ... sqrt((X(i)-X(i-1))^2 + (Y(i)-Y(i-1))^2); end % Peroleh rasio konv = perimeter_konveks / perimeter_objek;
Akhir Program
Pada skrip di atas, perimeter objek dihitung dengan memanfaatkan fungsi perim2, yang telah dibahas di Bab 8. Perhitungan perimeter convex hull dilaksanakan dengan menjumlahkan jarak antardua titik. Contoh penggunaan fungsi konveksitas: >> Img2 = im2bw(imread('C:\Image\kunci.png'), 0.5); >> konveksitas(Img2) ans = 0.73520 >>
Fungsi berikut berguna untuk mendapatkan soliditas.
Pemerolehan Fitur Bentuk dan Kontur
605
Program : soliditas.m
function [sol] = soliditas(BW) % SOLIDITAS Berguna untuk memperoleh konveksitas objek. % Masukan: BW = Citra biner yang berisi objek. % Keluaran: konv = nilai soliditas Kontur = inbound_tracing(BW); CHull = convexhull(Kontur); X = CHull(:,2); Y = CHull(:,1); X = [X; X(1)]; Y = [Y; Y(1)]; % Hitung luas poligon yang dibentuk oleh convex hull sigmaA = 0; sigmaB = 0; for i=2 : length(X) sigmaA = sigmaA + Y(i)*X(i-1); sigmaB = sigmaB + X(i)*Y(i-1); end delta = sigmaA - sigmaB; luas_konveks = abs(delta / 2.0); luas_objek = luas2(BW); % Peroleh rasio sol = luas_objek / luas_konveks;
Akhir Program
Perhitungan luas objek dilakukan dengan memanfaatkan fungsi luas2, yang telah dibahas di Bab 8. Perhitungan luas daerah convex hull dilakukan dengan memanfaatkan piksel-piksel yang membentuk convex hull. Algoritmanya seperti berikut (http://www.wikihow.com/Calculate-the-Area-of-a-Polygon). ALGORITMA 12.1 – Menghitung luas poligon Masukan: P = Piksel-piksel yang menyusun poligon yang telah tersusun urut berlawanan arah jarum jam. Keluaran:
606
Pengolahan Citra Teori dan Aplikasi
Luas poligon
luasPoligon(P): 1. Tambahkan elemen pertama sebagai elemen terakhir pada P. 2. Lakukan penjumlahan terhadap semua perkalian antara nilai X dengan nilai Y milik piksel berikutnya. Hasilnya berupa sigmaA. 3. Lakukan penjumlahan terhadap semua perkalian antara nilai Y dengan nilai X milik piksel berikutnya. Hasilnya berupa sigmaB. 4. delta sigmaA – sigmaB 5. luas = |delta/2| 6. RETURN luas
Ilustrasi perkalian untuk mendapatkan sigmaA dan sigmaB ditunjukkan pada Gambar 12.14. (X, Y)
(a, b) (c, d) (e, f) (g, h) (a, b)
S a m a
(X, Y)
(X, Y)
(a, b)
(a, b)
(c, d)
(c, d)
(e, f)
(e, f)
(g, h)
(g, h)
(a, b)
(a, b)
sigma A = a x d + c x f + sigma B = b x c + d x e + exh+gxb fxg+hxa sigma A = a x d + c x f + exh+gxb
Luas = |(sigma A – sigma B)/2|
Gambar 12.14 Ilustrasi perkalian untuk mendapatkan sigma A dan sigma B Contoh penggunaan fungsi soliditas: >> Img2 = im2bw(imread('c:\Image\guppi-1.png'), 0.5);
Pemerolehan Fitur Bentuk dan Kontur
607
>> soliditas(Img2) ans = 0.79644 >>
Contoh penerapan fitur konveksitas dan soliditas pada sejumlah objek dapat dilihat pada Tabel 12.3.
Tabel 12.3 Fitur yang memanfaatkan convex hull Objek ikan-1.png
Konveksitas
Soliditas
0.8930
0.8577
0.8930
0.8577
0.8925
0.8546
0.8840
0.8582
0.8276
0.8514
0.7876
0.7964
0.7352
0.7147
ikan-2.png
ikan-3.png
ikan-4.png
ikan-5.png
guppi-1.png
kunci.png
608
Pengolahan Citra Teori dan Aplikasi
12.6 Proyeksi Proyeksi citra adalah bentuk satu dimensi
isi citra yang dihitung
berdasarkan sumbu koordinat. Definisinya sebagai berikut: 𝑃ℎ𝑜𝑟 (𝑏) = ∑𝑁 𝑗=1 𝐼(𝑏, 𝑘𝑗 )
(12.9)
𝑃𝑣𝑒𝑟 (𝑘) = ∑𝑀 𝑗=1 𝐼(𝑏𝑘 , 𝑘)
(12.10)
Dalam hal ini, M adalah tinggi citra dan N adalah lebar citra. Definisi di atas menyatakan bahwa proyeksi horizontal P hor(b) adalah jumlah nilai piksel pada baris b citra, sedangkan Pver(k) adalah jumlah nilai piksel pada kolom k citra. Contoh fungsi untuk menangani proyeksi dapat dilihat di bawah ini. Program : proyeksi.m
function [ProyHor, ProyVer]= proyeksi(F) % PROYEKSI Memperoleh proyeksi vertikal dan horizontal. % Masukan: F = Citra berskala keabuan % Keluaran: ProyHor = Proyeksi horizontal % ProyVer = Proyeksi vertikal [m, n] = size(F); ProyHor = zeros(m,1); ProyVer = zeros(n,1); for y=1 : m for x=1 : n ProyHor(y) = ProyHor(y) + F(y,x); ProyVer(x) = ProyVer(x) + F(y,x); end end
Akhir Program
Contoh penggunaan fungsi proyeksi: >> Img2 = im2bw(imread('c:\Image\abjad.png'), 0.5); >> [V, H] = proyeksi(Img2);
Pemerolehan Fitur Bentuk dan Kontur
609
>>
Untuk mengamati V dan H, perintah bar dapat digunakan, misalnya bar(H). Gambar 12.15 menunjukkan hasil penyajian proyeksi vertikal dan horizontal.
Proyeksi horizontal
Proyeksi vertikal
Gambar 12.15 Visualisasi proyeksi horizontal dan vertikal
Proyeksi biasa digunakan untuk identifikasi tulisan. Tammami, dkk. (2011) memanfaatkan proyeksi vertikal bersama sejumlah fitur lain untuk mengenali tulisan Arab. Pada Gambar 12.15, terlihat bahwa proyeksi horizontal dapat digunakan untuk mengidentifikasi baris tulisan. Jeda yang panjang menunjukkan pergantian baris (lihat Gambar 12.15). Burger dan Burke (2008) mengemukakan bahwa untuk mengantisipasi tulisan yang bersumbu miring, proyeksi dapat dilakukan melalui sumbu utama. Bahkan, dengan menggunakan sentroid sebagai referensi, dimungkinkan untuk menghasilkan vektor yang tidak bergantung pada rotasi.
610
Pengolahan Citra Teori dan Aplikasi
12.7 Momen Spasial dan Momen Pusat Momen spasial orde (m,n) didefinisikan sebagai berikut: 𝑁 𝑖 𝑗 𝑀𝑖𝑗 = ∑𝑀 𝑥 =1 ∑𝑦=1 𝑥 𝑦 𝐼(𝑥, 𝑦)
(12.11)
Dalam hal ini, a)
i, j = 0, 1, 2, …, dengan i j menyatakan orde momen;
b)
M menyatakan jumlah kolom pada citra;
c)
N menyatakan jumlah baris pada citra;
d)
x adalah ordinat piksel;
e)
y adalah absis piksel;
f)
I(x,y) menyatakan intensitas piksel pada posisi (x,y).
Adapun momen pusat adalah momen spasial yang dihitung relatif terhadap pusat massa. Jika pusat massa adalah (𝑦̅, 𝑥̅ ), momen pusat ditulis seperti berikut: 𝑁 𝑖 𝜇𝑖𝑗 = ∑𝑀 ̅)𝑗 𝐼(𝑥, 𝑦) 𝑥=1 ∑𝑦=1( 𝑥 − 𝑥̅ ) ( 𝑦 − 𝑦
(12.12)
Momen di atas bersifat invariant (tidak terpengaruh) terhadap translasi. Dalam hal ini, 𝑥̅ dan 𝑦̅ diperoleh melalui: 𝑥̅ =
𝑀10 𝑀00
, 𝑦̅ =
𝑀01
(12.13)
𝑀00
Agar momen pusat bersifat bebas terhadap translasi, penyekalaan, dan rotasi, maka momen perlu dinormalisasi. Momen pusat ternormalisasi berupa: 𝜇
ŋ𝑖𝑗 = 𝜇𝛾𝑝𝑞 , 𝛾 = 00
𝑖 +𝑗+2 2
(12.14)
Implementasi moment pusat yang ternormalisasi, moment pusat, dan momen spasial dapat dilihat pada fungsi normomen, momen_pusat, dan momen_spasial berikut.
Pemerolehan Fitur Bentuk dan Kontur
Program : normomen.m
function [hasil] = normomen(F, p, q) % NORMOMEN Menghitung moment pusat ternormalisasi. % Masukan: F = Citra biner. % p dan q = orde momen. F = double(F); m00 = momen_spasial(F, 0, 0); normalisasi = m00 ^ ((p+q+2)/2.0); hasil = momen_pusat(F, p, q) / normalisasi;
Akhir Program
Program : momen_pusat.m
function [hasil] = momen_pusat(F, p, q) % MOMEN_PUSAT Menghitung momen pusat berorde p, q [m, n] = size(F); m00 = momen_spasial(F, 0, 0); xc = momen_spasial(F, 1, 0) / m00; yc = momen_spasial(F, 0, 1) / m00; mpq = 0; for y=1 : m for x=1 : n if F(y,x) ~= 0 mpq = mpq + (x-xc)^p * (y-yc)^q; end end end hasil = mpq;
Akhir Program
611
612
Pengolahan Citra Teori dan Aplikasi
Program : momen_spasial.m
function [hasil] = momen_spasial(F, p, q) % MOMEN_SPASIAL Menghitung momen spasial berorde (p,q). [m, n] = size(F); momenPQ = 0; for y=1 : m for x=1 : n if F(y,x) ~= 0 momenPQ = momenPQ + x^p * y^q; end end end hasil = momenPQ;
Akhir Program
Contoh pemakaian fungsi normomen: >> Img = im2bw(imread('C:\Image\ikan-1.png'), 0.5); >> normomen(Img, 1, 0) ans = -5.9340e-016 >>
Contoh di atas digunakan untuk memperoleh ŋ10 (momen pusat ternormalisasi orde
(1,0)).
Adapun
momen
pusat ternormalisasi untuk
beberapa objek
ditunjukkan pada Tabel 12.4.
Tabel 12.4 Fitur yang memanfaatkan momen pusat ternormalisasi Objek
Fitur ŋ11 = -0.0024 ŋ02 = 0.04578 ŋ20 = 0.1606
ikan-1.png
ŋ03 =-5.6067e-4 ŋ30 = 0.0132 ŋ12 = -8.7615e-4 ŋ21 = 0.0024
Pemerolehan Fitur Bentuk dan Kontur
613
ŋ11 = -0.0024 ŋ02 = 0.0458 ŋ20 = 0.1606
ŋ03 = -5.6067e-4 ŋ30 = 0.0132 ŋ12 = -8.7615e-4 ŋ21 = 0.0024
ŋ11 = -0.0025 ŋ02 = 0.0456 ŋ20 = 0.1612
ŋ03 = -5.4819e-4 ŋ30 = 0.0132 ŋ12 = -8.8123e-4 ŋ21 = 0.0024
ŋ11 = 0.0529 ŋ02 = 0.0811 ŋ20 = 0.1251
ŋ03 = 0.0031 ŋ30 = 0.0038 ŋ12 = 0.0051 ŋ21 = 0.0054
ŋ11 = -0.0021 ŋ02 = 0.0463 ŋ20 = 0.1596
ŋ03 = -5.0026e-4 ŋ30 = 0.0135 ŋ12 = -0.0010 ŋ21 = 0.0023
ŋ11 = 0.0370 ŋ02 = 0.0706 ŋ20 = 0.1671
ŋ03 = 0.0104 ŋ30 = -0.0449 ŋ12 = 0.0080 ŋ21 = -0.0109
ŋ11 = -0.0032 ŋ02 = 0.2029 ŋ20 = 0.0796
ŋ03 = -0.0268 ŋ30 = -0.0016 ŋ12 = 0.0012 ŋ21 = 0.0221
ikan-2.png
ikan-3.png
ikan-4.png
ikan-5.png
guppi-1.png
kunci.png
Hasil di Tabel 12.4 menunjukkan bahwa momen pusat ternormalisasi memberikan hasil yang berbeda saat ikan diputar (ikan-4.png). Namun, translasi ataupun pengecilan menghasilkan nilai yang hampir sama. Untuk objek yang berbeda, terdapat perbedaan yang cukup nyata. 12.8 Momen Invariant Fitur momen invariant bermanfaat untuk menyatakan objek dengan memperhitungkan area objek. Fitur ini menggunakan dasar momen pusat yang ternormalisasi.
Momen
yang
dihasilkan
dapat
digunakan
untuk
menangani
translasi, penyekalaan, dan rotasi gambar. Penciptanya, Hu (Theodoridis dan Koutroumbas, 2006), menciptakan tujuh momen invariant seperti berikut. ∅1 = ŋ20 + ŋ02 ∅2 = (ŋ20 − ŋ02 )2 + (2ŋ02 )2
614
Pengolahan Citra Teori dan Aplikasi
∅3 = (ŋ30 − 3ŋ12 )2 + (ŋ03 − 3ŋ21 )2
(12.15)
∅4 = (ŋ30 + ŋ12 )2 + (ŋ03 + ŋ21 )2 ∅5 = (ŋ30 − 3ŋ12 )(ŋ30 + ŋ12 )[(ŋ30 + ŋ12 )2 − 3(ŋ21 + ŋ03 )2 ] + (ŋ03 − 3ŋ12 )(ŋ03 + ŋ21 )[(ŋ03 + ŋ12 )2 − 3(ŋ12 + ŋ30 )2 ] ∅6 = (ŋ20 − ŋ02 )[(ŋ30 + ŋ12 )2 − (ŋ21 + ŋ03 )2 ] + 4ŋ11 (ŋ30 + ŋ12 )(ŋ03 + ŋ21 ) ∅7 = (3ŋ21 − ŋ03 )(ŋ30 + ŋ12 )[(ŋ30 + ŋ12 )2 − 3(ŋ21 + ŋ03 )2 ] (ŋ30 − 3ŋ12 )(ŋ21 + ŋ03 )[(ŋ03 + ŋ21 )2 − 3(ŋ30 + ŋ12 )2 ]
Implementasi untuk menghitung ketujuh momen Hu ditunjukkan di bawah ini.
Program : momenhu.m
function [Momen] = momenhu(F) % MOMENHU Menghitung momen HU. % Masukan: F = citra berskala keabuan % Keluaran: Momen = 7 momen Hu norm_20 norm_02 norm_11 norm_30 norm_12 norm_21 norm_03
= = = = = = =
normomen(F, normomen(F, normomen(F, normomen(F, normomen(F, normomen(F, normomen(F,
2, 0, 1, 3, 1, 2, 0,
0); 2); 1); 0); 2); 1); 3);
Momen.m1 = norm_20 + norm_02; Momen.m2 = (norm_20 - norm_02)^2 + 4 * norm_11^2; Momen.m3 = (norm_30 + 3 * norm_12)^2 + ... (3 * norm_21 - norm_03)^2; Momen.m4 = (norm_30 + norm_12)^2 + (norm_21 + norm_03)^2;
Pemerolehan Fitur Bentuk dan Kontur
Momen.m5 = (norm_30 - 3 * norm_12) * ... (norm_30 + norm_12) * ... ((norm_30 + norm_12)^2 - 3 * ... (norm_21 + norm_03)^2) + ... (3 * norm_21 - norm_03) * (norm_21 + norm_03) * ... (3 * (norm_30 + norm_12)^2 -(norm_21 + norm_03)^2); Momen.m6 = (norm_20 - norm_02) * ... ((norm_30 + norm_12)^2 - ... (norm_21 + norm_03)^2) + ... 4 * norm_11 * (norm_30 + norm_12) * ... (norm_21 + norm_03); Momen.m7 = (3 * norm_21 + norm_30) * ... (norm_30 + norm_12) * ... ((norm_30 + norm_12)^2 - 3 * ... (norm_21 + norm_03)^2) + ... (norm_30 - 3 * norm_12) * ... (norm_21 + norm_03) * ... (3 * (norm_30 + norm_12)^2 - (norm_21 + norm_03)^2);
Akhir Program
Contoh penggunaan fungsi momenhu: >> format('long'); >> Img = im2bw(imread('C:\Image\guppi-1.png'),0.5); >> X = momenhu(Img) X = scalar structure containing the fields:
m1 =
0.237749187513244
m2 =
0.0147674602596600
m3 =
0.00229069589208390
m4 =
0.00135857111738100
m5 = 3.52803525223293e-006 m6 = 1.33488327285475e-004 m7 = 4.00783048172902e-006 >>
615
616
Pengolahan Citra Teori dan Aplikasi
Contoh hasil perhitungan ketujuh momen Hu untuk sejumlah objek dapat dilihat di Tabel 12.5. Di tabel tersebut terlihat bahwa penyekalaan, transalasi, dan rotasi pada ikan menghasilkan nilai-nilai yang hampir sama.
Tabel 12.5 Fitur yang memanfaatkan momen Hu Objek ∅1 = 0.206371 ∅2 = 0.013207 ∅3 = 0.000172 ∅4 = 0.000155
Fitur ∅5 = 0.000000034 ∅6 = 0.000016756 ∅7 = 0.000000049
ikan-1.png ∅1 = 0.206370 ∅2 = 0.013207 ∅3 = 0.000172 ∅4 = 0.000155
∅5 = 0.000000034 ∅6 = 0.000016756 ∅7 = 0.000000049
∅1 = 0.206774 ∅2 = 0.013390 ∅3 = 0.000173 ∅4 = 0.000156
∅5 = 0.000000035 ∅6 = 0.000017012 ∅7 = 0.000000050
∅1 = 0.2062254 ∅2 = 0.0131368 ∅3 = 0.0005498 ∅4 = 0.0001549
∅5 = 0.000000034 ∅6 = 0.000016712 ∅7 = 0.000000042
∅1 = 0.2058433 ∅2 = 0.0128627 ∅3 = 0.0001610 ∅4 = 0.0001575
∅5 = 0.000000036 ∅6 = 0.000016946 ∅7 = 0.000000050
∅1 = 0.2377492 ∅2 = 0.0147675 ∅3 = 0.0022907 ∅4 = 0.0013586
∅5 = 0.000003528 ∅6 = 0.000133488 ∅7 = 0.000004008
∅1 = 0.2824261 ∅2 = 0.0152452 ∅3 = 0.0086765 ∅4 = 0.0000221
∅5 = 0.000000009 ∅6 = 0.000002673 ∅7 = 0.000000001
ikan-2.png
ikan-3.png
ikan-4.png
ikan-5.png
guppi-1.png
kunci.png
12.9 Momen Jarak ke Pusat Apabila objek berupa kontur saja (misalnya berupa bentuk suatu pulau), momen dapat dihitung melalui jarak titik pada kontur terhadap pusat massa (Rangayyan, 2005). Dalam hal ini, momen ke-p untuk sederet jarak d(n) didefinisikan sebagai berikut:
Pemerolehan Fitur Bentuk dan Kontur
𝑚𝑝 =
1
𝑝 ∑𝑁 𝑖 =1 |𝑑(𝑛) |
𝑁
617
(12.16)
Momen pusat ke-p didefinisikan sebagai berikut: 𝑀𝑝 =
1 𝑁
𝑝 ∑𝑁 𝑖 =1 |𝑑(𝑛) − 𝑚 1 ) |
(12.17)
Selanjutnya, momen-momen yang ternormalisasi didefinisikan sebagai 𝑚 ̅̅̅̅𝑝 = ̅̅̅̅ 𝑀𝑝 =
𝑚𝑝
(12.18)
( 𝑀2 ) 𝑝/2 𝑀𝑝
(12.19)
( 𝑀2 ) 𝑝/2
Menurut Gupta dan Srinath (Rangayyan, 2005), momen ternormalisasi 𝑚 𝑝 dan 𝑚 𝑝 bersifat bebas terhadap penyekalaan, rotasi, maupun translasi. Namun, mengingat momen berorde tinggi peka terhadap derau, mereka menganjurkan tiga fitur yang didefinisikan seperti berikut: 1
𝐹1 = 𝐹2 =
√ 𝑀2 𝑚1 𝑀3
=
|𝑑(𝑛)−𝑚1 ) |2 √ ∑𝑁 𝑁 𝑖=1
3 =
(𝑀2 ) 2 𝑀
𝐹3 = (𝑀 4)2 = 2
1 𝑁 ∑ 𝑑(𝑛) 𝑁 𝑖=1
(12.20)
1 𝑁 ∑ |𝑑(𝑛)−𝑚1 ) |3 𝑁 𝑖=1 3/2 1 { ∑𝑁 |𝑑(𝑛)−𝑚1 ) |2 } 𝑁 𝑖=1
(12.21)
1 𝑁 ∑ |𝑑(𝑛)−𝑚1 ) |4 𝑁 𝑖=1 2 1 { ∑𝑁 |𝑑(𝑛)−𝑚1 ) |2 } 𝑁 𝑖=1
(12.22)
Menurut Rangayyan (2005), studi yang dilakukan oleh Shen, dkk. menunjukkan bahwa F2 dan F3 tidak menunjukkan perbedaan yang signifikan untuk bentuk yang berbeda dan F 2 ternyata berubah secara nyata terhadap penyekalaan dan rotasi. Oleh karena itu, mereka melakukan modifikasi terhadap F2 dan F3 sebagai berikut: ′
𝐹2 =
′
𝐹3 =
=
3 1 𝑁 √ ∑𝑖=1 |𝑑(𝑛)−𝑚1 ) |3 𝑁 1 𝑁 ∑ 𝑑(𝑛) 𝑁 𝑖=1
(12.23)
=
4 1 𝑁 √ ∑𝑖=1 |𝑑(𝑛)−𝑚1 ) |4 𝑁 1 𝑁 ∑ 𝑑(𝑛) 𝑁 𝑖=1
(12.24)
3
√𝑀3 𝑚1
4
√𝑀4 𝑚1
Fakta yang menarik, kumpulan fitur {F 1 , F2 ’, F3 ’} mempunyai sifat-sifat seperti berikut (Rangayyan, 2005).
618
Pengolahan Citra Teori dan Aplikasi
Semua fitur dapat diperbandingkan secara langsung. F3 ’ menyatakan kekasaran kontur yang lebih baik daripada F 3 . Semakin besar nilai, semakin besar kekasaran kontur. Temuan yang juga menarik, menurut Rangayyan, kombinasi mf = F 3 ’ – F1 merupakan indikator yang bagus untuk mengungkapkan kekasaran bentuk. Fungsi
mjarakpusat
berikut
merupakan
implementasi
menghitung fitur-fitur yang telah dijelaskan di atas.
Program : mjarakpusat.m
function [Fitur] = mjarakpusat(F) % FJARAKPUSAT Menghitung fitur momen jarak ke pusat. % Masukan: F = Citra biner. % p = Orde momen % Keluaran: Fitur = fitur citra Fitur.F1 = sqrt(momen_pusat_ke_p(F, 2)) / momen_ke_p(F, 1); Fitur.F2 = momen_pusat_ke_p(F, 3) / (momen_ke_p(F, 2)^1.5); Fitur.F3 = momen_pusat_ke_p(F, 4) / (momen_ke_p(F, 2)^2); Fitur.F2a = momen_pusat_ke_p(F, 3)^(1/3) / momen_ke_p(F, 1); Fitur.F3a = momen_pusat_ke_p(F, 4)^(1/4) / momen_ke_p(F, 1); Fitur.mf = Fitur.F3a - Fitur.F1; function [momen] = momen_pusat_ke_p(F, p) momen_p = momen_ke_p(F, p); momen_1 = momen_ke_p(F, 1); Kontur = inbound_tracing(F); [m, n] = size(F); [xp, yp] = centroid(F); jum = length(Kontur); % Hitung momen pusat ke-p momen = 0; for i=1 : jum jarak = sqrt((Kontur(i,2)-xp)^2 + (Kontur(i,1)-yp)^2); momen = momen + abs(jarak - momen_1) ^ p; end momen = momen / jum;
untuk
Pemerolehan Fitur Bentuk dan Kontur
619
function [momen] = momen_ke_p(F, p) % Hitung momen ke-p Kontur = inbound_tracing(F); [m, n] = size(F); [xp, yp] = centroid(F); jum = length(Kontur); momen = 0; for i=1 : jum jarak = sqrt((Kontur(i,2)-xp)^2 + (Kontur(i,1)-yp)^2); momen = momen + jarak ^ p; end momen = momen / jum;
Akhir Program
Contoh penggunaan fungsi mjarakpusat: >> Img = im2bw(imread('C:\Image\kunci.png'), 0.5); >> mjarakpusat(Img) ans =
scalar structure containing the fields: F1 =
0.358466495430004
F2 =
0.0501126615340028
F3 =
0.0239217027470453
F2a =
0.391651322336318
F3a =
0.417780786529233
mf =
0.0593142910992286
>>
Contoh hasil perhitungan momen jarak ke pusat untuk sejumlah objek dapat dilihat pada Tabel 12.6. Pada tabel tersebut terlihat bahwa penyekalaan, transalasi, dan rotasi pada ikan menghasilkan nilai yang hampir sama.
620
Pengolahan Citra Teori dan Aplikasi
Tabel 12.6 Fitur momen ke jarak pusat Objek F1 = 0.2526 F2 = 0.0195 F3 = 0.0070
Fitur F2 ’ = 0.2776 F3 ’ = 0.2988 Mf = 0.0463
F1 = 0.2526 F2 = 0.0195 F3 = 0.0070
F2 ’ = 0.2776 F3 ’ = 0.2988 Mf = 0.0463
F1 = 0.2542 F2 = 0.0199 F3 = 0.0073
F2 ’ = 0.2796 F3 ’ = 0.3012 Mf = 0.0470
F1 = 0.2484 F2 = 0.0189 F3 = 0.0069
F2 ’ = 0.2744 F3 ’ = 0.2969 Mf = 0.0485
F1 = 0.2422 F2 = 0.0173 F3 = 0.0059
F2 ’ = 0.2658 F3 ’ = 0.2857 Mf = 0.0434
F1 = 0.3372 F2 = 0.0541 F3 = 0.0322
F2 ’ = 0.3991 F3 ’ = 0.4469 Mf = 0.1096
F1 = 0.3585 F2 = 0.0501 F3 = 0.0239
F2 ’ = 0.3917 F3 ’ = 0.4178 Mf = 0.0593
ikan-1.png
ikan-2.png
ikan-3.png
ikan-4.png
ikan-5.png
guppi-1.png
kunci.png
12.10 Momen Zernike Momen Zernike diperkenalkan oleh F. Zernike dalam bukunya berjudul Physica yang diterbitkan pada tahun 1934. Penerapan momen Zernike untuk pengolahan citra diperkenalkan pertama kali oleh M.R. Teague pada tahun 1980 (Chen, dkk., 2005). Hasilnya berupa Zernike moment descriptors (ZMD). Momen ini mempunyai kelebihan seperti berikut (Migquiang, dkk., 2008): bersifat independen terhadap pemutaran (rotasi); andal terhadap derau dan variasi minor dalam bentuk objek; memiliki redundansi informasi yang minimum.
Pemerolehan Fitur Bentuk dan Kontur
621
Walaupun begitu, momen ini memiliki kelemahan seperti berikut. perlu
normalisasi ruang koordinat (dalam hal ini,
harus dilakukan
pengubahan ke bentuk lingkaran x2 + y2 < 1). perlu penggunaan hampiran penjumlahan mengingat aslinya menggunakan integral. Hal ini berkontribusi dalam memberikan kesalahan numerik, yang memberikan pengaruh terhadap sifat ketidakbergantungan pada rotasi. perlu dilakukan normalisasi terhadap translasi dan penyekalaan mengingat momen Zernike tidak bebas dari penggeseran dan penyekalaan.
Momen Zernike didasarkan pada polinomial Zernike yang bersifat ortogonal terhadap lingkaran x2 + y2 < 1, yang dinyatakan sebagai berikut: 𝑉𝑝𝑞 (𝑥, 𝑦) = 𝑈𝑝𝑞 (𝑟 𝑐𝑜𝑠𝜃, 𝑟 sin 𝜃) = 𝑅𝑝𝑞 (𝑟). exp(𝑗𝑞𝜃)
(12.25)
dengan 𝑟 adalah radius dari (y,x) ke pusat massa (centroid), 𝜃 adalah sudut antara r dan sumbu x (lihat Gambar 12.26), dan Rpq(r) adalah polinomial radial ortogonal seperti berikut: (𝑝−|𝑞 |)/2
𝑅𝑝𝑞 (𝑟) = ∑𝑠=0
(−1)𝑠
( 𝑝−𝑠) ! 𝑝+|𝑞| 𝑝−|𝑞| 𝑠!( −𝑠) !( −𝑠) ! 2 2
𝜌 𝑝−2𝑠
(12.26)
Dalam hal ini, n = 0,1,2,….; 0 < |q| < n, j= √ −1, , dan p-|q| bernilai genap. Beberapa
polinomial yang
digunakan
untuk
memperoleh
momen
Zernike
ditunjukkan pada Tabel 12.7 (Flusser, dkk., 2009). Polinomial Zernike hingga orde 12 dibahas pada Duin, dkk. (2007). Adapun sembilan polinomial Zernike pertama ditunjukkan pada Gambar 12.17.
622
Pengolahan Citra Teori dan Aplikasi
r Lingkaran: x2 + y2 < 1
Centroid
Gambar 12.16 Citra dalam lingkaran yang memenuhi persamaan x 2 + y2 < 1
Tabel 12.7 Polinomial yang digunakan pada momen Zernike 𝑅00 (𝑟) = 1 𝑅11 (𝑟) = 𝑟 𝑅20 (𝑟) = 2𝑟2 − 1 𝑅22 (𝑟) = 𝑟2 𝑅31 (𝑟) = 3𝑟2 − 2𝑟 𝑅33 (𝑟) = 𝑟3 𝑅40 (𝑟) = 6𝑟4 − 6𝑟2 + 1 𝑅42 (𝑟) = 4𝑟4 − 3𝑟2 𝑅44 (𝑟) = 𝑟4 𝑅51 (𝑟) = 10𝑟5 − 12𝑟2 + 3𝑟 𝑅53 (𝑟) = 5𝑟5 − 4𝑟3 𝑅55 (𝑟) = 𝑟5 𝑅60 (𝑟) = 20𝑟6 − 30𝑟4 + 12𝑟2 −1 6 𝑅62 (𝑟) = 15𝑟 − 20𝑟4 + 6𝑟2 𝑅64 (𝑟) = 6𝑟6 − 5𝑟4
𝑅66 (𝑟) = 𝑟6 𝑅71 (𝑟) = 35𝑟6 − 60𝑟5 + 30𝑟3 − 4𝑟 𝑅73 (𝑟) = 21𝑟7 − 30𝑟5 + 10𝑟3 𝑅75 (𝑟) = 7𝑟7 − 6𝑟5 𝑅77 (𝑟) = 7𝑟7 𝑅80 (𝑟) = 70𝑟8 − 140𝑟6 + 90𝑟4 − 20𝑟2 + 1 𝑅82 (𝑟) = 56𝑟8 − 105𝑟6 + 60𝑟4 − 10𝑟2 𝑅84 (𝑟) = 28𝑟8 − 42𝑟6 + 15𝑟4 𝑅86 (𝑟) = 8𝑟8 − 7𝑟6 𝑅88 (𝑟) = 𝑟8 𝑅91 (𝑟) = 126𝑟9 − 280𝑟7 + 210𝑟5 + 60𝑟3 + 5𝑟 9 𝑅93 (𝑟) = 84𝑟 − 168𝑟7 + 105𝑟5 − 20𝑟3 𝑅95 (𝑟) = 36𝑟9 − 56𝑟7 + 21𝑟5 𝑅97 (𝑟) = 9𝑟9 − 8𝑟7 𝑅99 (𝑟) = 𝑟9
Pemerolehan Fitur Bentuk dan Kontur
623
R00 R40
R11 R22
R33
R44 R42 R31
R20
Gambar 12.17 Sembilan polinomial Zernike pertama, berdasarkan pada Tabel 12.7 Momen Zernike berorde p dengan pengulangan fungsi kontinu f(y, x) sebanyak q dinyatakan sebagai berikut:
𝑍𝑝𝑞 =
𝑝+1 𝜋
∫𝑦 ∫𝑥 𝑓(𝑦, 𝑥 ). 𝑉 ∗ 𝑝𝑞 (𝑦, 𝑥 ) 𝑑𝑦 𝑑𝑥; 𝑥 2 + 𝑦 2 ≤ 1
(12.27)
Dalam hal ini, V* menyatakan konjugat, sedangkan Vpq(y,x) dinamakan sebagai fungsi basis Zernike berorde p dengan pengulangan sebanyak q. Fungsi basis berupa 𝑉𝑝𝑞 (𝑦, 𝑥 ) = 𝑉𝑝𝑞 (𝜌, 𝜃) = 𝑅𝑝𝑞 (𝜌). exp(𝑗𝑞𝜃)
(12.28)
Dengan p berupa bilangan bulat nol atau positif dan n p-|q| bernilai genap dan |q| < p. Apabila f(y,x) adalah citra digital, persamaan di atas dapat dihampiri dengan
624
Pengolahan Citra Teori dan Aplikasi
𝑍𝑝𝑞 =
𝑝+1 𝜋
∑𝑦 ∑𝑥 𝑓 (𝑦, 𝑥 ). 𝑉 ∗ 𝑝𝑞 (𝑦, 𝑥)
(12.29)
Gambar 12.18 menunjukkan 16 bentuk pertama fungsi Zernike.
Gambar 12.18 Enam belas fungsi Zernike yang pertama Apabila citra diputar dengan sudut sebesar , fungsi-fungsi momen Zernike Z’ berupa 𝑍 ′ 𝑝𝑞 = 𝑍𝑝𝑞 . 𝑒 −𝑗𝑞𝜑
(12.30)
Persamaan di atas menyatakan bahwa apabila besaran momen Zernike saja yang digunakan akan diperoleh fitur yang tidak bergantung pada rotasi. Polinomial yang digunakan pada momen Zernike dapat digunakan untuk menyatakan bentuk geometrik objek. Polinomial orde rendah berguna untuk memperoleh fitur global
suatu bentuk, sedangkan polinomial orde tinggi dapat
menangkap rincian bentuk atau fitur lokal (Choras, 2007). Dalam praktik, pemilihan jumlah momen Zernike yang tepat perlu ditentukan. Sebagai contoh, Zhang (2002) menggunakan 36 momen untuk melakukan pencarian citra, dengan mempertimbangkan efisiensi pemrosesan dan keakuratan.
Pemerolehan Fitur Bentuk dan Kontur
625
Proses untuk melakukan momen Zernike ditunjukkan pada Gambar 12.2. Pertama-tama, citra yang akan diproses perlu diubah ke bentuk biner. Kemudian, dilakukan normalisasi penyekalaan dan translasi, mengingat momen Zernike bergantung pada kedua hal tersebut. Setelah momen Zernike diperoleh, perlu dilaksanakan normalisasi agar nilainya berada antara [0 1].
Citra Biner
Normalisasi Penyekalaan
Normalisasi Translasi
Normalisasi ZMD
Perhitungan ZMD
Gambar 12.19 Mekanisme perhitungan ZMD
Normalisasi penyekalaan dilakukan didasarkan pada persamaan
𝛽
𝛽
𝑥 ′ = 𝑥 √ 𝑚 , 𝑦 ′ = 𝑦 √𝑚 00
(12.31)
00
𝛽
Komponen √𝑚 adalah faktor penyekala. Dalam hal ini, adalah suatu nilai yang 00
telah ditentukan terlebih dulu (pada contoh di belakang, dipilih sebesar 20000) dan m0,0 (momen spasial orde (0,0)) tidak lain adalah luas objek. Normalisasi translasi dilakukan dengan cara menggeser pusat massa ke tengah citra. Dalam hal ini, nilai X dan Y pusat massa dihitung melalui rumus: 𝑚
𝑚
𝑥 𝑐 = 𝑚10 , 𝑦𝑐 = 𝑚01 00
(12.32)
00
Pada persamaan di atas, (yc, xc) adalah sentroid, m1,0 adalah momen spasial order (1,0) dan m1,0 adalah momen spasial order (0,1). Dengan demikian, nilai x dan y baru dapat diperoleh melalui
626
Pengolahan Citra Teori dan Aplikasi
𝑁
𝑀
2
2
𝑥 ′ = 𝑥 𝑐 − , 𝑦 ′ = 𝑦𝑐 −
(12.33)
dengan M adalah tinggi citra dan N adalah lebar citra. Normalisasi ZMD dilakukan dengan membagi momen citra dengan m0,0 . Jadi,
𝑍𝑝𝑞 ′ =
𝑍𝑝𝑞
(12.34)
𝑚00
Pengaturan citra ke dalam lingkaran yang memenuhi persamaan x2 + y2 < 1 dilakukan dengan membuat matriks yang berukuran sama dengan ukuran citra. Selanjutnya, absis dan ordinat dinormalisasi agar berada di dalam jangkauan [-1 1]. Hal ini dapat dilakukan melalui perintah seperti berikut: selang = 2 / (m-1); ii = 0; for i=-1 : selang : 1 ii = ii + 1; jj = 0; for j=-1 : selang : 1; jj = jj + 1; X(ii, jj) = j; Y(ii, jj) = i; end end
Dalam hal ini, m adalah tinggi atau lebar citra (karena tinggi dan lebar citra dibuat sama). Berdasarkan koordinat yang tercantum dalam X dan Y di atas, posisi setiap piksel di dalam citra yang berada dalam lingkaran dapat diperoleh. Dengan demikian, informasi dan dapat dihitung berdasarkan posisi piksel terhadap pusat lingkaran. Implementasi momen Zernike dapat dilihat pada fungsi zermoment.
Pemerolehan Fitur Bentuk dan Kontur
Program : zermoment.m
function A = zermoment (F, orde, tampil) % ZERMOMENT Menghasilkan koefisien momen Zernike. % Masukan: % F = Citra biner % orde = order momen Zernike % tampil = true untuk menampilkan gambar if nargin < 3 tampil = false; end % Salin yang ada pada kotak pembatas [min_x, max_x, min_y, max_y] = kotak_pembatas(F); B = F(min_y:max_y, min_x:max_x); [m, n] = size(B); beta = 20000; luas = sum(sum(B));
% Parameter untuk mengatur % penyekalaan citra % Luas objek
% Tentukan citra yang memenuhi perbandingan beta % dengan luas citra B m1 = fix(m * sqrt(beta/luas)); n1 = fix(n * sqrt(beta/luas)); C = imresize(B, [m1, n1]); [m, n] = size(C); % Atur ukuran gambar untuk kepentingan % penyajian dalam bentuk lingkaran maks_mn = max(m, n); m_baru = round(sqrt(2) * maks_mn); n_baru = m_baru; D = zeros(m_baru, n_baru); for i=1 : m for j=1: n D(i,j) = C(i,j); end end m = m_baru; n = n_baru; % Peroleh pusat massa dan letakkan di tengah citra [xc, yc] = centroid(D); xc = round(xc);
627
628
Pengolahan Citra Teori dan Aplikasi
yc = round(yc); xc = xc - round((n/2)); yc = yc - round((m/2)); % Atur gambar ke G G = zeros(m,n); for i=1 : m for j=1: n if ~((j-xc< 1) || (i-yc<1) || (i-yc > m) || (j-xc > n)) G(i-yc, j-xc)= D(i,j); end end end % Bentuk grid untuk menentukan koordinat % dengan tengah citra sebagai titik pusat selang = 2 / (m-1); ii = 0; for i=-1 : selang : 1 ii = ii + 1; jj = 0; for j=-1 : selang : 1; jj = jj + 1; X(ii, jj) = j; Y(ii, jj) = i; end end % Hitung sudut, rho, dan lingkaran Theta = zeros(m, n); Rho = zeros(m, n); L = zeros(m, n); for i=1 : m for j=1: n Theta(i,j) = atan2(Y(i,j), X(i,j)); if Theta(i,j) < 0 Theta(i,j) = Theta(i,j) + 2 * pi; end jarak2 = X(i,j)^2 + Y(i,j)^2; Rho(i,j) = sqrt(jarak2); L(i,j) = jarak2; end end % Bentuk lingkaran DidalamL = find(L <= 1); Lingkaran = zeros(m,n); Lingkaran(DidalamL) = 1; luas = 0; for i=1 : m for j=1: n if Lingkaran(i,j) == 1 luas = luas + 1; end end end
Pemerolehan Fitur Bentuk dan Kontur
% Hitung Koefisien momen Zernike A = []; indeks = 0; for p = 2: orde for q = p:-2:0 zpq_real = 0; zpq_imaj = 0; for i=1 : m for j=1 : n if Lingkaran(i,j) == 1 vpq = fb_zernike(p,q, Rho(i,j)); zpq_real = zpq_real + G(i,j)* vpq * ... cos(q * Theta(i,j)); zpq_imaj = zpq_imaj + G(i,j)* vpq * ... sin(q * Theta(i,j)); end end end zpq_real = zpq_real * (p+1)/pi; zpq_imaj = zpq_imaj * (p+1)/pi; indeks = indeks + 1; A(indeks) = sqrt(zpq_real^2 + zpq_imaj^2); end; end; % Normalsiasi koefisien m00 = momen_spasial(G, 0, 0); A = A ./ m00; % Tampilkan gambar kalau memang diminta if tampil == true close all; figure; subplot(2,2,1); imshow(B); title('Citra dalam kotak pembatas'); subplot(2,2,2); imshow(G); title('Hasil penyekalaan dan translasi'); subplot(2,2,3); imshow(1-Lingkaran+G); title('Citra dalam lingkaran'); subplot(2,2,4); plot(A); title('Deskriptor momen Zernike'); end function p = fb_zernike (n,l,rho) % Menghitung fungsi basis Zernike p = 0; if n == 2
629
630
Pengolahan Citra Teori dan Aplikasi
switch (l) case 0, case 2, end; elseif n == 3 switch (l) case 1, case 3, end; elseif n == 4 switch (l) case 0, case 2, case 4, end; elseif n == 5 switch (l) case 1, case 3, case 5, end; elseif n == 6 switch (l) case 0, case 2, case 4, case 6, end; elseif n == 7 switch (l) case 1, case 3, case 5, case 7, end; elseif n == 8 switch (l) case 0, case 2, case 4, case 6, case 8,
p = 2*(rho.^2)-1; p = (rho.^2);
p = 3*(rho.^3)-2*rho; p = (rho.^3);
p = 6*(rho.^4)-6*(rho.^2)+1; p = 4*(rho.^4)-3*(rho.^2); p = (rho.^4);
p = 10*(rho.^5)-12*(rho.^3)+3*rho; p = 5*(rho.^5)- 4*(rho.^3); p = (rho.^5);
p p p p
= 20*(rho.^6)-30*(rho.^4)+12*(rho.^2)-1; = 15*(rho.^6)-20*(rho.^4)+ 6*(rho.^2); = 6*(rho.^6)- 5*(rho.^4); = (rho.^6);
p p p p
= 35*(rho.^7)-60*(rho.^5)+30*(rho.^3)-4*rho; = 21*(rho.^7)-30*(rho.^5)+10*(rho.^3); = 7*(rho.^7)- 6*(rho.^5); = (rho.^7);
p = 70*(rho.^8)-140*(rho.^6)+... 90*(rho.^4)-20*(rho.^2)+1; p = 56*(rho.^8)-105*(rho.^6)+ ... 60*(rho.^4)-10*(rho.^2); p = 28*(rho.^8)- 42*(rho.^6)+15*(rho.^4); p = 8*(rho.^8)- 7*(rho.^6); p = (rho.^8);
end; elseif n == 9 switch (l) case 1, p = 126*(rho.^9)-280*(rho.^7)+ ... 210*(rho.^5)-60*(rho.^3)+5*rho; case 3, p = 84*(rho.^9)-168*(rho.^7)+ ... 105*(rho.^5)-20*(rho.^3); case 5, p = 36*(rho.^9)- 56*(rho.^7)+ 21*(rho.^5); case 7, p = 9*(rho.^9)- 8*(rho.^7); case 9, p = (rho.^9); end; elseif n == 10 switch (l) case 0, p = 252*(rho.^10)-630*(rho.^8)+ ... 560*(rho.^6)-210*(rho.^4)+30*(rho.^2)-1;
Pemerolehan Fitur Bentuk dan Kontur
case
case case case case
2, p = 210*(rho.^10)-504*(rho.^8)+ ... 420*(rho.^6)- ... 140*(rho.^4)+15*(rho.^2); 4, p = 129*(rho.^10)-252*(rho.^8)+ ... 168*(rho.^6)- ... 35*(rho.^4); 6, p = 45*(rho.^10)- 72*(rho.^8)+ 28*(rho.^6); 8, p = 10*(rho.^10)- 9*(rho.^8); 10, p = (rho.^10);
end; elseif n == 11 switch (l) case 1, p = 462*(rho.^11)-1260*(rho.^9)+ ... 1260*(rho.^7)- ... 560*(rho.^5)+105*(rho.^3)-6*rho; case 3, p = 330*(rho.^11)- 840*(rho.^9)+ ... 756*(rho.^7)- ... 280*(rho.^5)+ 35*(rho.^3); case 5, p = 165*(rho.^11)- 360*(rho.^9)+ ... 252*(rho.^7)- 56*(rho.^5); case 7, p = 55*(rho.^11)- 90*(rho.^9)+ 36*(rho.^7); case 9, p = 11*(rho.^11)- 10*(rho.^9); case 11, p = (rho.^11); end; elseif n == 12 switch (l) case 0, p = 924*(rho.^12)-2772*(rho.^10)+ ... 3150*(rho.^8)- ... 1680*(rho.^6)+420*(rho.^4)-42*(rho.^2)+1; case 2, p = 792*(rho.^12)-2310*(rho.^10)+ ... 2520*(rho.^8)- ... 1260*(rho.^6)+280*(rho.^4)-21*(rho.^2); case 4, p = 495*(rho.^12)-1320*(rho.^10)+ ... 1260*(rho.^8)- ... 504*(rho.^6)+ 70*(rho.^4); case 6, p = 220*(rho.^12)- 495*(rho.^10)+ ... 360*(rho.^8)- ... 84*(rho.^6); case 8, p = 66*(rho.^12)- 110*(rho.^10)+45*(rho.^8); case 10, p = 12*(rho.^12)- 11*(rho.^10); case 12, p = (rho.^12); end; end; function [min_x, max_x, min_y, max_y] = kotak_pembatas(F) % Mencari koordinat kotak yang membatasi % citra F [m0, n0] = size(F); min_y = m0; max_y = 1; min_x = n0; max_x = 1; for i=1 : m0 for j=1: n0 if F(i,j) == 1 if min_y > i min_y = i; end
631
632
Pengolahan Citra Teori dan Aplikasi
if max_y < i max_y = i; end if min_x > j min_x = j; end if max_x < j max_x = j; end end end end
Akhir Program
Contoh penggunaan fungsi zermoment: >> Img = im2bw(imread('C:\Image\ikan-4.png'), 0.5); >> X = zermoment(Img,4,true) X = 0.087641 0.191575
0.585965
0.013469
0.042353
0.050947
0.403293
>>
Pada contoh di atas, argumen kedua yang berupa nilai 4 menentukan orde polinomial dan argumen ketiga untuk menentukan fungsi akan menghasilkan gambar. Argumen ketiga dapat ditiadakan. Contoh gambar yang dihasilkan oleh zermoment ditunjukkan pada Gambar 12.20.
Pemerolehan Fitur Bentuk dan Kontur
633
Gambar 12.20 Visualisasi pemrosesan momen Zernike
Hasil momen Zernike dengan orde 4 untuk berbagai citra diperlihatkan pada Tabel 12.8.
Tabel 12.8 Fitur momen Zernike orde 4 Objek
Fitur Z40 = 0,031014 Z42 = 0,187538 Z44 = 0,575370
ikan-1.png
Z20 = 0,067489 Z22 = 0,655700 Z31 = 0,015904 Z33 = 0,014320
Z40 = 0,031014 Z42 = 0,187538 Z44 = 0,575370
ikan-2.png
Z20 = 0,067489 Z22 = 0,655700 Z31 = 0,015904 Z33 = 0,014320
Z40 = 0,030826 Z42 = 0,182968 Z44 = 0,552235
ikan-3.png
Z20 = 0,066243 Z22 = 0,634994 Z31 = 0,014238 Z33 = 0,008975
634
Pengolahan Citra Teori dan Aplikasi
Objek
Fitur Z40 = 0,050947 Z42 = 0,191575 Z44 = 0,403293
ikan-4.png
Z20 = 0,087641 Z22 = 0,585965 Z31 = 0,013469 Z33 = 0,042353
Z40 = 0,029108 Z42 = 0,187842 Z44 = 0,570436
ikan-5.png
Z20 = 0,065993 Z22 = 0,655143 Z31 = 0,008639 Z33 = 0,036051
Z40 = 0,034444 Z42 = 0,180690 Z44 = 0,470811
guppi-1.png
Z20 = 0,073650 Z22 = 0,611287 Z31 = 0,058099 Z33 = 0,058516 Z20 = 0,099800 Z22 = 0,440984 Z31 = 0,112749 Z33 = 0,010853
Z40 = 0,015126 Z42 = 0,192140 Z44 = 0,122398
kunci.png
12.11 Polar Fourier Transform Peranan alihragam Fourier untuk membentuk deskriptor telah dibahas di depan. Selain yang telah dibahas, sebenarnya terdapat beberapa turunan alihragam Fourier. Salah satu turunan alihragam Fourier dalam koordinat polar dinamakan PFT2 (Polar Fourier Transform versi 2), yang diperkenalkan oleh Zhang (2002). PFT2 ini digunakan untuk kepentingan temu kembali citra berdasarkan bentuk objek. Hasil PFT berupa generic Fourier descriptor (GFD). Deskriptor diperoleh dengan mula-mula memperlakukan citra polar ke bentuk citra persegi panjang dua dimensi. Contoh dapat dilihat pada Gambar 12.21.
(a) Citra dalam ruang polar
(b) Citra dalam ruang polar diubah ke ruang Kartesian
Gambar 12.21 Citra di dalam koordinat polar diubah ke citra persegi panjang (Sumber: Zhang, 2002)
Pemerolehan Fitur Bentuk dan Kontur
635
Kelebihan PFT2 terhadap Fourier Descriptor (FD) kontur (Zhang, 2002): a) tidak perlu mengetahui informasi kontur yang boleh saja tidak tersedia; b) dapat menangkap isi dalam bentuk; c) lebih andal terhadap variasi bentuk. Adapun kelebihan terhadap ZMD: a) mampu menangkap fitur bentuk baik pada arah radial maupun melingkar; b) komputasi lebih sederhana; c) lebih andal.
PFT mempunyai sifat yang tidak bergantung pada translasi. Hal ini ditunjukkan pada Gambar 12.22.
(a) Pola1
(c) Spektra Fourier Pola1
(b) Pola 2 (pergeseran dari Pola 1)
(d) Spektra Fourier Pola 2
Gambar 12.22 Contoh yang menunjukkan PFT2 bersifat tidak tergantung pergeseran (Sumber: Zhang, 2002) PFT2 didefinisikan sebagai berikut: 𝑟 2𝜋 𝑃𝐹2 (𝜌, ∅) = ∑𝑟 ∑𝑖 𝑓(𝑟, 𝜃𝑖 )exp[𝑗2𝜋(𝑅 𝜌 + 𝑇 ∅)]
dengan:
a) 0
(12.35)
636
Pengolahan Citra Teori dan Aplikasi
c) T adalah resolusi frekuensi angular.
Cara untuk memproses dengan PFT2 seperti berikut. Misalnya, citra yang akan diproses berupa I = {f(x, y); 0<x<M, 0
1
−1 𝑀 −1 𝑥 𝑐 = 𝑁 ∑𝑁 𝑥 =0 𝑥 , 𝑦𝑐 = 𝑀 ∑𝑦=0 𝑦
(12.36)
Adapun (r, ) dihitung berdasarkan: 𝑟 = √(𝑥 − 𝑥 𝑐 )2 + (𝑦 − 𝑦𝑐 )2 , 𝜃 = 𝑎𝑟𝑐𝑡𝑎𝑛
𝑦−𝑦𝑐
(12.37)
𝑥−𝑥 𝑐
Ketidakbergantungan pada rotasi diperoleh dengan mengabaikan informasi fase pada koefisien-koefisiennya sehingga yang tertinggal adalah besaran koefisien. Adapun untuk memperoleh ketidakbergantungan pada skala, besaran pertama dinormalisasi
dengan
luas
lingkaran
dan
selanjutnya
semua
koefisien
dinormalisasi dengan koefisien pertama. Jadi, deskriptor bentuk yang didapatkan berupa: 𝑃𝐹 ( 0,0) 𝑃𝐹 ( 0,1) , 𝑃𝐹 (0,0) 2𝜋 𝑟2
𝐺𝐹𝐷 = {
𝑃𝐹( 0,𝑛)
𝑃𝐹( 𝑚,0)
𝑃𝐹( 𝑚,𝑛)
, … , 𝑃𝐹 (0,0) , … , 𝑃𝐹(0,0) , … , 𝑃𝐹 (0,0) }
(12.38)
dengan m adalah jumlah maksimum frekuensi radial dan n adalah jumlah frekuensi angular. Implementasi untuk mendapatkan GFD dapat dilihat pada fungsi gfd berikut.
Pemerolehan Fitur Bentuk dan Kontur
Program : gfd.m
function [GFD] = gfd(F, nrad, nang) % GFD Memperoleh nilai gfd atau koefisien PFT. % Masukan: F = citra biner % nrad = frekuensi radial % nang = frekuensi angular Kontur = inbound_tracing(F); jum = length(Kontur); [x_pusat, y_pusat] = centroid(F); % Cari jarak terpanjang rad_maks = 0; for i=1 : jum xi = Kontur(i,2); yi = Kontur(i, 1); panjang = ((xi-x_pusat)^2+(yi-y_pusat)^2)^0.5; if panjang > rad_maks rad_maks = panjang; end end % Tentukan frekuensi radial dan angular maksimum if nargin < 3 m = 4; % Frekuensi radial maksimum n = 6; % Frekuensi angular maksimum else m = nrad; n = nang; end F = double(F); [tinggi, lebar] = size(F); for rad=0 : m for ang=0 : n FR(rad+1, ang+1) = 0; FI(rad+1, ang+1) = 0; for x=1 : lebar for y=1: tinggi radius = ((x-x_pusat)^2 + (y-y_pusat)^2)^.5; theta = atan2((y-y_pusat),(x-x_pusat)); if (theta < 0) theta = theta + 2 * 3.14; end FR(rad+1, ang+1) = FR(rad+1, ang+1) + ... F(y, x) * ... cos(2 * 3.14 * rad * ... (radius / rad_maks) + ang * theta); FI(rad+1, ang+1) = FI(rad+1, ang+1) - ...
637
638
Pengolahan Citra Teori dan Aplikasi
F(y, x) * ... sin(2 * 3.14 * rad * ... (radius / rad_maks) + ang * theta); end end end end % Peroleh GFD for rad=0 : m for ang=0 : n if (rad==0) && (ang==0) dc = (FR(1,1)^2+FI(1,1)^2)^.5; GFD(1) = dc /(pi * rad_maks^2); else GFD(rad * n+ang+1)=(FR(rad+1, ang+1)^2+ ... FI(rad+1,ang+1)^2)^.5 / dc; end end end
Akhir Program
Contoh penggunaan fungsi gfd: >> Img = im2bw(imread('C:\Image\ikan-1.png'),0.5); >> X = gfd(Img,4,6) X = Columns 1 through 6: 0.3950269
0.0205150
0.2590928
0.0179417
0.1771724
0.1450364
0.0607695
0.1347511
0.0024445
0.0706047
0.0357912
0.0650260 Columns 7 through 12: 0.4252236
0.0846727
0.0291150 Columns 13 through 18:
0.1481163 0.0445491
0.0858275
Pemerolehan Fitur Bentuk dan Kontur
639
Columns 19 through 24:
0.0933387
0.0168520
0.0384655
0.0171787
0.0299010
0.0039343
0.0321431
0.0205917
0.0500069
Columns 25 through 30: 0.0469270
0.0394526
0.0125721 Column 31: 0.0162803
>>
Pada contoh di atas,
gfd(Img,4,6)
berarti bahwa frekuensi radial maksimum sebesar 4 dan frekuensi radial angular sebesar 6. Contoh hasil 7 GFD
pertama untuk berbagai citra yang menggunakan
frekuensi radial maksimum sebesar 4 dan frekuensi radial angular sebesar 6 dapat dilihat pada Tabel 12.9.
Tabel 12.9 Fitur GFD frekuensi radial maksimum sebesar 4 dan frekuensi radial angular sebesar 6 Objek Fitur GFD1 = 0.395027 GFD2 = 0.020515 GFD3 = 0.259093 ikan-1.png GFD4 = 0.017942 GFD1 = 0.395027 GFD2 = 0.020515 GFD3 = 0.259093 ikan-2.png GFD4 = 0.017942
640
Pengolahan Citra Teori dan Aplikasi
Objek
ikan-3.png
ikan-4.png
ikan-5.png
guppi-1.png
kunci.png
Fitur GFD1 = 0.396156 GFD2 = 0.020570 GFD3 = 0.261192 GFD4 = 0.017805 GFD1 = 0.393667 GFD2 = 0.020181 GFD3 = 0.258510 GFD4 = 0.019910 GFD1 = 0.396182 GFD2 = 0.021021 GFD3 = 0.255305 GFD4 = 0.020895 GFD1 = 0.262418 GFD2 = 0.073336 GFD3 = 0.303962 GFD4 = 0.249740 GFD1 = 0.386401 GFD2 = 0.003771 GFD3 = 0.346719 GFD4 = 0.291891
12.12 Kotak Pembatas Kotak pembatas (bounding box) adalah kotak terkecil yang dapat melingkupi sebuah objek. Kotak pembatas dibedakan menjadi dua buah: kotak pembatas yang berorientasi citra dan kotak pembatas yang berorientasi pada objek (Pratt, 2001). Perbedaan kedua kotak pembatas ditunjukkan pada Gambar 12.23. Y
X
(a) Kotak pembatas berorientasi citra
(b) Kotak pembatas berorientasi objek
Gambar 12.23 Kotak pembatas
Pemerolehan Fitur Bentuk dan Kontur
641
Kotak pembatas berorientasi citra milik suatu area R dapat dinyatakan dengan
𝐾𝑜𝑡𝑎𝑘𝑃𝑒𝑚𝑏𝑎𝑡𝑎𝑠(𝑅) = {ymin , ymax , xmin , xmax }
(12.39)
Dalam hal ini, ymin menyatakan Y terkecil, ymax menyatakan Y terbesar, xmin menyatakan X terkecil, dan xmax menyatakan X terbesar. Adapun tinggi dan lebar kotak berupa:
𝑡𝑖𝑛𝑔𝑔𝑖 = 𝑦𝑚𝑎𝑥 − 𝑦𝑚𝑖𝑛 , 𝑙𝑒𝑏𝑎𝑟 = 𝑥 𝑚𝑎𝑥 − 𝑥 𝑚𝑖𝑛
(12.40)
Pada kotak pembatas berorientasi objek, perhitungan tinggi dan lebar kotak diawali dengan pencarian . Hal ini dilakukan dengan menggunakan rumus berikut:
1
2𝜇1,1
2
𝜇2,0−𝜇0,2
𝜃 = 𝑡𝑎𝑛−1 [
]
(12.41)
dengan adalah momen pusat. Setelah orientasi diperoleh, piksel-piksel kontur objek dihitung dengan menggunakan transformasi
𝛼 = 𝑥 cos 𝜃 + 𝑦 sin 𝜃, 𝛽 = −𝑥 sin 𝜃 + 𝑦 cos 𝜃
(12.42)
Dalam hal ini, mewakili absis dan mewakili ordinat. Lalu, min , max , min , dan min dapat diperoleh dari semua nilai dan . Setelah itu, tinggi dan lebar kotak dihitung melalui
𝑡𝑖𝑛𝑔𝑔𝑖 = 𝛽𝑚𝑎𝑥 − 𝛽𝑚𝑖𝑛 , 𝑙𝑒𝑏𝑎𝑟 = 𝛼𝑚𝑎𝑥 − 𝛼𝑚𝑖𝑛
(12.43)
Fitur yang umum digunakan berupa perbandingan antara luas kotak pembatas dengan luas area. Perhitungannya seperti berikut:
642
Pengolahan Citra Teori dan Aplikasi
𝑟𝑎𝑠𝑖𝑜 𝑘𝑜𝑡𝑎𝑘 𝑝𝑒𝑚𝑏𝑎𝑡𝑎𝑠 𝑏𝑒𝑟𝑜𝑟𝑖𝑒𝑛𝑡𝑎𝑠𝑖 𝑐𝑖𝑡𝑟𝑎 = 𝑟𝑎𝑠𝑖𝑜 𝑘𝑜𝑡𝑎𝑘 𝑝𝑒𝑚𝑏𝑎𝑡𝑎𝑠 𝑏𝑒𝑟𝑜𝑟𝑖𝑒𝑛𝑡𝑎𝑠𝑖 𝑜𝑏𝑗𝑒𝑘 =
𝑙𝑢𝑎𝑠 𝑎𝑟𝑒𝑎 𝑜𝑏𝑗𝑒𝑘 (𝑦 𝑚𝑎𝑥−𝑦 𝑚𝑖𝑛 )∗(𝑥𝑚𝑎𝑥 −𝑥𝑚𝑖𝑛 ) 𝑙𝑢𝑎𝑠 𝑎𝑟𝑒𝑎 𝑜𝑏𝑗𝑒𝑘 (𝛼𝑚𝑎𝑥 −𝛼𝑚𝑖𝑛 )∗(𝛽𝑚𝑎𝑥 −𝛽𝑚𝑖𝑛 )
(12.44) (12.45)
Kedua rasio tersebut menghasilkan nilai antara 0 dan 1. Contoh
berikut
menunjukkan
perhitungan
rasio
kotak
pembatas
berorientasi citra.
Program : bboxcitra.m
function [rasio, min_x, max_x, min_y, max_y] = bboxcitra(F) % BBOXCITRA Mencari kotak terkecil yang melingkupi citra. % Masukan: F = Citra berskala keabuan % Keluaran: Nilai X dan Y terkecil dan terbesar [m, n] = size(F); min_y = m; max_y = 1; min_x = n; max_x = 1; for i=1 : m for j=1: n if F(i,j) == 1 if min_y > i min_y = i; end if max_y < i max_y = i; end if min_x > j min_x = j; end if max_x < j max_x = j; end end end end luas = 0; for i=1 : m for j=1 : n
Pemerolehan Fitur Bentuk dan Kontur
643
if F(i,j) ~= 0 luas = luas + 1; end end end rasio = luas / ((max_y - min_y) * (max_x - min_x));
Akhir Program
Fungsi bboxcitra menghasilkan rasio dan juga nilai X dan Y terkecil dan terbesar. Contoh pemakaiannya: >>Img = im2bw(imread('C:\Image\ikan-3.png'),0.5); >>[rasio, X1, X2, Y1, Y2] = bboxcitra(Img) rasio =
0.59986
X1 =
54
X2 =
196
Y1 =
92
Y2 =
170
>>
Hasil di atas menyatakan kotak yang melingkupi objek mempunyai X terkecil sama dengan 41, X terbesar sama dengan 204, Y terkecil sama dengan 28, dan Y terbesar sama dengan 224. Adapun rasio kotak pembatas berorientasi citra berupa 0,536715913359209. Contoh
berikut
menunjukkan
perhitungan
rasio
kotak
pembatas
berorientasi objek.
Program : bboxobjek.m
function [rasio, min_a, max_a, min_b, max_b] = bboxobjek(F) % BBOXOBJEK Mencari kotak terkecil yang melingkupi citra. % Masukan: F = Citra berskala keabuan yang % mengandung suatu objek % Keluaran: Nilai alpha dan beta terkecil dan terbesar
644
Pengolahan Citra Teori dan Aplikasi
if nargin < 2 tampil = true; end % Cek citra biner atau tidak Cek = find(F>1); if ~isempty(Cek) % Kalau F bukan citra biner Kontur = inbound_tracing(im2bw(F)); else Kontur = inbound_tracing(F); end jum = length(Kontur); % Cari nilai alpha dan beta terbesar dan terkecil max_a = 0; min_a = 10^300; max_b = 0; min_b = min_a; [xc,yc] = centroid(F); theta = 0.5 * atan(2 * momen_pusat(F,1,1)/... (momen_pusat(F,2,0) - momen_pusat(F,0,2))); for i=1 : jum x = Kontur(i, 2); y = Kontur(i, 1); alpha = x * cos(theta) + y * sin(theta); beta = -x * sin(theta) + y * cos(theta); if min_b > beta min_b = beta; end if max_b < beta max_b = beta; end if min_a > alpha min_a = alpha; end if max_a < alpha max_a = alpha; end end % Hitung luas [m, n] = size(F); luas = 0; for i=1 : m for j=1 : n if F(i,j) ~= 0 luas = luas + 1; end end end % Hitung rasio
Pemerolehan Fitur Bentuk dan Kontur
645
if luas == 0 rasio = 0; else rasio = luas / ((max_a - min_a) * (max_b - min_b)); end
Akhir Program
Contoh penggunaan bboxobjek: >> Img = im2bw(imread('C:\Image\ikan-3.png'),0.5); >> rasio = bboxobjek(Img) rasio =
0.60112
>>
Contoh rasio berorientasi objek dan citra untuk berbagai citra dapat dilihat pada Tabel 12.10.
Tabel 12.10 Rasio kotak pembatas berorientasi objek dan citra Objek
Rasio Berorientasi Citra
Rasio Berorientasi Objek
0.592211
0.593791
0.592211
0.593791
0.599856
0.601117
0.544270
0.590088
0.588815
0.590142
ikan-1.png
ikan-2.png
ikan-3.png
ikan-4.png
ikan-5.png
646
Pengolahan Citra Teori dan Aplikasi
Objek
Rasio Berorientasi Citra
Rasio Berorientasi Objek
0.522930
0.506971
0.536716
0.524068
guppy-1.png
kunci.png
Latihan 1. Jelaskan
pengertian
tanda
tangan
kontur.
Berikan
ilustrasi
untuk
menjelaskannya. 2. Manakah sifat berikut yang dipenuhi oleh tanda tangan kontur? (a) Translasi (b) Rotasi (c) Penyekalaan 3. Jelaskan mekanisme deskriptor Fourier dalam mewakili bentuk dengan menggunakan sejumlah titik. 4. Jelaskan istilah berikut. (a) Convex hull (b) Soliditas (c) Konveksitas 5. Jelaskan pengertian proyeksi citra. 6. Apa kelebihan momen Hu dibandingkan dengan momen pusat? 7. Apa yang dimaksud dengan momen jarak ke pusat? 8. Berikan penjelasan singkat tentang prinsip kerja momen Zernike. 9. Berapa jumlah momen Zernike untuk orde:
(a) 4
Pemerolehan Fitur Bentuk dan Kontur
647
(b) 6 (c) 10 10. Apa keunggulan PFT terhadap momen Zernike? 11. Jelaskan perbedaan antara kotak pembatas berorientasi citra dan kotak pembatas berorientasi objek? Fitur apa yang dapat diperoleh dari kedua kotak pembatas tersebut? 12. Cobalah untuk membuat tanda tangan kontur agar dapat bersifat bebas terhadap rotasi dan penyekalaan. Bantuan: Gunakan deskriptor Fourier untuk membantu menyelesaikan masalah ini.
648
Pengolahan Citra Teori dan Aplikasi