Minggu, 25 November 2012

Sharpening Image Matlab



LISTING PROGRAM SHARPENING IMAGE MATLAB :

function varargout = Sharpeninglaplace(varargin)
% SHARPENINGLAPLACE MATLAB code for Sharpeninglaplace.fig
%      SHARPENINGLAPLACE, by itself, creates a new SHARPENINGLAPLACE or raises the existing
%      singleton*.
%
%      H = SHARPENINGLAPLACE returns the handle to a new SHARPENINGLAPLACE or the handle to
%      the existing singleton*.
%
%      SHARPENINGLAPLACE('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in SHARPENINGLAPLACE.M with the given input arguments.
%
%      SHARPENINGLAPLACE('Property','Value',...) creates a new SHARPENINGLAPLACE or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Sharpeninglaplace_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Sharpeninglaplace_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 Sharpeninglaplace

% Last Modified by GUIDE v2.5 22-Nov-2012 20:22:19

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Sharpeninglaplace_OpeningFcn, ...
                   'gui_OutputFcn',  @Sharpeninglaplace_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 Sharpeninglaplace is made visible.
function Sharpeninglaplace_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 Sharpeninglaplace (see VARARGIN)

% Choose default command line output for Sharpeninglaplace
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Sharpeninglaplace wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Sharpeninglaplace_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)
proyek=guidata(gcbo);
[namafile,direktori]=uigetfile({'*.jpg';'*.bmp';'*.png';'*.tif'},'Buka Gambar')
if isequal(namafile,0)
return;
end
eval(['cd ''' direktori ''';']);
I=imread(namafile);
set(proyek.figure1,'CurrentAxes',proyek.axes1);
set(imshow(I));
set(proyek.figure1,'Userdata',I);
set(proyek.axes1,'Userdata',I);


% --- 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)
proyek=guidata(gcbo);
I=get(proyek.axes1,'Userdata');
if isequal(I,[])
msgbox('Belum ada gambar!','Peringatan','warn');
else
SSF=[0 1 0;1 -4 1; 0 1 0];
SSF2=[0 -1 0;-1 5 -1; 0 -1 0];
A=imfilter(I,SSF2,'replicate');
set(proyek.figure1,'CurrentAxes',proyek.axes2);
set(imshow(A));
set(proyek.axes2,'Userdata',A);
B=imfilter(I,SSF,'replicate');
set(proyek.figure1,'CurrentAxes',proyek.axes3);
set(imshow(B));
set(proyek.axes3,'Userdata',B);
redo_Callback(hObject, eventdata, handles);
end


% --- 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)
proyek=guidata(gcbo);
[namafile,direktori]=uiputfile({'*.jpg';'*.*'},'Simpan Citra');
I=get(proyek.axes2,'Userdata');
imwrite(I,strcat(direktori,namafile));


% --- 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)
proyek=guidata(gcbo);
I=get(proyek.axes1,'Userdata');
if isequal(I,[])
msgbox('Belum ada gambar!','Peringatan','warn');
else
PSF=[1 1 1;1 -8 1;1 1 1];
PSF2=[-1 -1 -1;-1 9 -1;-1 -1 -1];
A=imfilter(I,PSF2,'replicate');
set(proyek.figure1,'CurrentAxes',proyek.axes2);
set(imshow(A));
set(proyek.axes2,'Userdata',A);
B=imfilter(I,PSF,'replicate');
set(proyek.figure1,'CurrentAxes',proyek.axes3);
set(imshow(B));
set(proyek.axes3,'Userdata',B);
redo_Callback(hObject, eventdata, handles);
end


% --- 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)
proyek=guidata(gcbo);
[namafile,direktori]=uiputfile({'*.jpg';'*.*'},'Simpan Citra');
I=get(proyek.axes2,'Userdata');
imwrite(I,strcat(direktori,namafile));

LOGIKA PROGRAM SHARPENING IMAGE :

Pada Proses Penajaman Gambar (Sharpening) ini, kita menggunakan Software MATLAB. MATLAB (Matrix Laboratory) adalah sebuah program untuk analisis dan komputasi numerik dan merupakan suatu bahasa pemrograman matematika lanjutan yang dibentuk dengan dasar pemikiran menggunkan sifat dan bentuk matriks. MATLAB telah berkembang menjadi sebuah environment pemrograman yang canggih yang berisi fungsi-fungsi built-in untuk melakukan tugas pengolahan sinyal, aljabar linier, dan kalkulasi matematis lainnya. Untuk membuat Penajaman Gambar kali ini, kami menggunakan fitur GUI pada MATLAB.

            GUIDE atau GUI builder merupakan sebuah graphical user interface (GUI) yang dibangun dengan obyek grafik seperti tombol (button), kotak teks, slider, menu dan lain-lain. Aplikasi yang menggunakan GUI umumnya lebih mudah dipelajari dan digunakan karena orang yang menjalankannya tidak perlu mengetahui perintah yang ada dan bagaimana kerjanya. Untuk Memulai GUIDE Matlab dapat dilakukan dengan dua cara, yaitu:
1.      Melalui command matlab dengan mengetikkan: >> guide
2.      Klik tombol Start Matlab dan pilihlah MATLAB, lalu pilih GUIDE (GUI Bulder)

Setelah kita masuk dalam fitur GUI, maka kita buat tampilan untuk program Sharpening ini dengan membuat 3 Axes, 3 Panel dan 5 Button. Axes sebenarnya tidak masuk dalam UIControl, tetapi axes dapat diprogram agar pemakai dapat berinteraksi dengan axes dan obyek grafik yang ditampilkan melalui axes. Sedangkan Pushbutton merupakan jenis kontrol berupa tombol tekan yang akan menghasilkan tindakan jika diklik, misanya tombol OK, Cancel, Hitung, Hapus, dan sebagainya. Untuk menampilkan tulisan pada pushbutton kita dapat mengaturnya melalui property inspector dengan mengklik obeyek pushbutton pada figure, lalu mengklik toolbar property inspector atau menggunakan klik kanan lalu pilih property inspector. Selanjutnya isilah tab string dengan label yang diinginkan.
Kemudian untuk mengaktifkan button “Pilih Gambar”, klik kanan pada button tersebut, pilih menu view callbacks – callback. Menu callback yang telah dipilih tersebut, akan membawa ke dalam editor “Sharpeninglaplace.m” dan menyorot ke fungsi button1 (“Pilih Gambar”). Kemudian ketikan script ini :
proyek=guidata(gcbo);
[namafile,direktori]=uigetfile({’*.jpg’;’*.bmp’;’*.png’;’*.tif’},’Buka Gambar’)
if isequal(namafile,0)
return;
end
eval(['cd ''' direktori ''';']);
I=imread(namafile);
set(proyek.figure1,’CurrentAxes’,proyek.axes1);
set(imshow(I));

set(proyek.figure1,’Userdata’,I);
set(proyek.axes1,’Userdata’,I);
Script diatas berfungsi untuk mencari file gambar yang berekstensi .jpg/ .bmp/ .png/ .tif. kemudian jika gambar telah dipilih akan dideklarasikan sebagai variable I dan dimasukan ke dalam Axes1 yang telah dibuat sebelumnya.
Dengan cara yang sama kita buat button untuk melakukan Proses Penajaman Gambar (Sharpening), lalu  aktifkan button (“Penajaman Gambar Laplace 4”) dan ketikkan script di bawah ini :
proyek=guidata(gcbo);
I=get(proyek.axes1,'Userdata');
if isequal(I,[])
msgbox('Belum ada gambar!','Peringatan','warn');
else
SSF=[0 -1 0;-1 4 -1; 0 -1 0];
SSF2=[0 -1 0;-1 5 -1; 0 -1 0];
A=imfilter(I,SSF2,'replicate');
set(proyek.figure1,'CurrentAxes',proyek.axes2);
set(imshow(A));
set(proyek.axes2,'Userdata',A);
B=imfilter(I,SSF,'replicate');
set(proyek.figure1,'CurrentAxes',proyek.axes3);
set(imshow(B));
set(proyek.axes3,'Userdata',B);
redo_Callback(hObject, eventdata, handles);
end

Script diatas berfungsi untuk pemrosesan Penajaman Gambar. Awalnya kita gunakan variable I untuk  mendeteksi gambar dari axes1 , namun jika gambar belum ada, maka akan dimunculkan alert atau message box. Jika gambar terdeteksi makan akan dilakukan penajaman dan hasil akan dimasukan ke dalam Axes2.
Proses Penajaman dalam satu button ini dilakukan dengan 2 Matriks Laplace yaitu matriks deteksi tepi 4 dan matriks sharpening 5, button yang lainnya memakai 2 Matriks Laplace yaitu matriks deteksi tepi 8 dan matriks sharpening 9.  Setelah itu, hasil dari 2 Matriks tersebut akan ditampilkan pada Axes 2 dan Axes 3.
Lalu kita buat 2 button, untuk menyimpan 2 gambar dari Axes2 dan Axes3, dengan langkah seperti sebelumnya. Masukkan script di bawah ini :
proyek=guidata(gcbo);
[namafile,direktori]=uiputfile({’*.jpg’;’*.*’},’Simpan Citra’);
I=get(proyek.axes2,’Userdata’);
imwrite(I,strcat(direktori,namafile));
Script di atas berfungsi untuk melakukan penyimpanan hasil proses Penajaman. Dengan mendeklarasikan variabel I untuk mengambil gambar dari Axes2 dan menyimpan ke dalam direktori user untuk menyimpan gambar pada Axes3, scriptnya sama hanya saja diganti dengan Axes3.  Jika telah selesai semua Save file “.m” , lalu run atau dapat juga dengan menekan tombol f5.

OUTPUT :
 Penajaman memakai sharpening Laplace matriks 4 dan 5 :
Penajaman memakai sharpening Laplace matriks 8 dan 9 :
Kelompok :
Muhammad Alpen Saputra Halim
Rohardi