Senin, 26 November 2012

Sharpening - Penajaman Citra



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));
set(proyek.figure1,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
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));

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. 

12. Berikut adalah hasilnya :

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
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;
&#x U;pdate handles structure
guidata(hObject, handles);
&#x U;IWAIT makes terserah wait for user response (see UIRESUME)
&#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;
&#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);
&#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
&#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));