SEGMENTASI CITRA
SEGMENTASI CITRA
Segmentasi citra adalah membagi suatu citra menjadi wilayah-wilayah yang homogen.
I.DASAR TEORI
- EDGE DETECTION (DETEKSI TEPI)
Penentuan tepian suatu objek dalam citra merupakan salah satu wilayah pengolahan citra digital yang paling awal dan paling banyak diteliti. Proses ini seringkali ditempatkan sebagai langkah pertama dalam aplikasi segmentasi citra, yang bertujuan untuk mengenali objek-objek yang terdapat dalam citra ataupun konteks citra secara keseluruhan.
Deteksi tepi berfungsi untuk mengidentifikasi garis batas (boundary) dari suatu objek yang terdapat pada citra. Tepian dapat dipandang sebagai lokasi piksel dimana terdapat nilai perbedaan intensitas citra secara ekstrem. Sebuah edge detector bekerja dengan cara mengidentifikasi dan menonjolkan lokasi-lokasi piksel yang memiliki karakteristik tersebut.
Ada banyak cara-cara untuk mengintifikasikan bagian tepi suatu citra, diantaranya adalah sebagai berikut :
- OPERATOR GRADIEN
Pada citra digital f(x,y), turunan berarah sepanjang tepian objek akan bernilai maksimum pada arah normal dari kontur tepian yang bersesuaian. Sifat ini dipergunakan sebagai dasar pemanfaatan operator gradien sebagai edge detector.
Operator gradien citra konvensional melakukan diferensiasi intensitas piksel pada arah baris dan kolom, mengikuti persamaan local intensity variation berikut :
Nilai magnitudo gradien dari persamaan di atas dapat dinyatakan sebagai berikut:
Operator gradien dapat direpresentasikan oleh dua buah kernel konvolusi Gx dan Gy, yang masing-masing mendefinisikan operasi penghitungan gradien dalam arah sumbu x dan sumbu y yang saling tegak lurus.
Dalam kasus penghitungan gradien dengan persamaan local intensity variation, maka kernel Gx dan Gy dapat dirumuskan seperti berikut:
Dari operator gradien konvensional di atas, dapat diturunkan berbagai operator gradien berikut :
1.Operator Roberts
2.Operator Prewit
3.Operator Sobel
- OPERATOR LAPLACIAN
Dalam kondisi transisi tepian yang lebih tidak ekstrem, penggunaan operator turunan kedua lebih dianjurkan.
Turunan kedua memiliki sifat lebih sensitif terhadap noise, selain itu juga menghasilkan double edge. Oleh karena itu, operator Laplacian dalam deteksi tepi pada umumnya tidak dipergunakan secara langsung, namun dikombinasikan dengan suatu kernel Gaussian menjadi sebuah operator Laplacian of Gaussian.
Fungsi transfer dari kernel Laplacian of Gaussian dapat dirumuskan sebagai berikut:
- OPERATOR ZERRO CROSS
Metode Zero-cross menemukan edge dengan cara mencari zero crossings setelah memfilter I (Identitas) dengan filter a yang telah ditentukan.
- OPERATOR CANNY
Salah satu algoritma deteksi tepi modern adalah deteksi tepi dengan menggunakan metoda Canny. Berikut adalah diagram blok algoritma Canny :
II. CARA PEMAKAIAN PROGRAM
a)Cara memakai program GUI adalah :
1.Buka program Matlab 7.0 keatas (tapi disini kami memakai matlab 7.5)
2.Buka toolbar File → New → GUI
3.Kemudian Klik tab Open Existing GUI→ D:\FILE UI\SEMESTER 6 KULIAH EVI (2008)\CITRA\TUGAS SEGMENTASI CITRA\EVI_EDGE_DETECTION.fig→ klik open
4.Muncul tampilan window berikut:
5.Klik run , sehingga muncul window berikut :
6.Lalu kita mulai dengan memasukkan image dengan klik toolbar File lalu klik ‘open file’ lalu pilih image atau citra apa yang mau dicoba untuk berbagai jenis program Edge Detection.
Contoh : using Robert, caranya : Klik toolbar File →Open File→ambil image(citra)
Tampilannya awal :
lalu klik pushbutton ‘apply’
III.TAMPILAN PROGRAM
Berikut ini bentuk-bentuk tampilan program edge detection dari berbagai topik-topik yang dibahas dalam tugas ini :
1.OPERATOR ROBERTS
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
2.OPERATOR PREWIT
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
3.OPERATOR SOBEL
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
4.OPERATOR LAPLACIAN GAUSIAN
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
5.OPERATOR ZERRO CROSS
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
6.OPERATOR CANNY
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
by : Evi Andriani
***********************************
Dibawah ini, PROGRAM SEGMENTASI CITRA PADA M-FILE, Semoga bermanfaat ya sahabat
***********************************
function varargout = EVI_EDGE_DETECTION(varargin)
% EVI_EDGE_DETECTION M-file for EVI_EDGE_DETECTION.fig
% EVI_EDGE_DETECTION, by itself, creates a new EVI_EDGE_DETECTION or raises the existing
% singleton*.
%
% H = EVI_EDGE_DETECTION returns the handle to a new EVI_EDGE_DETECTION or the handle to
% the existing singleton*.
%
% EVI_EDGE_DETECTION('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in EVI_EDGE_DETECTION.M with the given input arguments.
%
% EVI_EDGE_DETECTION('Property','Value',...) creates a new EVI_EDGE_DETECTION or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before roin_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to EVI_EDGE_DETECTION_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 EVI_EDGE_DETECTION
% Last Modified by GUIDE v2.5 21-Apr-2008 10:07:16
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @EVI_EDGE_DETECTION_OpeningFcn, ...
'gui_OutputFcn', @EVI_EDGE_DETECTION_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 EVI_EDGE_DETECTION is made visible.
function EVI_EDGE_DETECTION_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 EVI_EDGE_DETECTION (see VARARGIN)
% Choose default command line output for EVI_EDGE_DETECTION
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes EVI_EDGE_DETECTION wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = EVI_EDGE_DETECTION_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;
% --------------------------------------------------------------------
function mnu_open_Callback(hObject, eventdata, handles)
% hObject handle to mnu_open (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global image_original;
[file_name, path_name]=uigetfile(...
{'*.bmp;*.jpg','Citra File (*.bmp,*.jpg)';
'*.bmp','File Bitmap(*.bmp)';...
'*.jpg','File jpeg (*.jpg)';
'*.*','All (*.*)'},...
'Buka File Citra Original');
% Check File Conditon Exist or Not
if ~isequal(file_name,0)
%handles.original=imread(fullfile(path_name,file_name));
%guidata(hObject,handles);
%axes(handles.gambar_aslie);
%imshow(handles.original);
image_original=imread(fullfile(path_name,file_name));
guidata(hObject,handles);
axes(handles.gambar_aslie);
imshow(image_original);
else
return
end
% --------------------------------------------------------------------
function mnu_exit_Callback(hObject, eventdata, handles)
% hObject handle to mnu_exit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
option=questdlg(['Exit ',...
get(handles.figure1,'Name'),'?'],...
['Exit ',...
get(handles.figure1,'Name'),'...'],...
'Yes','No','Yes')
switch option,
case 'Yes',
delete(handles.figure1)
case 'No'
return;
end
% --------------------------------------------------------------------
function mnu_file_Callback(hObject, eventdata, handles)
% hObject handle to mnu_file (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in btnapply.
function btnapply_Callback(hObject, eventdata, handles)
% hObject handle to btnapply (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global image_original metode_edge;
I = .2989*image_original(:,:,1)+.5870*image_original(:,:,2)+.1140*image_original(:,:,3);
J = edge(I, metode_edge);
%guidata(hObject,J);
axes(handles.axes9);
guidata(hObject,handles);
imshow(J);
% --------------------------------------------------------------------
function edge_methode_SelectionChangeFcn(hObject, eventdata, handles)
% hObject handle to edge_methode (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global metode_edge;
switch get(hObject,'Tag') % Get Tag of selected object
case 'optroberts'
metode_edge='roberts';
case 'optprewitt'
metode_edge='prewitt';
case 'optsobel'
metode_edge='sobel';
case 'opt_laplacian'
metode_edge='log';
case 'opt_zero_cross'
metode_edge='zerocross';
case 'opt_canny'
metode_edge='canny';
end
% --- Executes on button press in optroberts.
function optroberts_Callback(hObject, eventdata, handles)
% hObject handle to optroberts (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of optroberts
Segmentasi citra adalah membagi suatu citra menjadi wilayah-wilayah yang homogen.
I.DASAR TEORI
- EDGE DETECTION (DETEKSI TEPI)
Penentuan tepian suatu objek dalam citra merupakan salah satu wilayah pengolahan citra digital yang paling awal dan paling banyak diteliti. Proses ini seringkali ditempatkan sebagai langkah pertama dalam aplikasi segmentasi citra, yang bertujuan untuk mengenali objek-objek yang terdapat dalam citra ataupun konteks citra secara keseluruhan.
Deteksi tepi berfungsi untuk mengidentifikasi garis batas (boundary) dari suatu objek yang terdapat pada citra. Tepian dapat dipandang sebagai lokasi piksel dimana terdapat nilai perbedaan intensitas citra secara ekstrem. Sebuah edge detector bekerja dengan cara mengidentifikasi dan menonjolkan lokasi-lokasi piksel yang memiliki karakteristik tersebut.
Ada banyak cara-cara untuk mengintifikasikan bagian tepi suatu citra, diantaranya adalah sebagai berikut :
- OPERATOR GRADIEN
Pada citra digital f(x,y), turunan berarah sepanjang tepian objek akan bernilai maksimum pada arah normal dari kontur tepian yang bersesuaian. Sifat ini dipergunakan sebagai dasar pemanfaatan operator gradien sebagai edge detector.
Operator gradien citra konvensional melakukan diferensiasi intensitas piksel pada arah baris dan kolom, mengikuti persamaan local intensity variation berikut :
Nilai magnitudo gradien dari persamaan di atas dapat dinyatakan sebagai berikut:
Operator gradien dapat direpresentasikan oleh dua buah kernel konvolusi Gx dan Gy, yang masing-masing mendefinisikan operasi penghitungan gradien dalam arah sumbu x dan sumbu y yang saling tegak lurus.
Dalam kasus penghitungan gradien dengan persamaan local intensity variation, maka kernel Gx dan Gy dapat dirumuskan seperti berikut:
Dari operator gradien konvensional di atas, dapat diturunkan berbagai operator gradien berikut :
1.Operator Roberts
2.Operator Prewit
3.Operator Sobel
- OPERATOR LAPLACIAN
Dalam kondisi transisi tepian yang lebih tidak ekstrem, penggunaan operator turunan kedua lebih dianjurkan.
Turunan kedua memiliki sifat lebih sensitif terhadap noise, selain itu juga menghasilkan double edge. Oleh karena itu, operator Laplacian dalam deteksi tepi pada umumnya tidak dipergunakan secara langsung, namun dikombinasikan dengan suatu kernel Gaussian menjadi sebuah operator Laplacian of Gaussian.
Fungsi transfer dari kernel Laplacian of Gaussian dapat dirumuskan sebagai berikut:
- OPERATOR ZERRO CROSS
Metode Zero-cross menemukan edge dengan cara mencari zero crossings setelah memfilter I (Identitas) dengan filter a yang telah ditentukan.
- OPERATOR CANNY
Salah satu algoritma deteksi tepi modern adalah deteksi tepi dengan menggunakan metoda Canny. Berikut adalah diagram blok algoritma Canny :
II. CARA PEMAKAIAN PROGRAM
a)Cara memakai program GUI adalah :
1.Buka program Matlab 7.0 keatas (tapi disini kami memakai matlab 7.5)
2.Buka toolbar File → New → GUI
3.Kemudian Klik tab Open Existing GUI→ D:\FILE UI\SEMESTER 6 KULIAH EVI (2008)\CITRA\TUGAS SEGMENTASI CITRA\EVI_EDGE_DETECTION.fig→ klik open
4.Muncul tampilan window berikut:
5.Klik run , sehingga muncul window berikut :
6.Lalu kita mulai dengan memasukkan image dengan klik toolbar File lalu klik ‘open file’ lalu pilih image atau citra apa yang mau dicoba untuk berbagai jenis program Edge Detection.
Contoh : using Robert, caranya : Klik toolbar File →Open File→ambil image(citra)
Tampilannya awal :
lalu klik pushbutton ‘apply’
III.TAMPILAN PROGRAM
Berikut ini bentuk-bentuk tampilan program edge detection dari berbagai topik-topik yang dibahas dalam tugas ini :
1.OPERATOR ROBERTS
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
2.OPERATOR PREWIT
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
3.OPERATOR SOBEL
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
4.OPERATOR LAPLACIAN GAUSIAN
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
5.OPERATOR ZERRO CROSS
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
6.OPERATOR CANNY
Untuk Citra tidak berwarna :
Untuk Citra berwarna :
by : Evi Andriani
***********************************
Dibawah ini, PROGRAM SEGMENTASI CITRA PADA M-FILE, Semoga bermanfaat ya sahabat
***********************************
function varargout = EVI_EDGE_DETECTION(varargin)
% EVI_EDGE_DETECTION M-file for EVI_EDGE_DETECTION.fig
% EVI_EDGE_DETECTION, by itself, creates a new EVI_EDGE_DETECTION or raises the existing
% singleton*.
%
% H = EVI_EDGE_DETECTION returns the handle to a new EVI_EDGE_DETECTION or the handle to
% the existing singleton*.
%
% EVI_EDGE_DETECTION('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in EVI_EDGE_DETECTION.M with the given input arguments.
%
% EVI_EDGE_DETECTION('Property','Value',...) creates a new EVI_EDGE_DETECTION or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before roin_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to EVI_EDGE_DETECTION_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 EVI_EDGE_DETECTION
% Last Modified by GUIDE v2.5 21-Apr-2008 10:07:16
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @EVI_EDGE_DETECTION_OpeningFcn, ...
'gui_OutputFcn', @EVI_EDGE_DETECTION_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 EVI_EDGE_DETECTION is made visible.
function EVI_EDGE_DETECTION_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 EVI_EDGE_DETECTION (see VARARGIN)
% Choose default command line output for EVI_EDGE_DETECTION
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes EVI_EDGE_DETECTION wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = EVI_EDGE_DETECTION_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;
% --------------------------------------------------------------------
function mnu_open_Callback(hObject, eventdata, handles)
% hObject handle to mnu_open (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global image_original;
[file_name, path_name]=uigetfile(...
{'*.bmp;*.jpg','Citra File (*.bmp,*.jpg)';
'*.bmp','File Bitmap(*.bmp)';...
'*.jpg','File jpeg (*.jpg)';
'*.*','All (*.*)'},...
'Buka File Citra Original');
% Check File Conditon Exist or Not
if ~isequal(file_name,0)
%handles.original=imread(fullfile(path_name,file_name));
%guidata(hObject,handles);
%axes(handles.gambar_aslie);
%imshow(handles.original);
image_original=imread(fullfile(path_name,file_name));
guidata(hObject,handles);
axes(handles.gambar_aslie);
imshow(image_original);
else
return
end
% --------------------------------------------------------------------
function mnu_exit_Callback(hObject, eventdata, handles)
% hObject handle to mnu_exit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
option=questdlg(['Exit ',...
get(handles.figure1,'Name'),'?'],...
['Exit ',...
get(handles.figure1,'Name'),'...'],...
'Yes','No','Yes')
switch option,
case 'Yes',
delete(handles.figure1)
case 'No'
return;
end
% --------------------------------------------------------------------
function mnu_file_Callback(hObject, eventdata, handles)
% hObject handle to mnu_file (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in btnapply.
function btnapply_Callback(hObject, eventdata, handles)
% hObject handle to btnapply (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global image_original metode_edge;
I = .2989*image_original(:,:,1)+.5870*image_original(:,:,2)+.1140*image_original(:,:,3);
J = edge(I, metode_edge);
%guidata(hObject,J);
axes(handles.axes9);
guidata(hObject,handles);
imshow(J);
% --------------------------------------------------------------------
function edge_methode_SelectionChangeFcn(hObject, eventdata, handles)
% hObject handle to edge_methode (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global metode_edge;
switch get(hObject,'Tag') % Get Tag of selected object
case 'optroberts'
metode_edge='roberts';
case 'optprewitt'
metode_edge='prewitt';
case 'optsobel'
metode_edge='sobel';
case 'opt_laplacian'
metode_edge='log';
case 'opt_zero_cross'
metode_edge='zerocross';
case 'opt_canny'
metode_edge='canny';
end
% --- Executes on button press in optroberts.
function optroberts_Callback(hObject, eventdata, handles)
% hObject handle to optroberts (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of optroberts