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 , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 48 Comments.

  1. Mas Adi, kalo mau tau persentase tingkat kemiripan citranya terhadap database citra kodingnya gimana ya mas ? Thx

  2. ini bis diterapkan pada deteksi karakter dengan template matching gk mas?

  3. cara memotong citra biner untuk labeling bagaimana ya mas

  4. Cara mendeteksi gambar lain gimana gan dirubah dimannanya gan?

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

  6. assalamuallaikum mas adi, tau referensi buat pencocokan citra 3d dengan template matching?terimakasih

  7. Mas Adi, Untuk memunculkan image dalam grafik plot, shingga bisa keliatan berapa jarak euclidean nya gmn ya?

  8. Mas mau tanya coding melakukan pengenalan jarak dengan data training 150 sedangakan data test 75 ? Mohon bantuannnya

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

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

  11. kok di matlab saya error?
    ada solusinya mas?
    sayapakai matlab 2009

  12. apakah ada pencocokan citra menggunakan deteksi tepi?

  13. pencocokan citranya kenapa cuma cocok dengan citra uji yg ada. kalau mencoba menggunakan database citra dan citra uji yg lain error?

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

  15. mas mau nanya lagi…
    bagaimana cara menggunakan rumus euclidean distance??
    sdh pusing cari cara pakainya tdk dpt2

  16. windadwiwulanjari

    Assalamualaikum mas Adi, cara ubah gambar .jpg jadi biner dengan cara manual tanpa Matlab itu gimana ya?

  17. mas saya mau tanya, kalau menghitung jarak perpindahan gambar t1 ke t2 itu kodingnya bagaimana ya ?

  18. Kak code [~,b] itu tanda apa ya.. kok punya saya error’ fungsional di command window yang

    Mohon penjelasannya

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

  20. bang, kalau rgb2hsv itu koding buat konvert dr rgb ke hsv ya bang?

  21. Fajar Rachman Avissena

    Permisi kak untuk file lengkapnya ada tidak ya? kalau boleh karna miss bbrp file

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: