Pengolahan Citra Digital untuk Mendeteksi Warna dan Bentuk Obyek
Berikut ini merupakan contoh aplikasi pemrograman GUI Matlab untuk mendeteksi warna dan bentuk suatu objek pada citra digital.
Proses deteksi warna diawali dengan mengkonversi ruang warna citra RGB (Red, Green, Blue) menjadi HSV (Hue, Saturation, Value). Selanjutnya proses klasifikasi warna dilakukan berdasarkan pengelompokan nilai Hue.
Sedangkan proses deteksi bentuk diawali dengan mengkonversi ruang warna citra RGB menjadi grayscale. Setelah itu dilakukan thresholding sehingga diperoleh citra biner. Kemudian dilakukan ekstraksi ciri morfologi dari citra biner berdasarkan parameter eccentricity dan metric. Proses klasifikasi citra dilakukan berbasis aturan (rule based) sederhana.
3. Mendeteksi obyek dengan warna merah
4. Mendeteksi obyek dengan warna orange/jingga
5. Mendeteksi obyek dengan warna hijau
6. Mendeteksi obyek dengan warna biru
7. Mendeteksi obyek dengan warna ungu
8. Mendeteksi obyek dengan warna kuning
9. Mendeteksi obyek dengan bentuk polygon (segi banyak)
10. Mendeteksi obyek dengan bentuk segi-tiga
11. Mendeteksi obyek dengan bentuk kotak
12. Mendeteksi obyek dengan bentuk lingkaran
File source code lengkap beserta citra untuk mendeteksi warna dan bentuk dapat diperoleh melalui halaman berikut ini: Source Code
Sedangkan tampilan kodingnya adalah:
function varargout = Color_and_Shape_Detection(varargin) % COLOR_AND_SHAPE_DETECTION MATLAB code for Color_and_Shape_Detection.fig % COLOR_AND_SHAPE_DETECTION, by itself, creates a new COLOR_AND_SHAPE_DETECTION or raises the existing % singleton*. % % H = COLOR_AND_SHAPE_DETECTION returns the handle to a new COLOR_AND_SHAPE_DETECTION or the handle to % the existing singleton*. % % COLOR_AND_SHAPE_DETECTION('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in COLOR_AND_SHAPE_DETECTION.M with the given input arguments. % % COLOR_AND_SHAPE_DETECTION('Property','Value',...) creates a new COLOR_AND_SHAPE_DETECTION or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before Color_and_Shape_Detection_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to Color_and_Shape_Detection_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 Color_and_Shape_Detection % Last Modified by GUIDE v2.5 02-Jul-2016 01:44:03 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Color_and_Shape_Detection_OpeningFcn, ... 'gui_OutputFcn', @Color_and_Shape_Detection_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 Color_and_Shape_Detection is made visible. function Color_and_Shape_Detection_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 Color_and_Shape_Detection (see VARARGIN) % Choose default command line output for Color_and_Shape_Detection handles.output = hObject; % Update handles structure guidata(hObject, handles); movegui(hObject,'center'); % UIWAIT makes Color_and_Shape_Detection wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = Color_and_Shape_Detection_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.axes1) imshow(Img) title('Original Image'); % Color Detection [m,n,~] = size(Img); hsv = rgb2hsv(Img); H = hsv(:,:,1); for y = 1:m for x = 1:n h = H(y,x); % Ubah warna if h < 11/255 % merah h = 0; elseif h < 32/255 % jingga h = 21/255; elseif h < 54/255 % kuning h = 43/255; elseif h < 116/255 % hijau h = 85/255; elseif h < 141/255 % cyan h = 128/255; elseif h < 185/255 % biru h = 170/255; elseif h < 202/255 % ungu h = 191/255; elseif h < 223/255 % magenta h = 213/255; elseif h < 244/255 % merah muda h = 234/255; else h = 0; % merah end % Ubah komponen H H(y,x) = h; end end % Shape Detection gray = rgb2gray(Img); threshold = .8; bw = ~im2bw(gray,threshold); bw = imfill(bw,'holes'); [B,L] = bwboundaries(bw,'noholes'); stats = regionprops(L,'All'); class = zeros(length(B),1); for k = 1:length(B) boundary = B{k}; delta_sq = diff(boundary).^2; perimeter = sum(sqrt(sum(delta_sq,2))); area = stats(k).Area; eccentricity = stats(k).Eccentricity; metric = 4*pi*area/perimeter^2; if metric<0.56 class(k,1) = 1; elseif metric<0.89 if eccentricity>0.04 && eccentricity <0.05 class(k,1) = 2; else class(k,1) = 3; end else class(k,1) = 4; end end handles.Img = Img; handles.H = H; handles.class = class; handles.bw = bw; guidata(hObject, handles) set(handles.pushbutton2,'Enable','on') set(handles.pushbutton3,'Enable','on') set(handles.pushbutton4,'Enable','on') set(handles.pushbutton5,'Enable','on') set(handles.pushbutton6,'Enable','on') set(handles.pushbutton7,'Enable','on') set(handles.pushbutton8,'Enable','on') set(handles.pushbutton9,'Enable','on') set(handles.pushbutton10,'Enable','on') set(handles.pushbutton11,'Enable','on') else return end % --- 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 = handles.Img; H = handles.H; H_aksen = H==0/255; H_aksen = logical(H_aksen); R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,3); R(~H_aksen) = 255; G(~H_aksen) = 255; B(~H_aksen) = 255; RGB = cat(3,R,G,B); axes(handles.axes2) imshow(RGB); title('Color Detection -> Red') % --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Img = handles.Img; H = handles.H; H_aksen = H==21/255; H_aksen = logical(H_aksen); R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,3); R(~H_aksen) = 255; G(~H_aksen) = 255; B(~H_aksen) = 255; RGB = cat(3,R,G,B); axes(handles.axes2) imshow(RGB); title('Color Detection -> Orange') % --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Img = handles.Img; H = handles.H; H_aksen = H==85/255; H_aksen = logical(H_aksen); R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,3); R(~H_aksen) = 255; G(~H_aksen) = 255; B(~H_aksen) = 255; RGB = cat(3,R,G,B); axes(handles.axes2) imshow(RGB); title('Color Detection -> Green') % --- Executes on button press in pushbutton5. function pushbutton5_Callback(hObject, eventdata, handles) % hObject handle to pushbutton5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Img = handles.Img; H = handles.H; H_aksen = H==170/255; H_aksen = logical(H_aksen); R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,3); R(~H_aksen) = 255; G(~H_aksen) = 255; B(~H_aksen) = 255; RGB = cat(3,R,G,B); axes(handles.axes2) imshow(RGB); title('Color Detection -> Blue') % --- Executes on button press in pushbutton6. function pushbutton6_Callback(hObject, eventdata, handles) % hObject handle to pushbutton6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Img = handles.Img; H = handles.H; H_aksen = H==213/255; H_aksen = logical(H_aksen); R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,3); R(~H_aksen) = 255; G(~H_aksen) = 255; B(~H_aksen) = 255; RGB = cat(3,R,G,B); axes(handles.axes2) imshow(RGB); title('Color Detection -> Purple') % --- Executes on button press in pushbutton7. function pushbutton7_Callback(hObject, eventdata, handles) % hObject handle to pushbutton7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Img = handles.Img; H = handles.H; H_aksen = H==43/255; H_aksen = logical(H_aksen); R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,3); R(~H_aksen) = 255; G(~H_aksen) = 255; B(~H_aksen) = 255; RGB = cat(3,R,G,B); axes(handles.axes2) imshow(RGB); title('Color Detection -> Yellow') % --- Executes on button press in pushbutton8. function pushbutton8_Callback(hObject, eventdata, handles) % hObject handle to pushbutton8 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Img = handles.Img; bw = handles.bw; class = handles.class; bw2 = false(size(bw)); n = find(class==1); for x = 1:numel(n) cc = bwconncomp(bw, 4); bw2(cc.PixelIdxList{n(x)}) = true; end R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,3); R(~bw2) = 255; G(~bw2) = 255; B(~bw2) = 255; RGB = cat(3,R,G,B); axes(handles.axes2) imshow(RGB); title('Shape Detection -> Polygon') % --- Executes on button press in pushbutton9. function pushbutton9_Callback(hObject, eventdata, handles) % hObject handle to pushbutton9 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Img = handles.Img; bw = handles.bw; class = handles.class; bw2 = false(size(bw)); n = find(class==2); for x = 1:numel(n) cc = bwconncomp(bw, 4); bw2(cc.PixelIdxList{n(x)}) = true; end R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,3); R(~bw2) = 255; G(~bw2) = 255; B(~bw2) = 255; RGB = cat(3,R,G,B); axes(handles.axes2) imshow(RGB); title('Shape Detection -> Triangle') % --- Executes on button press in pushbutton10. function pushbutton10_Callback(hObject, eventdata, handles) % hObject handle to pushbutton10 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Img = handles.Img; bw = handles.bw; class = handles.class; bw2 = false(size(bw)); n = find(class==3); for x = 1:numel(n) cc = bwconncomp(bw, 4); bw2(cc.PixelIdxList{n(x)}) = true; end R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,3); R(~bw2) = 255; G(~bw2) = 255; B(~bw2) = 255; RGB = cat(3,R,G,B); axes(handles.axes2) imshow(RGB); title('Shape Detection -> Square') % --- Executes on button press in pushbutton11. function pushbutton11_Callback(hObject, eventdata, handles) % hObject handle to pushbutton11 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Img = handles.Img; bw = handles.bw; class = handles.class; bw2 = false(size(bw)); n = find(class==4); for x = 1:numel(n) cc = bwconncomp(bw, 4); bw2(cc.PixelIdxList{n(x)}) = true; end R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,3); R(~bw2) = 255; G(~bw2) = 255; B(~bw2) = 255; RGB = cat(3,R,G,B); axes(handles.axes2) imshow(RGB); title('Shape Detection -> Circle') % --- Executes on button press in pushbutton12. function pushbutton12_Callback(hObject, eventdata, handles) % hObject handle to pushbutton12 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.axes1) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes2) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) set(handles.pushbutton2,'Enable','off') set(handles.pushbutton3,'Enable','off') set(handles.pushbutton4,'Enable','off') set(handles.pushbutton5,'Enable','off') set(handles.pushbutton6,'Enable','off') set(handles.pushbutton7,'Enable','off') set(handles.pushbutton8,'Enable','off') set(handles.pushbutton9,'Enable','off') set(handles.pushbutton10,'Enable','off') set(handles.pushbutton11,'Enable','off')
Posted on July 2, 2016, in Data mining, Pengenalan Pola, Pengolahan Citra and tagged aplikasi gui matlab pengolahan citra digital, aplikasi matlab pengolahan citra digital, aplikasi pengolahan citra digital menggunakan matlab, aplikasi pengolahan citra menggunakan matlab, cara klasifikasi citra menggunakan matlab, color detection matlab, contoh koding matlab citra, contoh pengenalan pola menggunakan matlab, contoh program matlab pengolahan citra, contoh program pengolahan citra digital menggunakan matlab, data mining matlab, deteksi bentuk matlab, deteksi warna matlab, ekstraksi ciri bentuk matlab, ekstraksi ciri matlab, ekstraksi ciri warna matlab, klasifikasi citra matlab, konversi ruang warna rgb menjadi hsv matlab, pengenalan pola matlab, Pengolahan Citra Digital, pengolahan citra digital dan aplikasinya menggunakan matlab, pengolahan citra digital dengan matlab, pola bentuk citra matlab, pola warna citra matlab, program matlab sederhana, rule base matlab, segmentasi warna matlab, shape detection matlab, source code matlab pengolahan citra, source code matlab sederhana, tutorial matlab untuk pengolahan citra. Bookmark the permalink. 39 Comments.
mas kalo mau cari nilai rata-rata dari kuning atau hijau pakenya fungsi mean(rgb) gitu ???
Saya juga punya pertanyaan mas.
rgb = imread(‘peppers.png’);
hsv = rgb2hsv(rgb);
h = hsv(:,:,1);
meanh = mean(mean(h)
angka 1 yg ada di h = hsv(:,:,1); mengartikan apa ya? dan kalau misal ingin mengetahui warna hijau saja dari balasan “menghitung rata2 nilai hue dari warna tertentu, maka masing2 warna harus dikelompokkan terlebih dahulu” bagaimana ya?
Source code pada materi di atas bisa dipelajari untuk mengetahui pengelompokan warnanya
dalam citra digital, warna dari spektrum cahaya tampak (mejikuhibiu) direpresentasikan oleh nilai hue
maaf mas tanya lagi dapat nilai average dari hsv ada contoh coding yang simple gak mas adi ?
maaf masih ngambang mas… thanks…..
contoh koding utk menghitung nilai hue dari suatu citra secara keseluruhan:
rgb = imread(‘peppers.png’);
hsv = rgb2hsv(rgb);
h = hsv(:,:,1);
meanh = mean(mean(h))
kalau utk menghitung rata2 nilai hue dari warna tertentu, maka masing2 warna harus dikelompokkan terlebih dahulu sesuai dengan contoh penjelasan pada materi di atas
Mohon bimbingannya mas.
Pada Program di atas,
if h < 11/255 % merah
h = 0;
elseif h < 32/255 % jingga
h = 21/255;
elseif h < 54/255 % kuning
h = 43/255;
untuk mencari h< 11/255 ini bagaimana mas ?
dan mengapa variabel 'h' tersebut berubah menjadi 0 ?
Mohon mas untuk pencerahan dari mas adi.
Terima Kasih sebelumnya mas.
nilai hue antara 0 s.d 11/255 diset menjadi 0 agar warna merah menjadi seragam
proses tsb dilakukan terhadap masing2 warna
Terima Kasih sekali mas yang sudah meluangkan waktu untuk menjawab.
1 pertanyaan lagi mas.
Untuk mencari Angka ’11’, di dapat dari mana ya mas ?
Apakah menggunakan Metode, atau hanya sebagai simbolis saja ?
Terima Kasih Mas, maaf mengganggu.
Sama sama abed
Dasar pengelompokkan nilai hue bisa dilihat pada halaman berikut https://pemrogramanmatlab.com/pengenalan-pola-citra-digital-menggunakan-matlab/pola-warna/
Permisi mas, saya lihat di atas, untuk eccentricity segitiga sudah ditentukan nilainya dalam bentuk range nilai.
Patokan eccentricity itu bisa diketahui dimana ya mas? Apakah ada list eccentricity untuk tiap tiap bentuk?
cara menghilangkan button shape detection gmn ya?
pagi mas. untuk pengenalan pola tulisan tangan itu caranya bagaimana ya
mohon infonya
terima kasih
Pagi dodi
Utk pengenalan pola tulisan tangan bisa menggunakan ekstraksi ciri morfologi seperti chain code dan moment invariant
kalau untuk pakai JST nya itu bagaimana ya ?
materi mengenai jaringan syaraf tiruan bisa dipelajari pada halaman berikut ini
https://pemrogramanmatlab.com/2017/07/26/jaringan-syaraf-tiruan-untuk-memprediksi-jumlah-penduduk/
oke terima kasih mas infonya
mas adi, langkah2 pelajari JST gimana ya ?? saya masih bingung
Materi mengenai jaringan syaraf tiruan lebih lanjut bisa dipelajari pada buku jaringan syaraf tiruan dan pemrogramannya menggunakan matlab, penulis drs. Jong jek siang
Bro boleh minta kodingan dalam matlab ga bro? tolong banget bro kalau ada kirimin . soalnya kalau kodingan gui kurang ngerti di ubah ke kodingan mat lab
Terimakasih
Mas adi mau nanya punya code untuk mendeteksi bentuk saja ga?
bisa dilihat pada halaman berikut
https://pemrogramanmatlab.com/pengenalan-pola-citra-digital-menggunakan-matlab/pola-bentuk-morfologi/
Makasih mas adi
Sama mau nanya lagi jika menggunakan kamera webcam apa pengolahan untuk bentuknya sama saja seperti contoh yg dikasih sebelumnya?
untuk pengolahannya sama saja gerry
Sudah dicoba untuk menggunakan kamera webcam namun hasil pengolahanya tidak sesuai misalkan mengambil gambar bentuk kotak namun yg keluar hasilnya lingkaran, mohon bantuannya mas adi, terima kasih
bisa divariasikan kembali nilai metric nya
assalamu’alaikum, mas adi. sebelumnya saya mau izin untuk menggunakan coding ini. tapi saya ingin tanya bagaimana cara menampilkan data nilai dari warna yang telah dipilih?
Waalaikumsalam
Silakan kalau ingin menggunakan koding di atas, saya ijinkan
Nilai dari warna yg telah dipilih tercantum pada nilai hue dari masing2 objek
bagaimana caranya supaya nilainya dapat tampil pada sistem, saat melakukan pemilihan warna secara otomatis nilainya juga ikut muncul, itu gimana caranya mas? maaf sebelumnya, karena saya butuh banget mas.
Untuk menampilkan nilai pada comman windows maka tanda ; pada setiap variabel dihapus saja
kalau supaya nilainya tampil pada apliksainya itu gimana mas?
Sir, The code that you given above can’t be run. I already try to run the code that you given above but there are so many error. The matlab version that i use is 7.5.0.342 (R2007b)
The code that I given above can be run at least using Matlab R2015b
sir, I though every matlab version is the same. Because this semester I taking this subject which called computer version and image processing then my lecturer say that every matlab version is the same and it can be run in any matlab version but in this case how come i can’t run your code that you given in my matlab version which is 7.5.0.342 (R2007b). So weird???
Every version of matlab is not the same
Every year mathworks.inc improves the function in matlab
You can install the latest version of matlab, so you can run this code without errors
sir, can you at least solve this problem that i face??
kak saya ingin membuat sistem pencocokan padu padan warna pada pakaian menggunakan image processing jadi sistemnya nanti akan mendeteksi apakah warna paduan antara baju dan celanaya itu sudah cocok atau tidak dengan menggunakan sistem pakar.
disini saya masih dalam pencarian metodenya kak,kira-kira metode apayang cocok untuk mendeteksi kecocokan warna nya
Utk mendeteksi kecocokan warna bisa dicoba menggunakan euclidean distance
mohon bantuannya kak…..