Anda di halaman 1dari 74

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(2)
d(n) 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 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.

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

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 𝑠 ( 𝑡) . exp ( ) , 𝑛 = 0,1,2, … , 𝑁 − 1 (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) n=4
F K1 delta = (8-4)/2 =2
a + ib m + in 1 + delta
c + id o + ip
e + if q + ir
g + ih s + it
m + in a + ib
o + ip c + id
q + ir e + if
n + delta
s + it g + ih

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 587

(a) Citra ikan-5.png (b) n = 544

(c) n = 100 (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. Pertama-
tama 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 tidak dapat digunakan untuk


merekonstruksi kontur.
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

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

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 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- O(n log h) Kirkpatrick & Seidel,
Conquest 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)
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) (d)

(f)
(e)

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 Titik dengan jarak


sudut yang sama 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 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.

p1 p1
p3

p2

p2 p3

(a) p3 di kiri garis. Dalam hal ini, p2 (b) p3 di kanan garis. Dalam hal ini,
berputar ke kanan untuk menuju p2 berputar ke kiri untuk
p3 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.

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');
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) (X, Y) (X, Y)

(a, b) (a, b) (a, b)

(c, d) S (c, d) (c, d)

(e, f) a (e, f) (e, f)


m
(g, h) a (g, h) (g, h)

(a, b) (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 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 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 𝑀01
𝑥̅ = , 𝑦̅ = (12.13)
𝑀00 𝑀00

Agar momen pusat bersifat bebas terhadap translasi, penyekalaan, dan


rotasi, maka momen perlu dinormalisasi. Momen pusat ternormalisasi berupa:

𝜇 𝑖 +𝑗+2
ŋ𝑖𝑗 = 𝜇𝛾𝑝𝑞 , 𝛾 = (12.14)
00 2

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

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
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 ŋ03 =-5.6067e-4
ŋ02 = 0.04578 ŋ30 = 0.0132
ŋ20 = 0.1606 ŋ12 = -8.7615e-4
ŋ21 = 0.0024
ikan-1.png
Pemerolehan Fitur Bentuk dan Kontur 613

ŋ11 = -0.0024 ŋ03 = -5.6067e-4


ŋ02 = 0.0458 ŋ30 = 0.0132
ŋ20 = 0.1606 ŋ12 = -8.7615e-4
ŋ21 = 0.0024
ikan-2.png
ŋ11 = -0.0025 ŋ03 = -5.4819e-4
ŋ02 = 0.0456 ŋ30 = 0.0132
ŋ20 = 0.1612 ŋ12 = -8.8123e-4
ŋ21 = 0.0024
ikan-3.png
ŋ11 = 0.0529 ŋ03 = 0.0031
ŋ02 = 0.0811 ŋ30 = 0.0038
ŋ20 = 0.1251 ŋ12 = 0.0051
ŋ21 = 0.0054
ikan-4.png
ŋ11 = -0.0021 ŋ03 = -5.0026e-4
ŋ02 = 0.0463 ŋ30 = 0.0135
ŋ20 = 0.1596 ŋ12 = -0.0010
ŋ21 = 0.0023
ikan-5.png
ŋ11 = 0.0370 ŋ03 = 0.0104
ŋ02 = 0.0706 ŋ30 = -0.0449
ŋ20 = 0.1671 ŋ12 = 0.0080
ŋ21 = -0.0109
guppi-1.png
ŋ11 = -0.0032 ŋ03 = -0.0268
ŋ02 = 0.2029 ŋ30 = -0.0016
ŋ20 = 0.0796 ŋ12 = 0.0012
ŋ21 = 0.0221
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 = 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;


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
∅1 = 0.206371 ∅5 = 0.000000034
∅2 = 0.013207 ∅6 = 0.000016756
∅3 = 0.000172 ∅7 = 0.000000049
∅4 = 0.000155
ikan-1.png
∅1 = 0.206370 ∅5 = 0.000000034
∅2 = 0.013207 ∅6 = 0.000016756
∅3 = 0.000172 ∅7 = 0.000000049
∅4 = 0.000155
ikan-2.png
∅1 = 0.206774 ∅5 = 0.000000035
∅2 = 0.013390 ∅6 = 0.000017012
∅3 = 0.000173 ∅7 = 0.000000050
∅4 = 0.000156
ikan-3.png
∅1 = 0.2062254 ∅5 = 0.000000034
∅2 = 0.0131368 ∅6 = 0.000016712
∅3 = 0.0005498 ∅7 = -
∅4 = 0.0001549 0.000000042
ikan-4.png
∅1 = 0.2058433 ∅5 = 0.000000036
∅2 = 0.0128627 ∅6 = 0.000016946
∅3 = 0.0001610 ∅7 = 0.000000050
∅4 = 0.0001575
ikan-5.png
∅1 = 0.2377492 ∅5 = 0.000003528
∅2 = 0.0147675 ∅6 = 0.000133488
∅3 = 0.0022907 ∅7 = 0.000004008
∅4 = 0.0013586
guppi-1.png
∅1 = 0.2824261 ∅5 = 0.000000009
∅2 = 0.0152452 ∅6 = 0.000002673
∅3 = 0.0086765 ∅7 = 0.000000001
∅4 = 0.0000221
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 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)

