Pencocokan Citra
Pencocokan citra (image matching) merupakan salah satu bagian dari pengolahan citra yang dilakukan untuk mencari citra lain yang sejenis atau memiliki kemiripan. Salah satu parameter yang merepresentasikan tingkat kemiripan antara dua buah citra adalah jarak euclidean. Semakin kecil jarak euclidean antara dua buah citra maka akan semakin mirip kedua citra tersebut. Persamaan untuk menghitung jarak euclidean adalah sebagai berikut:
Jarak euclidean dapat dihitung berdasarkan ciri khusus yang dimiliki oleh suatu citra. Ciri tersebut di antaranya adalah ciri warna, ciri tekstur, ciri bentuk, ciri geometri, dan ciri ukuran.
Berikut ini merupakan contoh aplikasi sistem pencocokan citra menggunakan jarak euclidean berdasarkan pada ciri warna. Ciri warna dihitung pada ruang warna HSV yang terdiri dari komponen Hue, Saturation, dan Value. Sistem pencocokan citra diimplementasikan dalam bentuk tampilan GUI menggunakan bahasa pemrograman MATLAB.
Langkah-langkah pemrogramannya adalah sebagai berikut:
1. Mempersiapkan data base citra
Data base menggunakan sembilan buah citra yaitu berupa citra bunga, citra gedung, citra hutan, citra kucing, citra langit, citra mobil, citra ruang tidur, citra sepatu, dan citra wanita.
2. Mempersiapkan data uji citra
Sama seperti pada data base citra, pada data uji citra juga menggunakan citra yang sejenis.
3. Membuka tampilan GUI awal
Pada tampilan GUI awal ditunjukkan database yang berjumlah sembilan buah citra. Kesembilan database citra tersebut masing-masing akan dihitung jaraknya dengan sebuah citra uji. Dari kesembilan jarak yang diperoleh, penentuan pasangan citra yang cocok atau sejenis dengan citra uji adalah citra pada database yang memiliki jarak euclidean terdekat.
4. Membuka salah satu citra pada data uji yaitu citra bunga dan melakukan pengujian pencocokan citra.
Buka citra bunga
Uji citra bunga
5. Melakukan pengujian pencocokan citra terhadap citra gedung
6. Melakukan pengujian pencocokan citra terhadap citra hutan
7. Melakukan pengujian pencocokan citra terhadap citra kucing
8. Melakukan pengujian pencocokan citra terhadap citra langit
9. Melakukan pengujian pencocokan citra terhadap citra mobil
10. Melakukan pengujian pencocokan citra terhadap citra ruang tidur
11. Melakukan pengujian pencocokan citra terhadap citra sepatu
12. Melakukan pengujian pencocokan citra terhadap citra wanita
Dari hasil pengujian terhadap kesembilan buah citra di atas, tampak bahwa setiap citra yang diujikan cocok dengan salah satu satu citra sejenis yang ada pada database. Hal ini menunjukkan bahwa penghitungan jarak euclidean berdasarkan ciri warna pada ruang warna HSV cukup baik diimplementasikan dalam sistem pencocokan citra.
Tampilan source code matlab pada pemrograman di atas adalah sebagai berikut:
function varargout = pencocokan_citra(varargin) % PENCOCOKAN_CITRA MATLAB code for pencocokan_citra.fig % PENCOCOKAN_CITRA, by itself, creates a new PENCOCOKAN_CITRA or raises the existing % singleton*. % % H = PENCOCOKAN_CITRA returns the handle to a new PENCOCOKAN_CITRA or the handle to % the existing singleton*. % % PENCOCOKAN_CITRA('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in PENCOCOKAN_CITRA.M with the given input arguments. % % PENCOCOKAN_CITRA('Property','Value',...) creates a new PENCOCOKAN_CITRA or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before pencocokan_citra_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to pencocokan_citra_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help pencocokan_citra % Last Modified by GUIDE v2.5 12-Jul-2017 05:08:25 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @pencocokan_citra_OpeningFcn, ... 'gui_OutputFcn', @pencocokan_citra_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before pencocokan_citra is made visible. function pencocokan_citra_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to pencocokan_citra (see VARARGIN) % Choose default command line output for pencocokan_citra handles.output = hObject; % Update handles structure movegui(hObject,'center'); axes(handles.axes1); handles.Img1 = imread('data base\bunga 1.jpg'); imshow(handles.Img1); title('Bunga') axes(handles.axes2); handles.Img2 = imread('data base\gedung 1.jpg'); imshow(handles.Img2); title('Gedung') axes(handles.axes3); handles.Img3 = imread('data base\hutan 1.jpg'); imshow(handles.Img3); title('Hutan') axes(handles.axes4); handles.Img4 = imread('data base\kucing 1.jpg'); imshow(handles.Img4); title('Kucing') axes(handles.axes5); handles.Img5 = imread('data base\langit 1.jpg'); imshow(handles.Img5); title('Langit') axes(handles.axes6); handles.Img6 = imread('data base\mobil 1.jpg'); imshow(handles.Img6); title('Mobil') axes(handles.axes7); handles.Img7 = imread('data base\ruang tidur 1.jpg'); imshow(handles.Img7); title('Ruang Tidur') axes(handles.axes8); handles.Img8 = imread('data base\sepatu 1.jpg'); imshow(handles.Img8); title('Sepatu') axes(handles.axes9); handles.Img9 = imread('data base\wanita 1.jpg'); imshow(handles.Img9); title('Wanita') guidata(hObject, handles); % UIWAIT makes pencocokan_citra wait for user response (see UIRESUME) % uiwait(handles.fig function varargout = pencocokan_citra_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [filename, pathname] = uigetfile('*.jpg'); if ~isequal(filename,0) Img = imread(fullfile(pathname,filename)); axes(handles.axes10) imshow(Img); title('Citra Uji') else return end handles.Img = Img; guidata(hObject, handles); % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Img = rgb2hsv(handles.Img); Img1 = rgb2hsv(handles.Img1); Img2 = rgb2hsv(handles.Img2); Img3 = rgb2hsv(handles.Img3); Img4 = rgb2hsv(handles.Img4); Img5 = rgb2hsv(handles.Img5); Img6 = rgb2hsv(handles.Img6); Img7 = rgb2hsv(handles.Img7); Img8 = rgb2hsv(handles.Img8); Img9 = rgb2hsv(handles.Img9); dist1 = mean(sqrt(sum(sum((Img-Img1).^2)))); dist2 = mean(sqrt(sum(sum((Img-Img2).^2)))); dist3 = mean(sqrt(sum(sum((Img-Img3).^2)))); dist4 = mean(sqrt(sum(sum((Img-Img4).^2)))); dist5 = mean(sqrt(sum(sum((Img-Img5).^2)))); dist6 = mean(sqrt(sum(sum((Img-Img6).^2)))); dist7 = mean(sqrt(sum(sum((Img-Img7).^2)))); dist8 = mean(sqrt(sum(sum((Img-Img8).^2)))); dist9 = mean(sqrt(sum(sum((Img-Img9).^2)))); jarak = [dist1;dist2;dist3;dist4;dist5;dist6;dist7;dist8;dist9]; [~,n] = min(jarak); switch n case 1 axes(handles.axes11); handles.Img2 = imread('data base\bunga 1.jpg'); imshow(handles.Img2); title('Bunga') case 2 axes(handles.axes11); handles.Img3 = imread('data base\gedung 1.jpg'); imshow(handles.Img3); title('Gedung') case 3 axes(handles.axes11); handles.Img4 = imread('data base\hutan 1.jpg'); imshow(handles.Img4); title('Hutan') case 4 axes(handles.axes11); handles.Img1 = imread('data base\kucing 1.jpg'); imshow(handles.Img1); title('Kucing') case 5 axes(handles.axes11); handles.Img5 = imread('data base\langit 1.jpg'); imshow(handles.Img5); title('Langit') case 6 axes(handles.axes11); handles.Img6 = imread('data base\mobil 1.jpg'); imshow(handles.Img6); title('Mobil') case 7 axes(handles.axes11); handles.Img7 = imread('data base\ruang tidur 1.jpg'); imshow(handles.Img7); title('Ruang Tidur') case 8 axes(handles.axes11); handles.Img8 = imread('data base\sepatu 1.jpg'); imshow(handles.Img8); title('Sepatu') case 9 axes(handles.axes11); handles.Img9 = imread('data base\wanita 1.jpg'); imshow(handles.Img9); title('Wanita') end
File source code lengkap beserta citra yang digunakan pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code MATLAB
Posted on July 26, 2017, in Pengenalan Pola, Pengolahan Citra and tagged algoritma matlab pengolahan citra, cara menghitung jarak euclidean, cara menghitung jarak euclidean menggunakan matlab, ciri warna matlab, citra adalah, citra hsv adalah, contoh koding matlab sederhana, contoh program matlab pengolahan citra, data base citra matlab, database citra matlab, definisi citra digital, download koding gui matlab, download program gui matlab, image matching, image processing, jarak euclidean matlab, pencocokan citra, pencocokan citra matlab, pengolahan citra adalah, pengolahan citra dengan matlab, pengolahan citra sederhana, ruang warna citra hsv matlab, rumus jarak euclidean. Bookmark the permalink. 48 Comments.
Mas Adi, kalo mau tau persentase tingkat kemiripan citranya terhadap database citra kodingnya gimana ya mas ? Thx
Tingkat kemiripan antara dua buah citra dapat diukur menggunakan jarak euclidean
ini bis diterapkan pada deteksi karakter dengan template matching gk mas?
Bisa diterapkan, ummamtorres
cara memotong citra biner untuk labeling bagaimana ya mas
materi mengenai labeling terhadap citra biner dapat dilihat pada halaman berikut ini
https://pemrogramanmatlab.com/2017/07/26/pengenalan-warna-objek/
Cara mendeteksi gambar lain gimana gan dirubah dimannanya gan?
untuk mengganti citra yang digunakan dapat dilakukan pada perintah imread
kalau ada error seperti ini solusinya apa ya?
??? Error: File: pencocokan_citra.m Line: 173 Column: 3
Expression or statement is incorrect–possibly unbalanced (, {, or [.
Bisa diperiksa kembali tanda kurung yg digunakan
assalamuallaikum mas adi, tau referensi buat pencocokan citra 3d dengan template matching?terimakasih
Waalaikumsalam winda
Mudah2an ke depan terdapat materi mengenai pencocokan citra 3d dengan template matching
okeoke mas adi terima kasih
Sama sama winda
Mas Adi, Untuk memunculkan image dalam grafik plot, shingga bisa keliatan berapa jarak euclidean nya gmn ya?
untuk menampilkan plot grafik bisa menggunakan perintah plot
Mas mau tanya coding melakukan pengenalan jarak dengan data training 150 sedangakan data test 75 ? Mohon bantuannnya
Bisa dicoba diimplementasikan koding pada materi di atas
mas, saya kan pake matlab 2015 pas running bisa jalan tapi pas saya ganti citra malah error :
Error in pencocokan_citra>pushbutton2_Callback (line 127)
dist2 = mean(sqrt(sum(sum((Img-Img2).^2))));
solusinya gimana? terima kasih
oh iya, ini ukuran citra nya harus sama ya 256×256
iya betul
citra yang digunakan di atas sudah saya set dan sesuaikan dengan koding yang saya buat
assalamualaikum wr. wb
mas adi saya mau tanya soal pencocokan citra dengan megukur jarak euclidean. kan ini saya dapat tugas tentang pencocokan citra, di soal saya ada proses pelatihan dan pengujian di hasil pelatihan ada ekstraksi ciri , ciri tersebut mengahasilkan nilai mean, standart deviasi dan variance masing-masing ciri tersebut di simpan dalam bentuk teks. yang sama berinama “database” berformat txt. bagaimana yaa cara memanggil hasil ekstraksi ciri yang berbentuk teks tersebut pada proses pengujian berdasarkan jarak euclidean untuk memperoleh hasil
wassallamualaikum wr wb
waalaikumsalam
untuk membuka file berekstensi .txt bisa menggunakan perintah fopen
kok di matlab saya error?
ada solusinya mas?
sayapakai matlab 2009
Source code di atas dapat dijalankan menggunakan matlab r2015b
ok mas.makasih
akan saya coba
apakah ada pencocokan citra menggunakan deteksi tepi?
materi mengenai deteksi tepi ada pada halaman berikut ini
https://pemrogramanmatlab.com/pengolahan-citra-digital/segmentasi-citra/deteksi-tepi/
bisa dicoba diimplementasikan untuk pencocokan citra
metodenya yg di ubah dicode bagian mana ya?
soalx baru belajar matlab jadi masih bingung
pencocokan citranya kenapa cuma cocok dengan citra uji yg ada. kalau mencoba menggunakan database citra dan citra uji yg lain error?
bisa dicoba diimplementasikan metode yg lain
agar tidak error ketika menggunakan citra uji yg lain
dibagian code mana ya metodex yang harus dirubah?
maaf sebelumx karena banyak tanya soalx baru belajar matlab juga
Di bagian segmentasi bisa diubah metodenya
untuk merubah metode bagian ini yg dihilangkan ya?
Img = rgb2hsv(handles.Img);
Img1 = rgb2hsv(handles.Img1);
Img2 = rgb2hsv(handles.Img2);
Img3 = rgb2hsv(handles.Img3);
Img4 = rgb2hsv(handles.Img4);
Img5 = rgb2hsv(handles.Img5);
Img6 = rgb2hsv(handles.Img6);
Img7 = rgb2hsv(handles.Img7);
Img8 = rgb2hsv(handles.Img8);
Img9 = rgb2hsv(handles.Img9);
dist1 = mean(sqrt(sum(sum((Img-Img1).^2))));
dist2 = mean(sqrt(sum(sum((Img-Img2).^2))));
dist3 = mean(sqrt(sum(sum((Img-Img3).^2))));
dist4 = mean(sqrt(sum(sum((Img-Img4).^2))));
dist5 = mean(sqrt(sum(sum((Img-Img5).^2))));
dist6 = mean(sqrt(sum(sum((Img-Img6).^2))));
dist7 = mean(sqrt(sum(sum((Img-Img7).^2))));
dist8 = mean(sqrt(sum(sum((Img-Img8).^2))));
dist9 = mean(sqrt(sum(sum((Img-Img9).^2))));
jarak = [dist1;dist2;dist3;dist4;dist5;dist6;dist7;dist8;dist9];
[~,n] = min(jarak);
Betul alif
mas mau nanya lagi…
bagaimana cara menggunakan rumus euclidean distance??
sdh pusing cari cara pakainya tdk dpt2
pada materi di atas terdapat rumus euclidean distance baik persamaannya maupun kodingnya
bisa dipelajari
Assalamualaikum mas Adi, cara ubah gambar .jpg jadi biner dengan cara manual tanpa Matlab itu gimana ya?
mas saya mau tanya, kalau menghitung jarak perpindahan gambar t1 ke t2 itu kodingnya bagaimana ya ?
Kak code [~,b] itu tanda apa ya.. kok punya saya error’ fungsional di command window yang
Mohon penjelasannya
Program di atas tidak bisa dijalankan jika hanya dicopy paste saja
mau tanya,sya cba tutorial ini tpi knp ya klo sya ikuti source code asli tdk mau jalan
jarak = [dist1;dist2;dist3;dist4;dist5;dist6;dist7;dist8;dist9;dist10];
[~, n] = min(jarak);
tpi klo sya hilangkan sprti ini, programnya bsa dirun tpi button itu tdk brfungsi
jarak = [dist1;dist2;dist3;dist4;dist5;dist6;dist7;dist8;dist9;dist10];
[n] = min(jarak);
mohon bantuannya. terima kasih
Source code lengkap bisa dibeli di tokopedia sehingga bisa dirunning dengan baik dan dikembangkan
bang, kalau rgb2hsv itu koding buat konvert dr rgb ke hsv ya bang?
Betul, rgb2hsv merupakan perintah untuk mengkonversi citra rgb menjadi citra hsv
Permisi kak untuk file lengkapnya ada tidak ya? kalau boleh karna miss bbrp file
Source code lengkap bisa dibeli melalui tokopedia