Image Enhancement
Soal: Tuliskan ringkasan latihan Anda mengenai image enhancement menggunakan MATLAB dalam file MS-Word! Format nama file: NPM Anda.doc
Jawab:
1.PENDAHULUAN
Perbaikan kualitas citra gambar (image enhancement) merupakan salah satu proses awal dalam pengolahan citra gambar (image preprocessing). Perbaikan kualitas diperlukan karena seringkali citra gambar yang dijadikan obyek pembahasan mempunyai kualitas yang kurang baik (buruk), misalnya citra gambar mengalami noise (derau) pada saat pengiriman informasi melalui saluran transmisi, citra gambar mungkin terlalu terang atau gelap, atau citra gambar kurang tajam, kabur dan sebagainya. Melalui operasi pemrosesan awal inilah kulitas citra gambar diperbaiki sehingga citra gambar dapat digunakan untuk aplikasi lebih lanjut, misalnya untuk aplikasi pengenalan (recognition) obyek didalam citra gambar tersebut.
2.DASAR TEORI
Perbaikan kualitas citra
Yang dimaksud dengan perbaikan citra gambar adalah proses mendapatkan citra gambar yang lebih mudah diinterpretasikan oleh mata manusia. Perbaikan kualitas citra (image enhancement) pada dasarnya adalah manipulasi, yang dilakukan pada sebuah citra untuk suatu keperluan yang spesifik, dengan memanfaatkan aspek-aspek sistim penglihatan manusia. Pemilihan teknik yang digunakan harus sesuai dengan jenis citra dan tujuan yang diharapkan .Tujuan utama perbaikan suatu gambar adalah untuk memproses sebuah gambar yang hasilnya dapat lebih berguna dari gambar aslinya untuk aplikasi tertentu.
Pada proses ini, ciri ciri tertentu yang terdapat didalam citra lebih diperjelas kemunculannya. Image enhancement terbagi dalam 2 kategori, yaitu metode spatial domain dan metode frequency domain. Spatial domain berkenaan dengan ruang gambar itu sendiri, dan berdasarkan manipulasi langsung pixel- pixel dari gambar. Frequency domain didasarkan pada modifikasi transformasi Fourier pada gambar.
Secara matematis, images enhancement dapat diartikan sebagai proses mengubah citra gambar f (x,y) menjadi f’ (x,y) sehingga ciri ciri yang dapat dilihat pada f (x,y) lebih ditonjolkan.
Proses proses yang termasuk kedalam perbaikan kualitas citra antara lain adalah:
•Pengubahan kecerahan gambar (image brightness)
•Pengubahan kontras (contrast streching)
•Pengubahan histogram citra
•Pelembutan citra (image smoothing)
•Penajaman (sharpening) tepi (edge)
•Pewarnaan semu (pseudocolouring)
•Pengubahangeometrik
Beberapa operasi image enhancement dapat dipandang sebagai operasi penapisan untuk memperoleh citra yang lebih baik. Operasi penapisan adalah operasi konvolusi citra f(x,y) dengan penapis h(x,y):
f(x,y) = h(x,y)* f(x,y)
atau dalam daerah frekwensi:
F(u,v) = H(u,v)* F(u,v)
Pada umumnya f(x,y) sudah diketahui sehingga persoalannya adalah memilih h(x,y) sedemikian rupa sehingga f’(x,y) merupakan citra yang menonjolkan ciri tertentu dari f(x,y)
Pada makalah ini akan dibahas mengenai Image Enhancement dengan judul “Perubahan Brightness & Contrast Image disertai Histogram”, pada program akan ditampilkan tentang pengubahan image gambar asli yang akan dibuat terang atau gelap secara manual, begitu pula dengan histogram dari perubahan/pergeseran warna.
3.ISI
Metode digunakan
Pada kali ini contoh pemakain Image Enhancement yang digunakan yaitu “Metode Spatial Domain’ dengan aplikasi Histogram disertai pergeseran brightness & contrast image.
Berikut akan disertakan listing program (bentuk M-file) dan hasil run program di Matlab.
3.1.1 M-File (listing program di Matlab)
function varargout = tergel(varargin)
% TERGEL M-file for tergel.fig
% TERGEL, by itself, creates a new TERGEL or raises the existing
% singleton*.
%
% H = TERGEL returns the handle to a new TERGEL or the handle to
% the existing singleton*.
%
% TERGEL('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in TERGEL.M with the given input arguments.
%
% TERGEL('Property','Value',...) creates a new TERGEL or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before tergel_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to tergel_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
% Copyright 2002-2003 The MathWorks, Inc.
% Edit the above text to modify the response to help tergel
% Last Modified by GUIDE v2.5 16-Mar-2008 20:49:38
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @tergel_OpeningFcn, ...
'gui_OutputFcn', @tergel_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 tergel is made visible.
function tergel_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 tergel (see VARARGIN)
% Choose default command line output for tergel
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes tergel wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% fungsi buatan sendiri untuk menghitung histogram citra
function [f]=histogram(cit)
[m n]=size(cit);
citra=double(cit);
for i=1:256, f(i)=0; end;
for j=1:m
for k=1:n
f(round(citra(j,k))+1)=f(round(citra(j,k))+1)+1;
end;
end;
% --- Outputs from this function are returned to the command line.
function varargout = tergel_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 Btn_buka_citra.
function Btn_buka_citra_Callback(hObject, eventdata, handles)
% hObject handle to Btn_buka_citra (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.slider1,'value',0);
[nama_file1, nama_path1]=uigetfile(...
{'*.bmp;*.jpg','File citra (*.bmp,*.jpg)';
'*.bmp','File Bitmap (*.bmp)';...
'*.jpg','File jpeg (*.jpg)';
'*.*','Semua File (*.*)'},...
'Buka File Citra');
if ~isequal(nama_file1,0)
handles.citra1=imread(fullfile(nama_path1,nama_file1));
guidata(hObject,handles);
axes(handles.sb_citra_asli);
imshow(handles.citra1);
absis=0:1:255;
[g]=histogram(handles.citra1);
axes(handles.sb_hist_asli);
plot(absis,g,'k');
axes(handles.sb_hist_geser);
plot(absis,g,'k');
else
return;
end
% --- Executes on button press in Btn_exit.
function Btn_exit_Callback(hObject, eventdata, handles)
% hObject handle to Btn_exit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
delete(handles.figure1);
% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
nilai_slider=get(handles.slider1,'value'); %menangkap nilai slider
num_citra=double(handles.citra1);
[m n]=size(handles.citra1); % menentukan ukuran citra
for i=1:m
for j=1:n
num_citra(i,j)=num_citra(i,j)+nilai_slider;
if num_citra(i,j)>255 % jika elemen citra >255 jadikan 255(terang)
num_citra(i,j)=255;
end;
if num_citra(i,j)<0 % jika elemen citra <0 jadikan 0(gelap)
num_citra(i,j)=0;
end;
end;
end;
axes(handles.sb_citra_geser);
gambar=uint8(num_citra); %dibuat menjadi int 8 bit
imshow(gambar);
[f]=histogram(num_citra);
absis=0:1:255;
axes(handles.sb_hist_geser);
plot(absis,f, 'k');
% --- Executes during object creation, after setting all properties.
function slider1_CreateFcn(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: slider controls usually have a light gray background, change
% 'usewhitebg' to 0 to use default. See ISPC and COMPUTER.
usewhitebg = 1;
if usewhitebg
set(hObject,'BackgroundColor',[.9 .9 .9]);
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
3.1.2 TAMPILAN PROGRAM
a. Sebelum di Run (pengerjaan di GUI Matlab)
b. Setelah di Run tanpa pergeseran (keadaan normal)
c. Setelah di Run dengan pergeseran (Image semakin terang)
4. KESIMPULAN
Setelah dilakukan uji coba dan analisa maka dapat disimpulkan:
1.Kualitas sebuah citra gambar dapat dikatakan baik apabila dapat di interprestasikan oleh mata manusia dengan mudah.
2.Proses perbaikan citra gambar dapat dilakukan dengan mengubah derajat keabuan yang mewakilinya, dengan cara men-set brightness dan contrastnya.
3.Pembuktian dari rumusan brightness dan kontrast dapat dilihat pada hasil run-program yang berada pada comment M-file yaitu dengan cara menset nilai 255 untuk terang dan 0 untuk gelap. Sehingga terdapat acuan dalam pergeseran brightness dan contrast gambar.
5. DAFTAR PUSTAKA
1.PPT kuliah Pengolahan Citra, Ekstensi UI 2006, Dodi Sudiana
2.Matlab, The Language of Technical Computing, version 7.1.0.246. (R14) service pack 3, august, 02, 2005
(Tugas sahabat UI : Adi Jexson Marbun)
Jawab:
1.PENDAHULUAN
Perbaikan kualitas citra gambar (image enhancement) merupakan salah satu proses awal dalam pengolahan citra gambar (image preprocessing). Perbaikan kualitas diperlukan karena seringkali citra gambar yang dijadikan obyek pembahasan mempunyai kualitas yang kurang baik (buruk), misalnya citra gambar mengalami noise (derau) pada saat pengiriman informasi melalui saluran transmisi, citra gambar mungkin terlalu terang atau gelap, atau citra gambar kurang tajam, kabur dan sebagainya. Melalui operasi pemrosesan awal inilah kulitas citra gambar diperbaiki sehingga citra gambar dapat digunakan untuk aplikasi lebih lanjut, misalnya untuk aplikasi pengenalan (recognition) obyek didalam citra gambar tersebut.
2.DASAR TEORI
Perbaikan kualitas citra
Yang dimaksud dengan perbaikan citra gambar adalah proses mendapatkan citra gambar yang lebih mudah diinterpretasikan oleh mata manusia. Perbaikan kualitas citra (image enhancement) pada dasarnya adalah manipulasi, yang dilakukan pada sebuah citra untuk suatu keperluan yang spesifik, dengan memanfaatkan aspek-aspek sistim penglihatan manusia. Pemilihan teknik yang digunakan harus sesuai dengan jenis citra dan tujuan yang diharapkan .Tujuan utama perbaikan suatu gambar adalah untuk memproses sebuah gambar yang hasilnya dapat lebih berguna dari gambar aslinya untuk aplikasi tertentu.
Pada proses ini, ciri ciri tertentu yang terdapat didalam citra lebih diperjelas kemunculannya. Image enhancement terbagi dalam 2 kategori, yaitu metode spatial domain dan metode frequency domain. Spatial domain berkenaan dengan ruang gambar itu sendiri, dan berdasarkan manipulasi langsung pixel- pixel dari gambar. Frequency domain didasarkan pada modifikasi transformasi Fourier pada gambar.
Secara matematis, images enhancement dapat diartikan sebagai proses mengubah citra gambar f (x,y) menjadi f’ (x,y) sehingga ciri ciri yang dapat dilihat pada f (x,y) lebih ditonjolkan.
Proses proses yang termasuk kedalam perbaikan kualitas citra antara lain adalah:
•Pengubahan kecerahan gambar (image brightness)
•Pengubahan kontras (contrast streching)
•Pengubahan histogram citra
•Pelembutan citra (image smoothing)
•Penajaman (sharpening) tepi (edge)
•Pewarnaan semu (pseudocolouring)
•Pengubahangeometrik
Beberapa operasi image enhancement dapat dipandang sebagai operasi penapisan untuk memperoleh citra yang lebih baik. Operasi penapisan adalah operasi konvolusi citra f(x,y) dengan penapis h(x,y):
f(x,y) = h(x,y)* f(x,y)
atau dalam daerah frekwensi:
F(u,v) = H(u,v)* F(u,v)
Pada umumnya f(x,y) sudah diketahui sehingga persoalannya adalah memilih h(x,y) sedemikian rupa sehingga f’(x,y) merupakan citra yang menonjolkan ciri tertentu dari f(x,y)
Pada makalah ini akan dibahas mengenai Image Enhancement dengan judul “Perubahan Brightness & Contrast Image disertai Histogram”, pada program akan ditampilkan tentang pengubahan image gambar asli yang akan dibuat terang atau gelap secara manual, begitu pula dengan histogram dari perubahan/pergeseran warna.
3.ISI
Metode digunakan
Pada kali ini contoh pemakain Image Enhancement yang digunakan yaitu “Metode Spatial Domain’ dengan aplikasi Histogram disertai pergeseran brightness & contrast image.
Berikut akan disertakan listing program (bentuk M-file) dan hasil run program di Matlab.
3.1.1 M-File (listing program di Matlab)
function varargout = tergel(varargin)
% TERGEL M-file for tergel.fig
% TERGEL, by itself, creates a new TERGEL or raises the existing
% singleton*.
%
% H = TERGEL returns the handle to a new TERGEL or the handle to
% the existing singleton*.
%
% TERGEL('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in TERGEL.M with the given input arguments.
%
% TERGEL('Property','Value',...) creates a new TERGEL or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before tergel_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to tergel_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
% Copyright 2002-2003 The MathWorks, Inc.
% Edit the above text to modify the response to help tergel
% Last Modified by GUIDE v2.5 16-Mar-2008 20:49:38
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @tergel_OpeningFcn, ...
'gui_OutputFcn', @tergel_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 tergel is made visible.
function tergel_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 tergel (see VARARGIN)
% Choose default command line output for tergel
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes tergel wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% fungsi buatan sendiri untuk menghitung histogram citra
function [f]=histogram(cit)
[m n]=size(cit);
citra=double(cit);
for i=1:256, f(i)=0; end;
for j=1:m
for k=1:n
f(round(citra(j,k))+1)=f(round(citra(j,k))+1)+1;
end;
end;
% --- Outputs from this function are returned to the command line.
function varargout = tergel_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 Btn_buka_citra.
function Btn_buka_citra_Callback(hObject, eventdata, handles)
% hObject handle to Btn_buka_citra (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.slider1,'value',0);
[nama_file1, nama_path1]=uigetfile(...
{'*.bmp;*.jpg','File citra (*.bmp,*.jpg)';
'*.bmp','File Bitmap (*.bmp)';...
'*.jpg','File jpeg (*.jpg)';
'*.*','Semua File (*.*)'},...
'Buka File Citra');
if ~isequal(nama_file1,0)
handles.citra1=imread(fullfile(nama_path1,nama_file1));
guidata(hObject,handles);
axes(handles.sb_citra_asli);
imshow(handles.citra1);
absis=0:1:255;
[g]=histogram(handles.citra1);
axes(handles.sb_hist_asli);
plot(absis,g,'k');
axes(handles.sb_hist_geser);
plot(absis,g,'k');
else
return;
end
% --- Executes on button press in Btn_exit.
function Btn_exit_Callback(hObject, eventdata, handles)
% hObject handle to Btn_exit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
delete(handles.figure1);
% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
nilai_slider=get(handles.slider1,'value'); %menangkap nilai slider
num_citra=double(handles.citra1);
[m n]=size(handles.citra1); % menentukan ukuran citra
for i=1:m
for j=1:n
num_citra(i,j)=num_citra(i,j)+nilai_slider;
if num_citra(i,j)>255 % jika elemen citra >255 jadikan 255(terang)
num_citra(i,j)=255;
end;
if num_citra(i,j)<0 % jika elemen citra <0 jadikan 0(gelap)
num_citra(i,j)=0;
end;
end;
end;
axes(handles.sb_citra_geser);
gambar=uint8(num_citra); %dibuat menjadi int 8 bit
imshow(gambar);
[f]=histogram(num_citra);
absis=0:1:255;
axes(handles.sb_hist_geser);
plot(absis,f, 'k');
% --- Executes during object creation, after setting all properties.
function slider1_CreateFcn(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: slider controls usually have a light gray background, change
% 'usewhitebg' to 0 to use default. See ISPC and COMPUTER.
usewhitebg = 1;
if usewhitebg
set(hObject,'BackgroundColor',[.9 .9 .9]);
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
3.1.2 TAMPILAN PROGRAM
a. Sebelum di Run (pengerjaan di GUI Matlab)
b. Setelah di Run tanpa pergeseran (keadaan normal)
c. Setelah di Run dengan pergeseran (Image semakin terang)
4. KESIMPULAN
Setelah dilakukan uji coba dan analisa maka dapat disimpulkan:
1.Kualitas sebuah citra gambar dapat dikatakan baik apabila dapat di interprestasikan oleh mata manusia dengan mudah.
2.Proses perbaikan citra gambar dapat dilakukan dengan mengubah derajat keabuan yang mewakilinya, dengan cara men-set brightness dan contrastnya.
3.Pembuktian dari rumusan brightness dan kontrast dapat dilihat pada hasil run-program yang berada pada comment M-file yaitu dengan cara menset nilai 255 untuk terang dan 0 untuk gelap. Sehingga terdapat acuan dalam pergeseran brightness dan contrast gambar.
5. DAFTAR PUSTAKA
1.PPT kuliah Pengolahan Citra, Ekstensi UI 2006, Dodi Sudiana
2.Matlab, The Language of Technical Computing, version 7.1.0.246. (R14) service pack 3, august, 02, 2005
(Tugas sahabat UI : Adi Jexson Marbun)