Cara melakukan cropping citra pada GUI Matlab
Dalam pengolahan citra, terkadang kita hanya menginginkan pengolahan hanya pada daerah/bagian tertentu dari citra. Daerah yang kita inginkan tersebut disebut dengan Region of Interest (ROI). Proses untuk mendapatkan ROI salah satunya adalah dengan cara melakukan cropping pada suatu citra.
Berikut ini merupakan contoh aplikasi pemrograman GUI Matlab untuk melakukan cropping pada suatu citra:
1. Citra Asli (Original Image)
2. Proses cropping menggunakan Rectangle Crop
3. Proses cropping menggunakan Square Crop
4. Proses cropping menggunakan Circle Crop
5. Proses cropping menggunakan Ellipse Crop
6. Proses cropping menggunakan Polygon Crop
File source code lengkap beserta citra untuk proses cropping pada materi di atas dapat diperoleh melalui halaman berikut ini: Source Code
Sedangkan tampilan source codenya adalah:
function varargout = Cropping_Image(varargin) % CROPPING_IMAGE MATLAB code for Cropping_Image.fig % CROPPING_IMAGE, by itself, creates a new CROPPING_IMAGE or raises the existing % singleton*. % % H = CROPPING_IMAGE returns the handle to a new CROPPING_IMAGE or the handle to % the existing singleton*. % % CROPPING_IMAGE('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in CROPPING_IMAGE.M with the given input arguments. % % CROPPING_IMAGE('Property','Value',...) creates a new CROPPING_IMAGE or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before Cropping_Image_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to Cropping_Image_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 Cropping_Image % Last Modified by GUIDE v2.5 23-Aug-2015 21:39:16 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Cropping_Image_OpeningFcn, ... 'gui_OutputFcn', @Cropping_Image_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 Cropping_Image is made visible. function Cropping_Image_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 Cropping_Image (see VARARGIN) % Choose default command line output for Cropping_Image handles.output = hObject; % Update handles structure guidata(hObject, handles); movegui(hObject,'center'); clc;clear; % UIWAIT makes Cropping_Image wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = Cropping_Image_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) axes(handles.axes1) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes2) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) [filename,pathname] = uigetfile({'*.*'}); if isequal(filename,0) return else Info = imfinfo(fullfile(pathname,filename)); BitDepth = Info.BitDepth; if BitDepth == 1 msgbox('Please insert RGB image or Grayscale image') return end Img = imread(fullfile(pathname,filename)); axes(handles.axes1) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) imshow(Img) end set(handles.radiobutton1,'Enable','on') set(handles.radiobutton2,'Enable','on') set(handles.radiobutton3,'Enable','on') set(handles.radiobutton4,'Enable','on') set(handles.radiobutton5,'Enable','on') set(handles.pushbutton2,'Enable','on') handles.Img = Img; handles.BitDepth = BitDepth; guidata(hObject, handles) % --- Executes on button press in radiobutton1. function radiobutton1_Callback(hObject, eventdata, handles) % hObject handle to radiobutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of radiobutton1 set(handles.radiobutton1,'Value',1) set(handles.radiobutton2,'Value',0) set(handles.radiobutton3,'Value',0) set(handles.radiobutton4,'Value',0) set(handles.radiobutton5,'Value',0) % --- Executes on button press in radiobutton2. function radiobutton2_Callback(hObject, eventdata, handles) % hObject handle to radiobutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of radiobutton2 set(handles.radiobutton1,'Value',0) set(handles.radiobutton2,'Value',1) set(handles.radiobutton3,'Value',0) set(handles.radiobutton4,'Value',0) set(handles.radiobutton5,'Value',0) % --- Executes on button press in radiobutton3. function radiobutton3_Callback(hObject, eventdata, handles) % hObject handle to radiobutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of radiobutton3 set(handles.radiobutton1,'Value',0) set(handles.radiobutton2,'Value',0) set(handles.radiobutton3,'Value',1) set(handles.radiobutton4,'Value',0) set(handles.radiobutton5,'Value',0) % --- Executes on button press in radiobutton4. function radiobutton4_Callback(hObject, eventdata, handles) % hObject handle to radiobutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of radiobutton4 set(handles.radiobutton1,'Value',0) set(handles.radiobutton2,'Value',0) set(handles.radiobutton3,'Value',0) set(handles.radiobutton4,'Value',1) set(handles.radiobutton5,'Value',0) % --- Executes on button press in radiobutton5. function radiobutton5_Callback(hObject, eventdata, handles) % hObject handle to radiobutton5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of radiobutton5 set(handles.radiobutton1,'Value',0) set(handles.radiobutton2,'Value',0) set(handles.radiobutton3,'Value',0) set(handles.radiobutton4,'Value',0) set(handles.radiobutton5,'Value',1) % --- 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; [m,n,~] = size(Img); val1 = get(handles.radiobutton1,'Value'); val2 = get(handles.radiobutton2,'Value'); val3 = get(handles.radiobutton3,'Value'); val4 = get(handles.radiobutton4,'Value'); val5 = get(handles.radiobutton5,'Value'); axes(handles.axes2) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) axes(handles.axes1) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) imshow(Img); if val1 == 1 h = imrect(gca,[n/2 m/2 0.2*n 0.2*m]); wait(h); mask = createMask(h); elseif val2 == 1 h = imrect(gca,[n/2 m/2 0.2*m 0.2*m]); setFixedAspectRatioMode(h,'true') wait(h); mask = createMask(h); elseif val3 == 1 h = imellipse(gca,[n/2 m/2 0.2*m 0.2*m]); setFixedAspectRatioMode(h,'true') wait(h); mask = createMask(h); elseif val4 == 1 h = imellipse(gca,[n/2 m/2 0.2*n 0.2*m]); wait(h); mask = createMask(h); elseif val5 == 1 h = impoly(gca); wait(h); mask = createMask(h); end [B,~] = bwboundaries(mask,'noholes'); for k = 1:length(B) boundary = B{k}; axes(handles.axes1) cla reset set(gca,'XTick',[]) set(gca,'YTick',[]) imshow(Img); hold on plot(boundary(:,2), boundary(:,1), 'b', 'LineWidth', 2) hold off end if handles.BitDepth == 8 Img(~mask) = 0; [row,col] = find(mask==1); h_Gray = imcrop(Img,[min(col) min(row) max(col)-min(col) max(row)-min(row)]); axes(handles.axes2) imshow(h_Gray); else R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,3); R(~mask) = 0; G(~mask) = 0; B(~mask) = 0; RGB = cat(3,R,G,B); [row,col] = find(mask==1); h_RGB = imcrop(RGB,[min(col) min(row) max(col)-min(col) max(row)-min(row)]); axes(handles.axes2) imshow(h_RGB); end
Posted on August 23, 2015, in Pengenalan Matlab, Pengolahan Citra and tagged aplikasi gui matlab pengolahan citra digital, cara cropping citra digital matlab, cara cropping citra matlab, cara cropping citra menggunakan matlab, cara membuat aplikasi cropping citra matlab, cara membuat aplikasi gui matlab, cara membuat aplikasi matlab sederhana, cara membuat aplikasi pengolahan citra digital matlab, cara membuat gui matlab pengolahan citra digital, cara membuat roi matlab, cara mengcrop citra matlab, cara roi matlab sederhana, contoh aplikasi pengolahan citra digital, contoh aplikasi pengolahan citra digital matlab, contoh coding crop citra matlab, contoh coding pengolahan citra digital matlab, crop image, cropping an image in gui matlab, gui matlab, gui matlab pengolahan citra digital, imcrop, imellipse, impoly, imrect, imroi, Region of Interest (ROI), region of interest matlab, source code matlab crop image, source code membuat gui pengolahan citra digital. Bookmark the permalink. 24 Comments.
assalamualaikum.
mas kalo code untuk ROI block gimana ya mas?
terimakasih
waalaikumsalam
saya rasa materi di atas merupakan salah satu contoh ROI block
ooh begitu
tapi kalo untuk merubah citra kedalam bentuk blok blok 4×4 misalnya disitu ngga ada ya mas?
iya ada, tinggal disesuaikan saja blok nya dengan perulangan for sederhana
oke mas makasih.
oh iya mas ini beda topik ya mas , ini masalah tentang hsv, saya kan sudah buat file functionnya dapet program itu dari buku, lalu yang saya bingung, untuk memunculkan nilai Hue, saturasi dan value nya di GUI gimana ya mas ?
terimakasih
Mas,ada codingan ekstraksi fitur LDA dari suatu citra mas?kalau ada,bs dikirim ke email saya : evelinsilcha.sinaga@gmail.com?
mas, klo crop wajah secara otomatis koding nya gmna ya?
ini memakai metode segmentasi apa ya mas?
Segmentasi dilakukan dengan cara cropping secara manual
Pak kalau mau melakukan crop objek secara otomatis gimana ya
Pada perintah imcrop, koordinat dan ukuran citra bisa diset sesuai keinginan sehingga proses cropping bisa dilakukan secara otomatis
Terima kasih atas ilmunya.
Selanjutnya bagaimana cara untuk menyimpan file hasil crop tersebut? Saya coba menggunakan perintah: thresh = handles.axes2; tapi tidak berhasil. Mohon bimbingannya.
Untuk menyimpan file citra bisa menggunakan perintah imwrite
Terima kasih. Sangat membantu sekali.
Pak untuk croping objek dari beberapa citra tetapi dengan hasil resolusi yg sama apakah bisa?
Proses cropping bisa dilakukan dengan resolusi yang sama
mas kok program ini error ya saat dijalankan? error di bagian varagin
Source code lengkap bisa diperoleh melalui tokopedia sehingga bisa langsung dirunning dan dikembangkan
Mas programnya eror di simbol ~
Kirakira kalo eror disitu ada solusi nya gak mas? Misal dicoba ganti ke huruf?
Source code lengkap bisa dibeli di tokopedia sehingga bisa dirunning dan dikembangkan
Mas programnya eror di simbol ~
Kirakira kalo eror disitu ada solusi nya gak mas? Misal dicoba ganti ke huruf?
Maaf mas mau bertanya, setelah dicrop. Sebelum ditampilkan pada axes2, citra tersebut disimpan di variabel apa ya?
Mas maaf, jika saya melabeli citra dengan bentuk label garis, dan banyak pelabelannya dengan kemiringn garis yg berbeda2, bagaimana cara mengcrop semua sekaligus ya?
Bisa mencoba mengimplementasikan materi yang ada pada halaman berikut
https://pemrogramanmatlab.com/2016/07/07/cara-melakukan-cropping-citra-secara-otomatis/