Untuk
mata kuliah pengolahan citra ini, saya akan membahas pembuatan aplikasi
sederhana tentang penajaman citra (Sharpening) dengan menggunakan matlab. Untuk
pembuatannya, digunakan matlab versi 7.1.
Sekilas Tentang Matlab :
MATLAB merupakan suatu sistem
interaktif yang memiliki elemen data dalam suatu array sehingga tidak lagi kita
dipusingkan dengan masalah dimensi. Hal ini memungkinkan kita untuk memecahkan
banyak masalah teknis yang terkait dengan komputasi, kususnya yang berhubungan
dengan matrix dan formulasi vektor, yang mana masalah tersebut merupakan momok
apabila kita harus menyelesaikannya dengan menggunakan bahasa level rendah
seperti Pascall, C dan Basic.
Sekilas Tentang Pengolahan Citra :
Salah satu jenis pengolahan citra adalah perbaikan kualitas citra. Perbaikan
Kualitas citra (image enhancement) adalah operasi yang bertujuan untuk
memperbaiki kualitas citra dengan cara memanipulasi parameter - parameter citra. Dengan operasi ini ciri-ciri khusus yang terdapat pada citra lebih
ditonjolkan.Yang termasuk dalam klasifikasi ini antara lain:
a. Perbaikan kontras gelap / terang (contrast enhncement).
b. Perbaikan tepian objek (edge enhancement)
c. Penajaman (sharpening)
d. Pemberian warna semu (pseudocoloring)
e. Penyaringan derau (noise filtering)
Langkah-Langkah Pembuatan Program :
Salah satu kelebihan dari Matlab adalah kemudahan dalam mengolah grafik.
Misalnya, untuk mengolah suatu tampilan grafis agar lebih tajam (penajaman
citra), cukup dengan mengikuti langkah berikut.
1. Buka program Matlab, hingga muncul tampilan awal seperti berikut :
2. Untuk membuat tampilannya, dibutuhkan file GUI. Pilih new
– GUI
3. Akan muncul tampilan berikut :
4. Pilih tools axes dan button. Dibutuhkan 2 buah objek axes
dan 3 buah objek button, kemudian dapat disusun seperti pada tampilan berikut :
5. Save file .fig tersebut, (pada project ini, saya
menggunakan nama terserah.fig).
6. Untuk mengaktifkan button PILIH GAMBAR, klik
kanan pada button tersebut, pilih menu view callbacks callkback.
7. Menu callback yang telah dipilih, akan membawa ke dalam
editor file.m dan menyorot ke fungsi button1 (pilih gambar). Setelah itu, dapat
ditambahkan script berikut :
Script :
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));
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);
set(proyek.axes1,Userdata,I);
8. Dengan cara yang sama, aktifkan button yang
ke2(Proses) dengan menambahkan script berikut :
Script :
proyek=guidata(gcbo);
I=get(proyek.axes1,Userdata);
if isequal(I,[])
msgbox(Belum ada gambar!,Peringatan,warn);
else
PSF=fspecial(unsharp);
A=imfilter(I,PSF,replicate);
set(proyek.figure1,CurrentAxes,proyek.axes2);
set(imshow(A));
set(proyek.axes2,Userdata,A);
redo_Callback(hObject, eventdata, handles);
end
Script :
proyek=guidata(gcbo);
I=get(proyek.axes1,Userdata);
if isequal(I,[])
msgbox(Belum ada gambar!,Peringatan,warn);
else
PSF=fspecial(unsharp);
A=imfilter(I,PSF,replicate);
set(proyek.figure1,CurrentAxes,proyek.axes2);
set(imshow(A));
set(proyek.axes2,Userdata,A);
redo_Callback(hObject, eventdata, handles);
end
9. Dengan cara yang sama, aktifkan button yang ke3(Simpan)
dengan menambahkan script berikut :
Script :
proyek=guidata(gcbo);
[namafile,direktori]=uiputfile({*.jpg;*.*},Simpan Citra);
I=get(proyek.axes2,Userdata);
imwrite(I,strcat(direktori,namafile));
Script :
proyek=guidata(gcbo);
[namafile,direktori]=uiputfile({*.jpg;*.*},Simpan Citra);
I=get(proyek.axes2,Userdata);
imwrite(I,strcat(direktori,namafile));
10. Save file .m tersebut, (pada project ini, saya menggunakan
nama terserah.m).
11. Selesai, kemudian pilih icon Run atau dapat
juga dengan menekan F5 pada keyboard.
Tampilan
awal :
Klik button pilih gambar :
Tampilan gambar berhasil dipilih :
Klik button Proses. Berikut adalah tampilan gambar berhasil
dipertajam :
Untuk menyimpan, klik button simpan.
Script Lengkap :
function varargout = terserah(varargin)
&#x T;ERSERAH M-file for terserah.fig
&#x ; TERSERAH, by itself, creates a new TERSERAH or raises the existing
&#x ; singleton*.
&#x ; H = TERSERAH returns the handle to a new TERSERAH or the handle to
&#x ; the existing singleton*.
&#x ; TERSERAH(CALLBACK,hObject,eventData,handles,) calls the local
&#x ; function named CALLBACK in TERSERAH.M with the given input arguments.
&#x ; TERSERAH(Property,Value,) creates a new TERSERAH or raises the existing singleton*. Starting from the left, property value pairs are
&#x ; applied to the GUI before terserah_OpeningFunction gets called. An
&#x ; unrecognized property name or invalid value makes property application
&#x ; stop. All inputs are passed to terserah_OpeningFcn via varargin.
&#x ; *See GUI Options on GUIDEs Tools menu. Choose GUI allows only one
&#x ; instance to run (singleton).
&#x S;ee also: GUIDE, GUIDATA, GUIHANDLES
dit the above text to modify the response to help terserah
&#x L;ast Modified by GUIDE v2.5 10-Jun-2004 02:13:58
egin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(gui_Name, mfilename,
gui_Singleton, gui_Singleton,
gui_OpeningFcn, @terserah_OpeningFcn,
gui_OutputFcn, @terserah_OutputFcn,
gui_LayoutFcn, [] ,
gui_Callback, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
function varargout = terserah(varargin)
&#x T;ERSERAH M-file for terserah.fig
&#x ; TERSERAH, by itself, creates a new TERSERAH or raises the existing
&#x ; singleton*.
&#x ; H = TERSERAH returns the handle to a new TERSERAH or the handle to
&#x ; the existing singleton*.
&#x ; TERSERAH(CALLBACK,hObject,eventData,handles,) calls the local
&#x ; function named CALLBACK in TERSERAH.M with the given input arguments.
&#x ; TERSERAH(Property,Value,) creates a new TERSERAH or raises the existing singleton*. Starting from the left, property value pairs are
&#x ; applied to the GUI before terserah_OpeningFunction gets called. An
&#x ; unrecognized property name or invalid value makes property application
&#x ; stop. All inputs are passed to terserah_OpeningFcn via varargin.
&#x ; *See GUI Options on GUIDEs Tools menu. Choose GUI allows only one
&#x ; instance to run (singleton).
&#x S;ee also: GUIDE, GUIDATA, GUIHANDLES
dit the above text to modify the response to help terserah
&#x L;ast Modified by GUIDE v2.5 10-Jun-2004 02:13:58
egin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(gui_Name, mfilename,
gui_Singleton, gui_Singleton,
gui_OpeningFcn, @terserah_OpeningFcn,
gui_OutputFcn, @terserah_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
nd initialization code - DO NOT EDIT
&#x &;#8212; Executes just before terserah is made visible.
function terserah_OpeningFcn(hObject, eventdata, handles, varargin)
&#x T;his function has no output args, see OutputFcn.
&#x h;Object handle to figure
ventdata reserved - to be defined in a future version of MATLAB
&#x h;andles structure with handles and user data (see GUIDATA)
&#x v;arargin command line arguments to terserah (see VARARGIN)
hoose default command line output for terserah
handles.output = hObject;
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
nd initialization code - DO NOT EDIT
&#x &;#8212; Executes just before terserah is made visible.
function terserah_OpeningFcn(hObject, eventdata, handles, varargin)
&#x T;his function has no output args, see OutputFcn.
&#x h;Object handle to figure
ventdata reserved - to be defined in a future version of MATLAB
&#x h;andles structure with handles and user data (see GUIDATA)
&#x v;arargin command line arguments to terserah (see VARARGIN)
hoose default command line output for terserah
handles.output = hObject;
&#x U;pdate handles structure
guidata(hObject, handles);
guidata(hObject, handles);
&#x U;IWAIT makes terserah wait for user
response (see UIRESUME)
&#x u;iwait(handles.figure1);
&#x u;iwait(handles.figure1);
&#x &;#8212; Outputs from this function are
returned to the command line.
function varargout = terserah_OutputFcn(hObject, eventdata, handles)
&#x v;arargout cell array for returning output args (see VARARGOUT);
&#x h;Object handle to figure
ventdata reserved - to be defined in a future version of MATLAB
&#x h;andles structure with handles and user data (see GUIDATA)
&#x G;et default command line output from handles structure
varargout{1} = handles.output;
function varargout = terserah_OutputFcn(hObject, eventdata, handles)
&#x v;arargout cell array for returning output args (see VARARGOUT);
&#x h;Object handle to figure
ventdata reserved - to be defined in a future version of MATLAB
&#x h;andles structure with handles and user data (see GUIDATA)
&#x G;et default command line output from handles structure
varargout{1} = handles.output;
&#x ;Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
&#x h;Object handle to pushbutton1 (see GCBO)
ventdata reserved to be defined in a future version of MATLAB
&#x h;andles 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);
function pushbutton1_Callback(hObject, eventdata, handles)
&#x h;Object handle to pushbutton1 (see GCBO)
ventdata reserved to be defined in a future version of MATLAB
&#x h;andles 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);
&#x &;#8212; Executes on button press in
pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
&#x h;Object handle to pushbutton2 (see GCBO)
ventdata reserved - to be defined in a future version of MATLAB
&#x h;andles 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=fspecial(unsharp);
A=imfilter(I,PSF,replicate);
set(proyek.figure1,CurrentAxes,proyek.axes2);
set(imshow(A));
set(proyek.axes2,Userdata,A);
redo_Callback(hObject, eventdata, handles);
end
function pushbutton2_Callback(hObject, eventdata, handles)
&#x h;Object handle to pushbutton2 (see GCBO)
ventdata reserved - to be defined in a future version of MATLAB
&#x h;andles 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=fspecial(unsharp);
A=imfilter(I,PSF,replicate);
set(proyek.figure1,CurrentAxes,proyek.axes2);
set(imshow(A));
set(proyek.axes2,Userdata,A);
redo_Callback(hObject, eventdata, handles);
end
&#x &;#8212; Executes on button press in
pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
&#x h;Object handle to pushbutton3 (see GCBO)
ventdata reserved - to be defined in a future version of MATLAB
&#x h;andles 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));
function pushbutton3_Callback(hObject, eventdata, handles)
&#x h;Object handle to pushbutton3 (see GCBO)
ventdata reserved - to be defined in a future version of MATLAB
&#x h;andles 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));