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 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('Wanita') 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
Source code dan citra yang digunakan pada pemrograman di atas dapat diunduh 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. 14 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