Ekstraksi
Fitur Bentuk dan
Kontur
1. Pencarian citra: Fitur dipakai untuk mencari objek-objek tertentu yang berada
di dalam database.
Pemerolehan Fitur Bentuk dan Kontur 577
Dalam hal ini, (𝑦̅, 𝑥̅) menyatakan pusat massa kontur, yang diperoleh melalui
rumus
1 1
𝑦̅ = 𝑁 ∑𝑁 ̅ = 𝑁 ∑𝑁
𝑖 𝑦( 𝑖 ) , 𝑥 𝑖 𝑥(𝑖 ) (12.2)
d(1)
d(2)
d(n) d(3)
d(4)
(𝑦̅, 𝑥̅ )
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
Program : tandatangan.m
[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
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.
Program : perolehFD.m
jum = length(Kontur);
Akhir Program
1 −𝑗2𝜋𝑛𝑡
𝑢𝑜 = ∑𝑁
𝑡 =0 𝑠 ( 𝑡) . exp ( ) , 𝑛 = 0,1,2, … , 𝑁 − 1 (12.3)
𝑁 𝑁
Pemerolehan Fitur Bentuk dan Kontur 583
>> 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
>> plotFD(F)
Program : fiturFourier.m
Pemerolehan Fitur Bentuk dan Kontur 585
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
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)
(f) n = 25 (e) n = 20
(g) n = 15 (h) n = 10
Program : normalisasiFD.m
G = F;
Akhir Program
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
>> 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
𝜇
𝑐 = 𝜎𝑅 (12.4)
𝑅
1
𝜇𝑅 = 𝑁 ∑𝑁
𝑖 =1|( 𝑦𝑖 , 𝑥 𝑖 ) − ( 𝑦
̅𝑐, 𝑥̅ 𝑐 )| (12.5)
dan r berupa
Pemerolehan Fitur Bentuk dan Kontur 591
1
𝜎𝑅 = ∑𝑁 ̅𝑐 , 𝑥̅ 𝑐 )| − 𝜇𝑅 ]2
𝑖 =1 [ |( 𝑦𝑖 , 𝑥 𝑖 ) − ( 𝑦 (12.6)
𝑁
Program : sifatbundar.m
[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;
c = mu / sigma;
Akhir Program
592 Pengolahan Citra Teori dan Aplikasi
Fungsi im2bw diperlukan jika citra tidak berupa citra biner. Tabel 12.1
memperlihatkan berbagai objek dan nilai sifat bundarnya.
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
Dasar untuk memperoleh convex hull pada algoritma Graham Scan dibagi
menjadi tiga tahap.
p0
(Titik jangkar)
Masukan:
P = n piksel
Keluaran:
Himpunan convex hull
GrahamScan(BW):
1. P0 Titik jangkar
(a) (b)
(c) (d)
(f)
(e)
(a) (b)
Program : convexhull.m
jum = length(Kontur);
terkecil = i;
else
if Kontur(i,1) < Kontur(terkecil, 1)
terkecil = i;
end
end
end
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;
Piksel(q+1) = x;
end
end
% Siapkan tumpukan
H = [];
top = 0;
% Proses pemindaian
Pemerolehan Fitur Bentuk dan Kontur 599
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;
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
% Balik urutannya
for i=1 : indeks
CH(indeks+1-i,1) = C(i,1);
CH(indeks+1-i,2) = C(i,2);
end
dx = 0.00000001;
end
s = atan(dy / dx);
if s < 0
s = s + pi;
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:
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
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:
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.
hold off;
Akhir Program
>> tesconvex('C:\Image\guppi-1.png')
𝑝𝑒𝑟𝑖𝑚𝑒𝑡𝑒𝑟 𝑘𝑜𝑛𝑣𝑒𝑘𝑠
𝐾𝑜𝑛𝑣𝑒𝑘𝑠𝑖𝑡𝑎𝑠 = (12.7)
𝑝𝑒𝑟𝑖𝑚𝑒𝑡𝑒𝑟 𝑜𝑏𝑗𝑒𝑘
𝑙𝑢𝑎𝑠 𝑜𝑏𝑗𝑒𝑘
𝑆𝑜𝑙𝑖𝑑𝑖𝑡𝑎𝑠 = (12.8)
𝑙𝑢𝑎𝑠 𝑘𝑜𝑛𝑣𝑒𝑘𝑠
Program : konveksitas.m
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);
% Peroleh rasio
konv = perimeter_konveks / perimeter_objek;
Akhir Program
Program : soliditas.m
Kontur = inbound_tracing(BW);
CHull = convexhull(Kontur);
X = CHull(:,2);
Y = CHull(:,1);
X = [X; X(1)];
Y = [Y; Y(1)];
luas_objek = luas2(BW);
% Peroleh rasio
sol = luas_objek / luas_konveks;
Akhir Program
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
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
>> soliditas(Img2)
ans = 0.79644
>>
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
[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
>>
Proyeksi horizontal
Proyeksi vertikal
𝑀𝑖𝑗 = ∑𝑀 𝑁 𝑖 𝑗
𝑥 =1 ∑𝑦=1 𝑥 𝑦 𝐼(𝑥, 𝑦) (12.11)
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
𝜇 𝑖 +𝑗+2
ŋ𝑖𝑗 = 𝜇𝛾𝑝𝑞 , 𝛾 = (12.14)
00 2
Program : normomen.m
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
[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
[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
∅1 = ŋ20 + ŋ02
Program : momenhu.m
Akhir Program
>> format('long');
>> Img = im2bw(imread('C:\Image\guppi-1.png'),0.5);
>> X = momenhu(Img)
X =
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
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)
𝑁
𝑀𝑝
̅̅̅̅
𝑀𝑝 = (12.19)
( 𝑀2 ) 𝑝/2
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
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
Program : mjarakpusat.m
Kontur = inbound_tracing(F);
[m, n] = size(F);
[xp, yp] = centroid(F);
jum = length(Kontur);
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
Akhir Program
F1 = 0.358466495430004
F2 = 0.0501126615340028
F3 = 0.0239217027470453
F2a = 0.391651322336318
F3a = 0.417780786529233
mf = 0.0593142910992286
>>
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:
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
𝑅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
𝑝+1
𝑍𝑝𝑞 = 𝜋
∫𝑦 ∫𝑥 𝑓(𝑦, 𝑥 ). 𝑉 ∗ 𝑝𝑞 (𝑦, 𝑥 ) 𝑑𝑦 𝑑𝑥; 𝑥 2 + 𝑦 2 ≤ 1 (12.27)
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)
𝜋
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
Perhitungan Normalisasi
ZMD ZMD
𝛽 𝛽
𝑥 ′ = 𝑥 √ 𝑚 , 𝑦 ′ = 𝑦 √𝑚 (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
𝑍𝑝𝑞
𝑍𝑝𝑞 ′ = (12.34)
𝑚00
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
if nargin < 3
tampil = false;
end
[m, n] = size(B);
[m, n] = size(C);
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;
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 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
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;
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
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
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
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
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
(a) Citra dalam ruang polar (b) Citra dalam ruang polar diubah ke ruang Kartesian
a) tidak perlu mengetahui informasi kontur yang boleh saja tidak tersedia;
b) dapat menangkap isi dalam bentuk;
c) lebih andal terhadap variasi bentuk.
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.
𝑟 2𝜋
𝑃𝐹2 (𝜌, ∅) = ∑𝑟 ∑𝑖 𝑓(𝑟, 𝜃𝑖 )exp[𝑗2𝜋(𝑅 𝜌 + 𝑇 ∅)] (12.35)
dengan:
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)
𝑦−𝑦𝑐
𝑟 = √(𝑥 − 𝑥 𝑐 )2 + (𝑦 − 𝑦𝑐 )2 , 𝜃 = 𝑎𝑟𝑐𝑡𝑎𝑛 (12.37)
𝑥−𝑥 𝑐
Program : gfd.m
Kontur = inbound_tracing(F);
jum = length(Kontur);
panjang = ((xi-x_pusat)^2+(yi-y_pusat)^2)^0.5;
if panjang > rad_maks
rad_maks = panjang;
end
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
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
Columns 1 through 6:
Column 31:
0.0162803
>>
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.
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
X
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:
1 2𝜇1,1
𝜃 = 𝑡𝑎𝑛−1 [ ] (12.41)
2 𝜇2,0−𝜇0,2
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
Program : bboxcitra.m
[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
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
>>
Program : bboxobjek.m
if nargin < 2
tampil = true;
end
jum = length(Kontur);
[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
% 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 rasio berorientasi objek dan citra untuk berbagai citra dapat dilihat pada
Tabel 12.10.
ikan-2.png
0.592211 0.593791
ikan-3.png
0.599856 0.601117
ikan-4.png
0.544270 0.590088
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