BAB 12 · BAB 12 Ekstraksi Fitur Bentuk dan Kontur Setekah bab ini berakhir, diharapkan pembaca...
Transcript of BAB 12 · BAB 12 Ekstraksi Fitur Bentuk dan Kontur Setekah bab ini berakhir, diharapkan pembaca...
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(2) d(3)
d(4)
d(1)
(�̅�, �̅�)
d(n)
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 menghitung d(1). Langkah
selengkapnya diperlihatkan pada algoritma berikut.
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.
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);
Program : tandatangan.m
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 ikan-
1.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) biasa dipakai untuk
menjabarkan bentuk 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.
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
𝑁∑ 𝑠(𝑡). exp (
−𝑗2𝜋𝑛𝑡
𝑁)𝑁
𝑡=0 , 𝑛 = 0,1,2,… , 𝑁 − 1 (12.3)
Program : perolehFD.m
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.
function [] = plotFD(F)
% PLOTFD Menampilkan kontur berdasarkan deskriptor Fourier.
% Masukan: F = Deskriptor Fourier
Program : plotFD.m
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
m + in
o + ip
q + ir
s + it
q + ir
s + it
a + ib
c + id
q + ir
s + it
a + ib
c + id
e + if
g + ih
m + in
o + ip
q + ir
s + it
a + ib
c + id
e + if
g + ih
a + ib
c + id
K1 = fftshift(F)
F K1
8 elemen
n = 4
delta = (8-4)/2 =2
1 + delta
n + delta
K2 G
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 587
(a) Citra ikan-5.png (b) n = 544
(c) n = 100 (d) n = 50
(e) n = 20 (f) n = 25
(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. Pertama-
tama yang perlu diketahui, kecuali komponen DC (a0), 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.
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 tidak dapat digunakan untuk
merekonstruksi kontur.
Program : normalisasiFD.m
Pemerolehan Fitur Bentuk dan Kontur 589
Untuk mengamati fitur yang dihasilkan dengan normalisasiFD, fungsi
amatiFD berikut dapat digunakan.
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.
Program : amatiFD.m
590 Pengolahan Citra Teori dan Aplikasi
(a) Citra ikan-1.png (b) FD ikan-1.png (c) Citra ikan-2.png (d) FD ikan-2.png
(e) Citra ikan-3.png (f) FD ikan-3.png (g) Citra ikan-4.png (h) FD ikan-4.png
(i) Citra ikan-5.png (j) FD ikan-5.png (k) Citra guppi-1.png (l) FD guppi-1.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 (12.5)
dan r berupa
Pemerolehan Fitur Bentuk dan Kontur 591
𝜎𝑅 =1
𝑁∑ [ |(𝑦𝑖 ,𝑥𝑖) − (�̅�𝑐 , �̅�𝑐)| − 𝜇𝑅 ]2𝑁
𝑖=1 (12.6)
Contoh fungsi berikut dimaksudkan untuk memperoleh fitur sifat bundar.
Fungsi memerlukan masukan berupa citra biner.
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
Program : sifatbundar.m
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
ikan-1.png
0,20595
ikan-2.png
0,20595
ikan-3.png
0,31363
ikan-4.png
0,21497
ikan-5.png
0,22230
guppi-1.png
0,10620
kunci.png
0,10110
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 Kinerja Penemu
Brute Force O(n4) dan O(n3) Tidak diketahui
Graham Scan O(n log n) Graham, 1972
Gift Wrapping O(nh) Jarvis, 1973
QuickHull O(nh) Eddy, 1977
Divide-and-Conquer O(n log n) Preparata & Hong, 1977
Monotone Chain O(n log n) Andrew, 1979
Incremental O(n log n) Kallay, 1984
Marriage-before-
Conquest
O(n log h) 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.
(Titik jangkar)
p0
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 pi 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)
i i + 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) (b)
(c)
(e)
(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.
(a) (b)
Dua titik mempunyai
sudut yang sama
Titik dengan jarak
terpanjang dipertahankan
Gambar 12.11 Penghilangan titik-titik yang mempunyai sudut sama,
dengan hanya mempertahankan satu saja yang terpanjang
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)
Program : convexhull.m
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 599
% 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
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.
p2
p1
p3
(b) p3 di kanan garis. Dalam hal ini,
p2 berputar ke kiri untuk
menuju p3
p2
p1
p3
(a) p3 di kiri garis. Dalam hal ini, p2
berputar ke kanan 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 dengan
latarbelakangnya.
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');
Program : tesconvex.m
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
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.
Program : konveksitas.m
Pemerolehan Fitur Bentuk dan Kontur 605
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:
Program : soliditas.m
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
(a, b)
(c, d)
(e, f)
(g, h)
(a, b)
(X, Y)
sigma A = a x d + c x f +
e x h + g x b
(a, b)
(c, d)
(e, f)
(g, h)
(a, b)
(X, Y)
sigma B = b x c + d x e +
f x g + h x a
Luas = |(sigma A – sigma B)/2|
sigma A = a x d + c x f +
e x h + g x b
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 Konveksitas Soliditas
ikan-1.png
0.8930 0.8577
ikan-2.png
0.8930 0.8577
ikan-3.png
0.8925 0.8546
ikan-4.png
0.8840 0.8582
ikan-5.png
0.8276 0.8514
guppi-1.png
0.7876 0.7964
kunci.png
0.7352 0.7147
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 Phor(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.
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);
Program : proyeksi.m
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
𝑀00 (12.13)
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 611
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
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
Program : normomen.m
Program : momen_pusat.m
612 Pengolahan Citra Teori dan Aplikasi
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
ikan-1.png
ŋ11 = -0.0024
ŋ02 = 0.04578
ŋ20 = 0.1606
ŋ03 =-5.6067e-4
ŋ30 = 0.0132
ŋ12 = -8.7615e-4
ŋ21 = 0.0024
Program : momen_spasial.m
Pemerolehan Fitur Bentuk dan Kontur 613
ikan-2.png
ŋ11 = -0.0024
ŋ02 = 0.0458
ŋ20 = 0.1606
ŋ03 = -5.6067e-4
ŋ30 = 0.0132
ŋ12 = -8.7615e-4
ŋ21 = 0.0024
ikan-3.png
ŋ11 = -0.0025
ŋ02 = 0.0456
ŋ20 = 0.1612
ŋ03 = -5.4819e-4
ŋ30 = 0.0132
ŋ12 = -8.8123e-4
ŋ21 = 0.0024
ikan-4.png
ŋ11 = 0.0529
ŋ02 = 0.0811
ŋ20 = 0.1251
ŋ03 = 0.0031
ŋ30 = 0.0038
ŋ12 = 0.0051
ŋ21 = 0.0054
ikan-5.png
ŋ11 = -0.0021
ŋ02 = 0.0463
ŋ20 = 0.1596
ŋ03 = -5.0026e-4
ŋ30 = 0.0135
ŋ12 = -0.0010
ŋ21 = 0.0023
guppi-1.png
ŋ11 = 0.0370
ŋ02 = 0.0706
ŋ20 = 0.1671
ŋ03 = 0.0104
ŋ30 = -0.0449
ŋ12 = 0.0080
ŋ21 = -0.0109
kunci.png
ŋ11 = -0.0032
ŋ02 = 0.2029
ŋ20 = 0.0796
ŋ03 = -0.0268
ŋ30 = -0.0016
ŋ12 = 0.0012
ŋ21 = 0.0221
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.
function [Momen] = momenhu(F)
% MOMENHU Menghitung momen HU.
% Masukan: F = citra berskala keabuan
% Keluaran: Momen = 7 momen Hu
norm_20 = normomen(F, 2, 0);
norm_02 = normomen(F, 0, 2);
norm_11 = normomen(F, 1, 1);
norm_30 = normomen(F, 3, 0);
norm_12 = normomen(F, 1, 2);
norm_21 = normomen(F, 2, 1);
norm_03 = normomen(F, 0, 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;
Program : momenhu.m
Pemerolehan Fitur Bentuk dan Kontur 615
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
>>
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 Fitur
ikan-1.png
∅1 = 0.206371
∅2 = 0.013207
∅3 = 0.000172
∅4 = 0.000155
∅5 = 0.000000034
∅6 = 0.000016756
∅7 = 0.000000049
ikan-2.png
∅1 = 0.206370
∅2 = 0.013207
∅3 = 0.000172
∅4 = 0.000155
∅5 = 0.000000034
∅6 = 0.000016756
∅7 = 0.000000049
ikan-3.png
∅1 = 0.206774
∅2 = 0.013390
∅3 = 0.000173
∅4 = 0.000156
∅5 = 0.000000035
∅6 = 0.000017012
∅7 = 0.000000050
ikan-4.png
∅1 = 0.2062254
∅2 = 0.0131368
∅3 = 0.0005498
∅4 = 0.0001549
∅5 = 0.000000034
∅6 = 0.000016712
∅7 = -
0.000000042
ikan-5.png
∅1 = 0.2058433
∅2 = 0.0128627
∅3 = 0.0001610
∅4 = 0.0001575
∅5 = 0.000000036
∅6 = 0.000016946
∅7 = 0.000000050
guppi-1.png
∅1 = 0.2377492
∅2 = 0.0147675
∅3 = 0.0022907
∅4 = 0.0013586
∅5 = 0.000003528
∅6 = 0.000133488
∅7 = 0.000004008
kunci.png
∅1 = 0.2824261
∅2 = 0.0152452
∅3 = 0.0086765
∅4 = 0.0000221
∅5 = 0.000000009
∅6 = 0.000002673
∅7 = 0.000000001
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 617
𝑚𝑝 =1
𝑁∑ |𝑑(𝑛)|𝑝𝑁
𝑖=1 (12.16)
Momen pusat ke-p didefinisikan sebagai berikut:
𝑀𝑝 =1
𝑁∑ |𝑑(𝑛) − 𝑚1)|𝑝𝑁
𝑖=1 (12.17)
Selanjutnya, momen-momen yang ternormalisasi didefinisikan sebagai
𝑚𝑝̅̅ ̅̅ =𝑚𝑝
(𝑀2)𝑝/2 (12.18)
𝑀𝑝̅̅ ̅̅ =
𝑀𝑝
(𝑀2)𝑝/2 (12.19)
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 =√𝑀2
𝑚1=
√1
𝑁∑ |𝑑(𝑛)−𝑚1)|2𝑁
𝑖=1
1
𝑁∑ 𝑑(𝑛)𝑁
𝑖=1
(12.20)
𝐹2 =𝑀3
(𝑀2 )32
=1
𝑁∑ |𝑑(𝑛)−𝑚1 )|3𝑁
𝑖=1
{1
𝑁∑ |𝑑(𝑛)−𝑚1 )|2𝑁
𝑖=1}
3/2 (12.21)
𝐹3 =𝑀4
(𝑀2 )2 =1
𝑁∑ |𝑑(𝑛)−𝑚1 )|4𝑁
𝑖=1
{1
𝑁∑ |𝑑(𝑛)−𝑚1 )|2𝑁
𝑖=1}
2 (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 F2 ternyata berubah secara nyata terhadap
penyekalaan dan rotasi. Oleh karena itu, mereka melakukan modifikasi terhadap
F2 dan F3 sebagai berikut:
𝐹2′ =
√𝑀33
𝑚1=
√1
𝑁∑ |𝑑(𝑛)−𝑚1 )|3𝑁
𝑖=13
1
𝑁∑ 𝑑(𝑛)𝑁
𝑖=1
(12.23)
𝐹3′ =
√𝑀44
𝑚1=
√1
𝑁∑ |𝑑(𝑛)−𝑚1 )|4𝑁
𝑖=14
1
𝑁∑ 𝑑(𝑛)𝑁
𝑖=1
(12.24)
Fakta yang menarik, kumpulan fitur {F1, 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 F3. Semakin
besar nilai, semakin besar kekasaran kontur.
Temuan yang juga menarik, menurut Rangayyan, kombinasi mf = F3’ – F1
merupakan indikator yang bagus untuk mengungkapkan kekasaran bentuk.
Fungsi mjarakpusat berikut merupakan implementasi untuk
menghitung fitur-fitur yang telah dijelaskan di atas.
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;
Program : mjarakpusat.m
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 Fitur
ikan-1.png
F1 = 0.2526 F2 = 0.0195
F3 = 0.0070
F2’ = 0.2776 F3’ = 0.2988
Mf = 0.0463
ikan-2.png
F1 = 0.2526 F2 = 0.0195
F3 = 0.0070
F2’ = 0.2776 F3’ = 0.2988
Mf = 0.0463
ikan-3.png
F1 = 0.2542 F2 = 0.0199
F3 = 0.0073
F2’ = 0.2796 F3’ = 0.3012
Mf = 0.0470
ikan-4.png
F1 = 0.2484
F2 = 0.0189 F3 = 0.0069
F2’ = 0.2744
F3’ = 0.2969 Mf = 0.0485
ikan-5.png
F1 = 0.2422
F2 = 0.0173 F3 = 0.0059
F2’ = 0.2658
F3’ = 0.2857 Mf = 0.0434
guppi-1.png
F1 = 0.3372
F2 = 0.0541 F3 = 0.0322
F2’ = 0.3991
F3’ = 0.4469 Mf = 0.1096
kunci.png
F1 = 0.3585
F2 = 0.0501 F3 = 0.0239
F2’ = 0.3917
F3’ = 0.4178 Mf = 0.0593
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:
𝑅𝑝𝑞 (𝑟) = ∑ (−1)𝑠 (𝑝−𝑠)!
𝑠!(𝑝+|𝑞|
2−𝑠) !(
𝑝−|𝑞|
2−𝑠)!
𝜌𝑝−2𝑠(𝑝−|𝑞 |)/2
𝑠=0 (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
Centroid
Lingkaran:
x2 + y2 < 1
r
Gambar 12.16 Citra dalam lingkaran yang memenuhi persamaan x2 + y2 < 1
Tabel 12.7 Polinomial yang digunakan pada momen Zernike
𝑅00 (𝑟) = 1 𝑅66 (𝑟) = 𝑟6
𝑅11(𝑟) = 𝑟 𝑅71 (𝑟) = 35𝑟6 − 60𝑟5 + 30𝑟3 − 4𝑟
𝑅20 (𝑟) = 2𝑟2 − 1 𝑅73 (𝑟) = 21𝑟7 − 30𝑟5 + 10𝑟3 𝑅22 (𝑟) = 𝑟2 𝑅75 (𝑟) = 7𝑟7 − 6𝑟5
𝑅31 (𝑟) = 3𝑟2 − 2𝑟 𝑅77 (𝑟) = 7𝑟7
𝑅33 (𝑟) = 𝑟3 𝑅80 (𝑟) = 70𝑟8 − 140𝑟6 + 90𝑟4 − 20𝑟2 + 1
𝑅40 (𝑟) = 6𝑟4 − 6𝑟2 + 1 𝑅82 (𝑟) = 56𝑟8 − 105𝑟6 + 60𝑟4 − 10𝑟2
𝑅42 (𝑟) = 4𝑟4 − 3𝑟2 𝑅84 (𝑟) = 28𝑟8 − 42𝑟6 + 15𝑟4
𝑅44 (𝑟) = 𝑟4 𝑅86 (𝑟) = 8𝑟8 − 7𝑟6
𝑅51 (𝑟) = 10𝑟5 − 12𝑟2 + 3𝑟 𝑅88 (𝑟) = 𝑟8
𝑅53 (𝑟) = 5𝑟5 − 4𝑟3 𝑅91(𝑟) = 126𝑟9 − 280𝑟7 + 210𝑟5 + 60𝑟3
+ 5𝑟
𝑅55 (𝑟) = 𝑟5 𝑅93(𝑟) = 84𝑟9 − 168𝑟7 + 105𝑟5 − 20𝑟3
𝑅60 (𝑟) = 20𝑟6 − 30𝑟4 + 12𝑟2
− 1 𝑅95(𝑟) = 36𝑟9 − 56𝑟7 + 21𝑟5
𝑅62 (𝑟) = 15𝑟6 − 20𝑟4 + 6𝑟2 𝑅97(𝑟) = 9𝑟9 − 8𝑟7
𝑅64 (𝑟) = 6𝑟6 − 5𝑟4 𝑅99(𝑟) = 𝑟9
Pemerolehan Fitur Bentuk dan Kontur 623
R00
R40 R11
R20
R22 R33
R44
R42
R31
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
Perhitungan
ZMD
Normalisasi
ZMD
Gambar 12.19 Mekanisme perhitungan ZMD
Normalisasi penyekalaan dilakukan didasarkan pada persamaan
𝑥 ′ = 𝑥 √𝛽
𝑚00, 𝑦′ = 𝑦 √
𝛽
𝑚00 (12.31)
Komponen √𝛽
𝑚00 adalah faktor penyekala. Dalam hal ini, adalah suatu nilai yang
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
𝑚00, 𝑦𝑐 =
𝑚01
𝑚00 (12.32)
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,
𝑍𝑝𝑞′ =
𝑍𝑝𝑞
𝑚00 (12.34)
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 627
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; % Parameter untuk mengatur
% penyekalaan citra
luas = sum(sum(B)); % 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);
Program : zermoment.m
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 629
% 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
630 Pengolahan Citra Teori dan Aplikasi
switch (l)
case 0, p = 2*(rho.^2)-1;
case 2, p = (rho.^2);
end;
elseif n == 3
switch (l)
case 1, p = 3*(rho.^3)-2*rho;
case 3, p = (rho.^3);
end;
elseif n == 4
switch (l)
case 0, p = 6*(rho.^4)-6*(rho.^2)+1;
case 2, p = 4*(rho.^4)-3*(rho.^2);
case 4, p = (rho.^4);
end;
elseif n == 5
switch (l)
case 1, p = 10*(rho.^5)-12*(rho.^3)+3*rho;
case 3, p = 5*(rho.^5)- 4*(rho.^3);
case 5, p = (rho.^5);
end;
elseif n == 6
switch (l)
case 0, p = 20*(rho.^6)-30*(rho.^4)+12*(rho.^2)-1;
case 2, p = 15*(rho.^6)-20*(rho.^4)+ 6*(rho.^2);
case 4, p = 6*(rho.^6)- 5*(rho.^4);
case 6, p = (rho.^6);
end;
elseif n == 7
switch (l)
case 1, p = 35*(rho.^7)-60*(rho.^5)+30*(rho.^3)-4*rho;
case 3, p = 21*(rho.^7)-30*(rho.^5)+10*(rho.^3);
case 5, p = 7*(rho.^7)- 6*(rho.^5);
case 7, p = (rho.^7);
end;
elseif n == 8
switch (l)
case 0, p = 70*(rho.^8)-140*(rho.^6)+...
90*(rho.^4)-20*(rho.^2)+1;
case 2, p = 56*(rho.^8)-105*(rho.^6)+ ...
60*(rho.^4)-10*(rho.^2);
case 4, p = 28*(rho.^8)- 42*(rho.^6)+15*(rho.^4);
case 6, p = 8*(rho.^8)- 7*(rho.^6);
case 8, 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 631
case 2, p = 210*(rho.^10)-504*(rho.^8)+ ...
420*(rho.^6)- ...
140*(rho.^4)+15*(rho.^2);
case 4, p = 129*(rho.^10)-252*(rho.^8)+ ...
168*(rho.^6)- ...
35*(rho.^4);
case 6, p = 45*(rho.^10)- 72*(rho.^8)+ 28*(rho.^6);
case 8, p = 10*(rho.^10)- 9*(rho.^8);
case 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
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.585965 0.013469 0.042353 0.050947
0.191575 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
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,031014 Z42 = 0,187538
Z44 = 0,575370
ikan-3.png
Z20 = 0,066243
Z22 = 0,634994 Z31 = 0,014238 Z33 = 0,008975
Z40 = 0,030826
Z42 = 0,182968 Z44 = 0,552235
634 Pengolahan Citra Teori dan Aplikasi
Objek Fitur
ikan-4.png
Z20 = 0,087641
Z22 = 0,585965 Z31 = 0,013469 Z33 = 0,042353
Z40 = 0,050947
Z42 = 0,191575 Z44 = 0,403293
ikan-5.png
Z20 = 0,065993
Z22 = 0,655143 Z31 = 0,008639 Z33 = 0,036051
Z40 = 0,029108
Z42 = 0,187842 Z44 = 0,570436
guppi-1.png
Z20 = 0,073650
Z22 = 0,611287 Z31 = 0,058099
Z33 = 0,058516
Z40 = 0,034444
Z42 = 0,180690 Z44 = 0,470811
kunci.png
Z20 = 0,099800 Z22 = 0,440984 Z31 = 0,112749
Z33 = 0,010853
Z40 = 0,015126 Z42 = 0,192140 Z44 = 0,122398
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 (b) Pola 2 (pergeseran dari Pola 1)
(c) Spektra Fourier Pola1 (d) Spektra Fourier Pola 2
Gambar 12.22 Contoh yang menunjukkan PFT2 bersifat
tidak tergantung pergeseran (Sumber: Zhang, 2002)
PFT2 didefinisikan sebagai berikut:
𝑃𝐹2 (𝜌, ∅) = ∑ ∑ 𝑓(𝑟,𝜃𝑖 )exp [𝑗2𝜋(𝑟
𝑅𝜌 +
2𝜋
𝑇∅)]𝑖𝑟 (12.35)
dengan:
a) 0<r<R dan 𝜃𝑖= i(2𝜋/𝑇) (0< i <T);0< 𝜌<R, 0< ∅<T;
b) R adalah resolusi frekuensi radial;
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<y<N}. Citra ini dikonversikan dari
ruang Kartesian ke ruang polar menjadi Ip = {f(r, 𝜃); 0<r<R, 0< 𝜃< 2𝜋 }, dengan
R adalah radius maksimum bentuk. Titik pusat ruang polar dijadikan sebagai pusat
bentuk dengan tujuan agar bentuk tidak tergantung pada translasi. Pusat bentuk
dihitung berdasarkan:
𝑥𝑐 =1
𝑁∑ 𝑥𝑁 −1
𝑥 =0 , 𝑦𝑐 =1
𝑀∑ 𝑦𝑀 −1
𝑦=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)
2𝜋 𝑟2 ,𝑃𝐹(0,1)
𝑃𝐹(0,0), … ,
𝑃𝐹(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 637
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) - ...
Program : gfd.m
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.0650260
Columns 7 through 12:
0.4252236 0.0846727 0.1450364 0.0607695 0.1347511
0.0291150
Columns 13 through 18:
0.1481163 0.0858275 0.0024445 0.0706047 0.0357912
0.0445491
Pemerolehan Fitur Bentuk dan Kontur 639
Columns 19 through 24:
0.0933387 0.0168520 0.0384655 0.0171787 0.0299010
0.0500069
Columns 25 through 30:
0.0469270 0.0394526 0.0039343 0.0321431 0.0205917
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
ikan-1.png
GFD1 = 0.395027
GFD2 = 0.020515 GFD3 = 0.259093
GFD4 = 0.017942
ikan-2.png
GFD1 = 0.395027 GFD2 = 0.020515 GFD3 = 0.259093
GFD4 = 0.017942
640 Pengolahan Citra Teori dan Aplikasi
Objek Fitur
ikan-3.png
GFD1 = 0.396156
GFD2 = 0.020570 GFD3 = 0.261192 GFD4 = 0.017805
ikan-4.png
GFD1 = 0.393667
GFD2 = 0.020181 GFD3 = 0.258510
GFD4 = 0.019910
ikan-5.png
GFD1 = 0.396182 GFD2 = 0.021021 GFD3 = 0.255305
GFD4 = 0.020895
guppi-1.png
GFD1 = 0.262418 GFD2 = 0.073336
GFD3 = 0.303962 GFD4 = 0.249740
kunci.png
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.
(a) Kotak pembatas
berorientasi citra
(b) Kotak pembatas
berorientasi objek
Y
X
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 [
2𝜇1,1
𝜇2,0−𝜇0,2] (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.
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
Program : bboxcitra.m
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.
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
Program : bboxobjek.m
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
ikan-1.png
0.592211 0.593791
ikan-2.png
0.592211 0.593791
ikan-3.png
0.599856 0.601117
ikan-4.png
0.544270 0.590088
ikan-5.png 0.588815 0.590142
646 Pengolahan Citra Teori dan Aplikasi
Objek Rasio Berorientasi
Citra
Rasio Berorientasi
Objek
guppy-1.png
0.522930 0.506971
kunci.png
0.536716 0.524068
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
Latihan
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