BAB 14
Aplikasi
Temu Kembali
Citra
Setelah bab ini berakhir, diharapkan pembaca dapat memahami berbagai hal yang berhubungan dengan temu kembali citra dan mampu mempraktikkannya.
Aplikasi temu kembali citra Perhitungan jarak antardua citra Contoh penerapan jarak
14.1 Pengantar Aplikasi Temu Kembali Citra
Temu kembali citra (image retrieval) merupakan proses untuk mendapatkan sejumlah citra berdasarkan masukan satu citra. Istilah yang lebih spesifik lagi adalah content based image retrieval (CBIR) atau temu kembali citra berdasarkan isinya. Istilah tersebut dikemukakan pertama kali oleh Kato pada tahun 1992 (Zhang, 2002). Awalnya, CBIR digunakan untuk pencarian citra secara otomatis di dalam suatu database didasarkan pada fitur warna dan bentuk. Sejak saat itu, bermunculan berbagai sistem CBIR. Contoh yang terkenal adalah Query By Image Content (QBIC) yang dikembangkan oleh IBM. Pada perkembangan selanjutnya, fitur tekstur juga dimasukkan sebagai bagian untuk melakukan pencarian citra.
Prinsip temu kembali citra ditunjukkan pada Gambar 14.1. Fitur sejumlah objek telah disimpan di dalam database. Selanjutnya, ketika suatu citra dijadikan sebagai bahan query, fitur akan dihitung setelah melalui prapemrosesan dan segmentasi. Fitur yang diperoleh dibandingkan dengan fitur semua objek yang terdapat di dalam database, melalui perhitungan jarak fitur. Hasil jarak ini sering disebut sebagai skor atau ranking. Seluruh skor diurutkan dari yang paling bernilai kecil ke yang paling besar. Objek-objek yang menghasilkan skor rendah adalah citra yang mirip dengan citra query. Untuk membatasi, hanya n citra yang disajikan sebagai hasil query. Dalam hal ini, nilai n dapat ditentukan oleh sistem ataupun pengguna.
Citra
Masukan Prapemrosesan dan
Segmentasi Ekstraksi Fitur Database Perhitungan Jarak Fitur Pengurutan Jarak Pemilihan n Citra Hasil
Gambar 14.1 Prinsip temu kembali citra
14.2 Perhitungan Jarak Antara Dua Citra
Jarak merupakan pendekatan yang umum dipakai untuk mewujudkan pencarian citra. Fungsinya adalah untuk menentukan kesamaan atau ketidaksamaan dua vektor fitur. Tingkat kesamaan dinyatakan dengan suatu skor atau ranking. Semakin kecil nilai ranking, semakin dekat kesamaan kedua vektor tersebut.
Pengukuran jarak dilakukan dengan beberapa cara. Beberapa metode yang umum dipakai dijelaskan di dalam subbab ini.
14.2.1 Jarak Euclidean
Jarak Euclidean didefinisikan sebagai berikut:
𝑗(𝑣1, 𝑣2) = √∑𝑁 (𝑣1(𝑘) − 𝑣2(𝑘))2
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N menyatakan panjang vektor. Apabila vektor memiliki dua nilai, jarak Euclidean dapat dibayangkan sebagai sisi miring segitiga (Gambar 14.2(a)).
(a) jarak Euclidean (b) Jarak city-block (c) Jarak Chebychef y x x x y y max(y, x) y+x √𝑥2+ 𝑦2
Gambar 14.2 Gambaran jarak Euclidean, City-block, dan Chebychef
Sebagai contoh, terdapat dua vektor seperti berikut:
𝑣1 = [ 4,3, 6] 𝑣2 = [ 2, 3, 7]
Jarak Euclidean kedua vektor adalah:
𝑗𝑎𝑟𝑎𝑘 = √(4 − 2)2+ (3 − 3)2 + (6 − 7)2= √5 = 2,2361
Jarak Euclidean merupakan jarak yang umum dipakai dalam temu kembali citra. Beberapa penelitian yang memanfaatkan jarak ini antara lain dilakukan oleh Hastuti, dkk. (2009) dan Kadir, dkk. (2011a).
14.2.2 Jarak City-Block
Jarak city-block didefinisikan sebagai berikut:
𝑗(𝑣1, 𝑣2) = ∑𝑁 |𝑣1(𝑘) − 𝑣2(𝑘)|
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N menyatakan panjang vektor. Apabila vektor memiliki dua nilai, jarak city-block dapat dibayangkan sebagai jarak vertikal plus horizontal dari vektor pertama ke vektor kedua (Gambar 14.2(b)).
Sebagai contoh, terdapat dua vektor seperti berikut:
𝑣1 = [ 4,3, 6] 𝑣2 = [ 2, 3, 7]
Jarak city-block kedua vektor tersebut berupa
𝑗𝑎𝑟𝑎𝑘 = |4 − 2| + |3 − 3| + |6 − 7| = 3
14.2.3 Jarak Kotak Catur
Jarak kotak catur atau dikenal pula dengan nama jarak Chebychef didefinisikan sebagai berikut:
𝑗(𝑣1, 𝑣2) = max𝑘=1→𝑁 (|𝑣1(𝑘) − 𝑣2(𝑘)|) (14.3)
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N menyatakan panjang vektor. Apabila vektor memiliki dua nilai, jarak dapat dibayangkan sebagai jarak terpanjang antara jarak horizontal dan jarak vertikal (Gambar 14.2(c)).
Sebagai contoh, dengan dua vektor yang sama dengan di depan (𝑣1 = [ 4, 3, 6] dan 𝑣2 = [ 2, 3, 7]), jarak kotak catur kedua vektor tersebut berupa
𝑗𝑎𝑟𝑎𝑘 = max (|4 − 2|, |3 − 3|, |6 − 7|) = 2
14.2.4 Jarak Minkowski
𝑗(𝑣1, 𝑣2) = √∑𝑁 |(𝑣1(𝑘) − 𝑣2(𝑘)|𝑝 𝑘 =1
1/𝑝
(14.4)
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N menyatakan panjang vektor. Apabila p bernilai 1, jarak berupa city-block. Apabila p bernilai 2, jarak berupa Euclidean.
Sebagai contoh, dengan dua vektor yang sama dengan di depan (𝑣1 = [ 4, 3, 6] dan 𝑣2 = [ 2, 3, 7]), jarak Minkowski kedua vektor tersebut untuk p berupa 3 berupa:
𝑗𝑎𝑟𝑎𝑘 = 1/3√(4 − 2)3+ (3 − 3)3+ (6 − 7)3 = 1/3√9= 2,0801
14.2.5 Jarak Canberra
Jarak Canberra didefinisikan sebagai berikut:
𝑗(𝑣1, 𝑣2) = ∑ |𝑣1(𝑘)−𝑣2(𝑘)|
|𝑣1(𝑘)|+|𝑣1(𝑘)| 𝑁
𝑘 =1 (14.5)
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N menyatakan panjang vektor.
Sebagai contoh, dengan dua vektor yang sama dengan di depan (𝑣1 = [ 4, 3, 6] dan 𝑣2 = [ 2, 3, 7]), jarak Canberra kedua vektor tersebut berupa
𝑗𝑎𝑟𝑎𝑘 =|4 − 2| 4 + 2 + |3 − 3| 3 + 3 + |6 − 7| 6 + 7 = 2 6+ 0 6+ 1 13= 0,4103
14.2.6 Jarak Bray Curtis
Jarak Bray Curtis atau jarak Sorensen (Putra, 2010) didefinisikan sebagai berikut:
𝑗(𝑣1, 𝑣2) = ∑𝑁𝑘=1|𝑣1(𝑘)−𝑣2(𝑘)|
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N menyatakan panjang vektor.
Sebagai contoh, dengan dua vektor yang sama dengan di depan (𝑣1 = [ 4, 3, 6] dan 𝑣2 = [ 2, 3, 7]), jarak Bray Curtis kedua vektor tersebut berupa
𝑗𝑎𝑟𝑎𝑘 = |4−2|+|3−3|+|6−7| 4+2+3+3+6+7 =
2+1
25 = 0,12
14.2.7 Divergensi Kullback Leibler
Divergensi Kullback Leibler (Deselaers, 2003) didefinisikan sebagai berikut:
𝐾𝐿(𝑣1, 𝑣2) = ∑𝑁 𝑣1(𝑘)
𝑘=1 𝑙𝑜𝑔
𝑣1(𝑘)
𝑣2(𝑘) (14.6)
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N menyatakan panjang vektor.
Sebagai contoh, dengan dua vektor yang sama dengan di depan (𝑣1 = [ 4, 3, 6] dan 𝑣2 = [ 2, 3, 7]), jarak menurut divergensi Kullback Leibler kedua vektor tersebut berupa
𝑗𝑎𝑟𝑎𝑘 = 4 ∗ log (4 2) + 3 ∗ log ( 3 3) + 6 ∗ log ( 6 7) = 1,8477
14.2.8 Divergensi Jensen Shannon
Divergensi Jensen Shannon (Deselaers, 2003) didefinisikan sebagai berikut: 𝐽𝐷(𝑣1, 𝑣2) = ∑𝑁 𝑣1(𝑘) 𝑘=1 . 𝑙𝑜𝑔 2 ∗ 𝑣1(𝑘) 𝑣1(𝑘) + 𝑣2(𝑘)+ 𝑣2(𝑘). 𝑙𝑜𝑔 2 ∗ 𝑣2(𝑘) 𝑣1(𝑘) + 𝑣2(𝑘) (14.6)
Dalam hal ini, v1 dan v2 adalah dua vektor yang jaraknya akan dihitung dan N menyatakan panjang vektor.
Sebagai contoh, dengan dua vektor yang sama dengan di depan (𝑣1 = [ 4, 3, 6] dan 𝑣2 = [ 2, 3, 7]), jarak menurut divergensi Jensen Shannon kedua vektor tersebut berupa
𝑗𝑎𝑟𝑎𝑘 = 4 ∗ log (2∗4 4+2) + 3 ∗ log ( 2∗3 3+3) + 6 ∗ log ( 2∗6 6+7) + 2 ∗ log (2∗2 4+2) + 3 ∗ log ( 2∗3 3+3) + 7 ∗ log ( 2∗7 6+7) = 0,3783
14.3 Contoh Penerapan Jarak
Untuk memahami manfaat jarak dua vektor dalam pengolahan citra, perhatikan contoh berikut.
Program : queryzer.m
function queryzer(berkas)
% QUERYZER Berguna untuk melakukan query dengan % menggunakan momen Zernike.
% Citra yang akan menjadi acuan Citra{1} = 'C:\Image\ikan-4.png'; Citra{2} = 'C:\Image\ikan-2.png'; Citra{3} = 'C:\Image\ikan-3.png'; Citra{4} = 'C:\Image\ikan-1.png'; Citra{5} = 'C:\Image\guppi-4.png'; Citra{6} = 'C:\Image\guppi-2.png'; Citra{7} = 'C:\Image\guppi-3.png'; Citra{8} = 'C:\Image\guppi-1.png';
% Proses momen Zernike dan hitung jarak City-block Query = im2bw(imread(berkas), 0.5);
ZQuery = zermoment(Query, 10); Hasil = [];
for i=1 : length(Citra)
disp(sprintf('proses terhadap citra %s', Citra{i})); Ref = im2bw(imread(Citra{i}), 0.5);
ZRef = zermoment(Ref, 10);
jarak = 0;
for j=1 : length(ZRef)
jarak = jarak + abs(ZRef(j) - ZQuery(j)); end Hasil(i).nama = Citra{i}; Hasil(i).jarak = jarak; end
% Urutkan data pada array Hasil jum = length(Hasil);
for p = 2: jum x = Hasil(p);
% Sisipkan x ke dalam data[1..p-1] q = p - 1;
ketemu = 0;
while ((q >= 1) && (~ketemu)) if (x.jarak < Hasil(q).jarak) Hasil(q+1) = Hasil(q); q = q - 1; else ketemu = 1; end Hasil(q+1) = x; end end % Tampilkan hasil disp('Hasil pencocokan: '); for i=1 : jum
disp(sprintf('Citra %s - Jarak: %f',Hasil(i).nama, ... Hasil(i).jarak)); end
Akhir Program
Fungsi queryzer memerlukan masukan berupa nama citra. Citra tersebutlah yang akan dibandingkan dengan delapan citra yang berfungsi sebagai citra referensi (database). Jarak citra masukan terhadap kedelapan citra dihitung dengan menggunakan jarak city-block. Selanjutnya, dilakukan pengurutan dari jarak terkecil ke jarak terbesar. Hasilnya menyatakan kesamaan dengan citra masukan. Semakin kecil nilai jarak berarti semakin dekat dengan citra masukan.
Berikut adalah contoh pemanggilan fungsi queryzer:
>> queryzer('C:\Image\ikan-5.png') proses terhadap citra C:\Image\ikan-4.png proses terhadap citra C:\Image\ikan-2.png proses terhadap citra C:\Image\ikan-3.png proses terhadap citra C:\Image\ikan-1.png
proses terhadap citra C:\Image\guppi-4.png proses terhadap citra C:\Image\guppi-2.png proses terhadap citra C:\Image\guppi-3.png proses terhadap citra C:\Image\guppi-1.png Hasil pencocokan:
Citra C:\Image\ikan-3.png - Jarak: 0.311540 Citra C:\Image\ikan-2.png - Jarak: 0.317283 Citra C:\Image\ikan-1.png - Jarak: 0.317283 Citra C:\Image\ikan-4.png - Jarak: 1.063666 Citra C:\Image\guppi-2.png - Jarak: 1.896431 Citra C:\Image\guppi-1.png - Jarak: 1.901020 Citra C:\Image\guppi-3.png - Jarak: 1.908009 Citra C:\Image\guppi-4.png - Jarak: 1.913503 >>
Sebagai pembanding, guppi-5.png dapat dipakai sebagai bahan query. Akan terlihat bahwa ikan guppi-1.png hingga guppi-4.png akan memiliki jarak yang lebih pendek dibanding dengan kelompok ikan-1.png hingga ikan-4.png.
14.4 Pengembangan Lebih Lanjut
Contoh temu kembali citra yang dicontohkan di Subbab 14.3 mempunyai kelemahan yaitu lama untuk memperoleh fitur citra. Untuk mempercepat pencarian, fitur untuk semua citra referensi dapat dihitung terlebih dulu melalui suatu skrip dan kemudian disimpan di dalam suatu database. Dengan demikian, pembandingan fitur dilakukan secara langsung, tanpa perlu menyiapkan perolehan fitur.
Sebagai gambaran, perhatikan skrip berikut.
Program : dbfitur.m
% menggunakan momen Zernike dan kemudian % menyimoannya ke dalaa file .MAT
% Citra yang akan menjadi acuan Citra{1} = 'C:\Image\ikan-4.png'; Citra{2} = 'C:\Image\ikan-2.png'; Citra{3} = 'C:\Image\ikan-3.png'; Citra{4} = 'C:\Image\ikan-1.png'; Citra{5} = 'C:\Image\guppi-4.png'; Citra{6} = 'C:\Image\guppi-2.png'; Citra{7} = 'C:\Image\guppi-3.png'; Citra{8} = 'C:\Image\guppi-1.png';
% Proses menghitung momen Zernike Fitur = [];
for i=1 : length(Citra)
disp(sprintf('Menghitung fitur citra %s', Citra{i})); Image = im2bw(imread(Citra{i}), 0.5); Z.momen = zermoment(Image, 10); Z.nama = Citra(i); Fitur(i).momen = Z.momen; Fitur(i).nama = Z.nama; end
% Simpan ke file dbfitur.mat save('dbfitur', 'Fitur');
clear Citra Fitur;
Akhir Program
Skrip di atas cukup dipanggil sekali, seperti berikut:
>> dbfitur
Menghitung fitur citra C:\Image\ikan-4.png Menghitung fitur citra C:\Image\ikan-2.png Menghitung fitur citra C:\Image\ikan-3.png Menghitung fitur citra C:\Image\ikan-1.png Menghitung fitur citra C:\Image\guppi-4.png Menghitung fitur citra C:\Image\guppi-2.png Menghitung fitur citra C:\Image\guppi-3.png Menghitung fitur citra C:\Image\guppi-1.png >>
Dengan cara seperti itu, fitur kedelapan citra akan tersimpan di file dbfitur.mat. Selanjutnya, temu kembali citra dapat dilakukan melalui fungsi queryzer2. Isinya seperti berikut.
Program : queryzer2.m
function queryzer2(berkas)
% QUERYZER2 Berguna untuk melakukan query dengan % menggunakan momen Zernike dengan membaca % data acuan dari file dbfitur.
load dbfitur; % Memuat database fitur
% Proses momen Zernike dan hitung jarak City-block Query = im2bw(imread(berkas), 0.5);
ZQuery = zermoment(Query, 10); Hasil = [];
jumFitur = length(Fitur(1).momen); for i=1 : length(Fitur)
nama = Fitur(i).nama;
jarak = 0;
for j=1 : jumFitur
jarak = jarak + abs(ZQuery(j) - Fitur(i).momen(j)); end Hasil(i).nama = Fitur(i).nama; Hasil(i).jarak = jarak; end
% Urutkan data pada array Hasil jum = length(Hasil);
for p = 2: jum x = Hasil(p);
% Sisipkan x ke dalam data[1..p-1] q = p - 1;
ketemu = 0;
while ((q >= 1) && (~ketemu)) if (x.jarak < Hasil(q).jarak) Hasil(q+1) = Hasil(q); q = q - 1; else ketemu = 1; end Hasil(q+1) = x; end end
% Tampilkan hasil secara visual
disp('Hasil pencocokan dapat dilihat pada jendela gambar'); subplot(3,3,1);
G = imread(berkas); imshow(G); title('Query');
for i=1 : jum
subplot(3,3, i+1);
G = imread(char(Hasil(i).nama)); imshow(G); title(num2str(Hasil(i).jarak));
end
Akhir Program
Contoh penggunaan fungsi queryzer2 seperti berikut.
>> queryzer2('C:\Image\ikan-5.png')
Hasil pencocokan dapat dilihat pada jendela gambar >>
Hasilnya dapat dilihat pada Gambar 14.3. Gambar tersebut memperlihatkan citra query dan citra-citra hasil yang dilengkapi dengan nilai jarak antara citra bersangkutan terhadap citra query, yang telah diurutkan dari jarak terpendek ke jarak terpanjang.
Gambar 14.3 Hasil query secara visual berdasar urutan besar jarak
1. Jelaskan pengertian temu kembali citra. 2. Terdapat dua vektor seperti berikut:
𝑣1 = [ 3,8, 6,5] 𝑣2 = [ 4, 6, 7,8]
Hitunglah jarak menurut: a) jarak City-block b) jarak Euclidean c) jarak Canberra d) jarak Chebychef e) jarak Bray Curtis
3. Tunjukkan bahwa rumus jarak Chebychef 𝑗(𝑣1, 𝑣2) = ∑ |𝑣1(𝑘) − 𝑣2(𝑘)| 𝑁 𝑘=1 ∑𝑁 𝑣1(𝑘) + 𝑘=1 ∑𝑁𝑘=1𝑣2(𝑘) identik dengan 𝑗(𝑣1, 𝑣2) = ∑ |𝑣1(𝑘) − 𝑣2(𝑘)| 𝑁 𝑘 =1 ∑𝑁 (𝑣1(𝑘) + 𝑣2(𝑘)) 𝑘=1
4. Buatlah fungsi semacam queryzer, tetapi fitur yang digunakan berupa momen Hu.
5. Buatlah fungsi semacam queryzer, tetapi fitur yang digunakan menggunakan deskriptor Fourier dengan jumlah:
(a) 30 buah (b) 40 buah (c) 50 buah
Amati hasilnya. Adakah kesimpulan yang dapat diambil?
6. Cobalah untuk membuat tiga fungsi yang melakukan perhitungan jarak melalui momen Zernike dengan menggunakan pendekatan:
a) jarak Euclidean b) jarak Canberra c) jarak Chebychef d) jarak Bray Curtis
Amati hasil yang didapatkan. Apakah dapat ditarik sesuatu kesimpulan dari situ?
6. Cobalah pula untuk melakukan pengukuran jarak terhadap fitur tekstur. Bandingkan beberapa metode untuk memperoleh fitur tekstur yang dibahas dalam Bab 13.