𝑀𝑝
̅̅̅̅
𝑀𝑝 = (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
𝐹1 = = 1 𝑁 (12.20)
𝑚1 ∑ 𝑑(𝑛)
𝑁 𝑖=1

1 𝑁
𝑀3 ∑ |𝑑(𝑛)−𝑚1 ) |3
𝑁 𝑖=1
𝐹2 = 3 = 1 3/2 (12.21)
(𝑀2 ) 2 { ∑𝑁 |𝑑(𝑛)−𝑚1 ) |2 }
𝑁 𝑖=1

1 𝑁
𝑀 ∑ |𝑑(𝑛)−𝑚1 ) |4
𝑁 𝑖=1
𝐹3 = (𝑀 4)2 = 1 2 (12.22)
2 { ∑𝑁 |𝑑(𝑛)−𝑚1 ) |2 }
𝑁 𝑖=1

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:

3 1 𝑁
3 √ ∑𝑖=1 |𝑑(𝑛)−𝑚1 ) |3
′ √𝑀3 𝑁
𝐹2 = = 1 𝑁 (12.23)
𝑚1 ∑ 𝑑(𝑛)
𝑁 𝑖=1

4 1 𝑁
4 √ ∑𝑖=1 |𝑑(𝑛)−𝑚1 ) |4
′ √𝑀4 𝑁
𝐹3 = = 1 𝑁 (12.24)
𝑚1 ∑ 𝑑(𝑛)
𝑁 𝑖=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 untuk
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;


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
F1 = 0.2526 F2 ’ = 0.2776
F2 = 0.0195 F3 ’ = 0.2988
F3 = 0.0070 Mf = 0.0463
ikan-1.png
F1 = 0.2526 F2 ’ = 0.2776
F2 = 0.0195 F3 ’ = 0.2988
F3 = 0.0070 Mf = 0.0463
ikan-2.png
F1 = 0.2542 F2 ’ = 0.2796
F2 = 0.0199 F3 ’ = 0.3012
F3 = 0.0073 Mf = 0.0470
ikan-3.png
F1 = 0.2484 F2 ’ = 0.2744
F2 = 0.0189 F3 ’ = 0.2969
F3 = 0.0069 Mf = 0.0485
ikan-4.png
F1 = 0.2422 F2 ’ = 0.2658
F2 = 0.0173 F3 ’ = 0.2857
F3 = 0.0059 Mf = 0.0434
ikan-5.png
F1 = 0.3372 F2 ’ = 0.3991
F2 = 0.0541 F3 ’ = 0.4469
F3 = 0.0322 Mf = 0.1096
guppi-1.png
F1 = 0.3585 F2 ’ = 0.3917
F2 = 0.0501 F3 ’ = 0.4178
F3 = 0.0239 Mf = 0.0593
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𝑠 (12.26)
𝑠!( −𝑠) !( −𝑠) !
2 2

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 𝑅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𝑟 − 168𝑟7 + 105𝑟5 − 20𝑟3
9

