Selasa, 23 Februari 2016

Cropping Image Menggunakan Matlab R2011a berbasis GUI

Cropping Image



Cropping Image merupakan teknik pemotongan gambar yang digunakan untuk menentukan secara tepat bagian yang ingin dipotong dan diolah. Fungsi cropping pada gambar yaitu dapat menghilangkan bagian gambar yang dirasa tidak dipentingkan atau tidak sesuai dengan pesan yang disampaikan (point of interest) dalam pengolahan gambar.

langsung aja tkp gan...

pertama, agan bikin tampilan seperti ini dulu di GUI..,


kalau agan sudah bikin tampilan seperti itu, lalu agan tinggal masukan codingnya dibawah ini.

Ketikan coding dibawah ini pada bagian pushbutton1 (browse image) pada gambar.


function varargout = FinalprojectCroping(varargin)

function pushbutton1_Callback(hObject, eventdata, handles)
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)


Ketikan coding dibawah ini pada bagian pushbutton2 (Crop) pada gambar.
 
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
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


Ketikan coding dibawah ini pada bagian radiobutton1 (Rectangle) pada gambar.
% --- Executes on button press in radiobutton1.
function radiobutton1_Callback(hObject, eventdata, handles)

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)


Ketikan coding dibawah ini pada bagian pushbutton2 (Square) pada gambar.
% --- Executes on button press in radiobutton2.
function radiobutton2_Callback(hObject, eventdata, handles)
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)


Ketikan coding dibawah ini pada bagian pushbutton3 (Circle) pada gambar. 
% --- Executes on button press in radiobutton3.
function radiobutton3_Callback(hObject, eventdata, handles)
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)


Ketikan coding dibawah ini pada bagian pushbutton4 (Ellipse) pada gambar.
% --- Executes on button press in radiobutton4.
function radiobutton4_Callback(hObject, eventdata, handles)
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)


Ketikan coding dibawah ini pada bagian pushbutton5 (Polygon) pada gambar.
% --- Executes on button press in radiobutton5.
function radiobutton5_Callback(hObject, eventdata, handles)
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)


Ketikan coding dibawah ini pada bagian pushbutton5 (Reset) pada gambar.


% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)

cla(handles.axes2,'reset');
cla(handles.axes1,'reset');


Ketikan coding dibawah ini pada bagian pushbutton6 (Blur) pada gambar.
% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)

gambarblur = getimage (handles.axes1);
G = fspecial ('motion',45,70);
blur = imfilter (gambarblur, G, 'replicate');
axes (handles.axes2);
imshow (blur); title ('Proses gambar blur');




Ketikan coding dibawah ini pada bagian pushbutton7 (Keluar) pada gambar.
% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)

selection = questdlg(['Tutup ' get(handles.figure1,'Name') '?'],...
                    ['Tutup ' get(handles.figure1,'Name') '...'],...
                                'Ya','Tidak','Ya');
        if strcmp(selection,'Tidak')
            return;
        end
        delete(handles.figure1)


Ketikan coding dibawah ini pada bagian slider3 (Rotasi) pada gambar.
% --- Executes on slider movement.
function slider3_Callback(hObject, eventdata, handles)
nilai_slider = get(handles.slider3,'Value');
handles.nilai_slider=round(nilai_slider);
guidata(hObject,handles);
set(handles.edit5,'String',handles.nilai_slider);
hasil = imrotate(handles.Img,handles.nilai_slider,'bilinear','crop');
handles.hasil=hasil;
guidata(hObject,handles);
axes(handles.axes2);
imshow(hasil); title ('Hasil Rotasi Gambar Asli');

 


Ketikan coding dibawah ini pada bagian slider4 (Blur) pada gambar.
% --- Executes on slider movement.
function slider4_Callback(hObject, eventdata, handles)
nilai_slider = get(handles.slider4,'Value');
handles.nilai_slider=round(nilai_slider);
guidata(hObject,handles);
set(handles.edit4,'String',handles.nilai_slider);
hasil = blurVal(handles.Img,handles.nilai_slider,'bilinear','crop');
handles.hasil=hasil;
guidata(hObject,handles);
axes(handles.axes2);
imshow(hasil); title ('Hasil Blur');


Ketikan coding dibawah ini pada bagian pushbutton8 (Simpan) pada gambar.

% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
[nama_file_simpan, path_simpan]=uiputfile(...
{'*.bmp','file citra (*.bmp)';
'*.bmp','citra bmp (*.bmp)';...
'*.*','Semua File (*.*)'},...
'Menyimpan Citra Hasil Rotasi');
imwrite(handles.hasil,fullfile(path_simpan,nama_file_simpan),'BMP');


Download  disini Cropping Image
cukup segitu penjelasannya, selamat mencoba semoga bermanfaat dan berhasil! :)