𝑅60 (𝑟) = 20𝑟6 − 30𝑟4 + 12𝑟2 𝑅95 (𝑟) = 36𝑟9 − 56𝑟7 + 21𝑟5
−1
𝑅62 (𝑟) = 15𝑟 − 20𝑟4 + 6𝑟2
6
𝑅97 (𝑟) = 9𝑟9 − 8𝑟7
𝑅64 (𝑟) = 6𝑟6 − 5𝑟4 𝑅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 Normalisasi Normalisasi


Biner Penyekalaan Translasi

Perhitungan Normalisasi
ZMD ZMD

Gambar 12.19 Mekanisme perhitungan ZMD

Normalisasi penyekalaan dilakukan didasarkan pada persamaan

𝛽 𝛽
𝑥 ′ = 𝑥 √ 𝑚 , 𝑦 ′ = 𝑦 √𝑚 (12.31)
00 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 (12.32)
00 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

𝑁 𝑀
𝑥 ′ = 𝑥 𝑐 − , 𝑦 ′ = 𝑦𝑐 − (12.33)
2 2

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 627

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; % 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);
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
Z20 = 0,067489 Z40 = 0,031014
Z22 = 0,655700 Z42 = 0,187538
Z31 = 0,015904 Z44 = 0,575370
ikan-1.png Z33 = 0,014320
Z20 = 0,067489 Z40 = 0,031014
Z22 = 0,655700 Z42 = 0,187538
Z31 = 0,015904 Z44 = 0,575370
ikan-2.png Z33 = 0,014320
Z20 = 0,066243 Z40 = 0,030826
Z22 = 0,634994 Z42 = 0,182968
Z31 = 0,014238 Z44 = 0,552235
ikan-3.png Z33 = 0,008975
634 Pengolahan Citra Teori dan Aplikasi

Objek Fitur
Z20 = 0,087641 Z40 = 0,050947
Z22 = 0,585965 Z42 = 0,191575
Z31 = 0,013469 Z44 = 0,403293
ikan-4.png Z33 = 0,042353
Z20 = 0,065993 Z40 = 0,029108
Z22 = 0,655143 Z42 = 0,187842
Z31 = 0,008639 Z44 = 0,570436
ikan-5.png Z33 = 0,036051
Z20 = 0,073650 Z40 = 0,034444
Z22 = 0,611287 Z42 = 0,180690
Z31 = 0,058099 Z44 = 0,470811
guppi-1.png Z33 = 0,058516
Z20 = 0,099800 Z40 = 0,015126
Z22 = 0,440984 Z42 = 0,192140
Z31 = 0,112749 Z44 = 0,122398
Z33 = 0,010853
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 (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𝜋
𝑃𝐹2 (𝜌, ∅) = ∑𝑟 ∑𝑖 𝑓(𝑟, 𝜃𝑖 )exp[𝑗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
𝑥 𝑐 = 𝑁 ∑𝑁 −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) 𝑃𝐹( 𝑚,𝑛)


𝐺𝐹𝐷 = { , 𝑃𝐹 (0,0) , … , 𝑃𝐹 (0,0) , … , 𝑃𝐹(0,0) , … , 𝑃𝐹 (0,0) } (12.38)
2𝜋 𝑟2

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

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


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
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 Fitur
GFD1 = 0.396156
GFD2 = 0.020570
GFD3 = 0.261192
ikan-3.png GFD4 = 0.017805
GFD1 = 0.393667
GFD2 = 0.020181
GFD3 = 0.258510
ikan-4.png GFD4 = 0.019910
GFD1 = 0.396182
GFD2 = 0.021021
GFD3 = 0.255305
ikan-5.png GFD4 = 0.020895
GFD1 = 0.262418
GFD2 = 0.073336
GFD3 = 0.303962
guppi-1.png GFD4 = 0.249740
GFD1 = 0.386401
GFD2 = 0.003771
GFD3 = 0.346719
kunci.png 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.



X

(a) Kotak pembatas (b) Kotak pembatas


berorientasi citra 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
𝜃 = 𝑡𝑎𝑛−1 [ ] (12.41)
2 𝜇2,0−𝜇0,2

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 Rasio Berorientasi
Citra 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 Rasio Berorientasi


Citra Objek

guppy-1.png
0.522930 0.506971

kunci.png
0.536716 0.524068

 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

Anda mungkin juga menyukai