Anda di halaman 1dari 6

Komputer

Deteksi Tepi dengan Algoritma Canny Menggolongkan tepi batas merupakan hal yang penting dalam pemrosesan gambar. Pendeteksian tepi dalam sebuah gambar secara signifikan mengurangi jumlah data dan menyaring informasi yang tidak berguna, walaupun mempertahankan sifat structural dari sebuah gambar. Salah satu cara untuk mendeteksi batas tepi adalah dengan menggunakan algoritma canny. Algoritma ini dikenal sebagai algoritma yang baik untuk mendeteksi batas. Deteksi tepi ini pertama-tama menghaluskan gambar dengan menyingkirkan noise. Kemudian ditemukannya gradient gambarnya untuk menyoroti daerah yang mempunyai ruang kepalsuan yang tinggi. Algoritma ini lalu mengambil jalur sepanjang ruang tersebut dan menekan pixel yang tidak maximum (penekanan non-maximum). Dengan menggunakan metode Canny tepian yang dihasilkan lebih jelas, perbedaan tepian dengan background citra terlihat nyata. Tapi di dalam Canny sendiri, noise dibagian tertentu tidak bisa hilang begitu saja. Pengujian lain terhadap deteksi tepi adalah dengan menggunakan Ketahanannya terhadap gangguan (noise). Gangguan pada citra masukan (input) dapat dijadikan sebagai salah satu parameter yang menrntukan tingkat tampilan dari beberapa metode untuk melacak tepian suatu objek. Nilai gray level pada suatu tepian objek akan berubah sehingga akan semakin sulit bagi operator deteksi untuk menentukan batas tepian suatu objek.Berikut ini akan disertakan juga langkah-langkah cara mendeteksi tepi batas menurut canny. Langkah 1 Langkah pertama yang harus dilakukan adalah menyaring dan membuang noise pada gambar asli sebelum mencoba untuk menetapkan dan mendeteksi tepian. Untuk menghilangkan noise kita dapat memakai Gaussian filter, tapi ini juga digunakan secara eksklusif dalam algoritma canny. |G| = |Gx| + |Gy| Langkah 2 Setelah menghaluskan gambar dan menyingkirkan noise, langkah selanjutnya adalah menemukan tepi dengan menggunakan gradient dari gambar tersebut. Operator sobel membuat sebuah ukuran gradient ruang 2-D pada gambar tersebut. Lalu, kira-kira besarnya gradient pada setiap poin dapat dicari. Operator sobel menggunakan sepasang matrik 33 konvolusi, satu matrik untuk mengkalkulasi gradient di x (kolom) dan yang satu untuk mengkalkulasi gradient di y (baris). Rumus untuk menghitung gradient : |G| = |Gx| + |Gy| Langkah 3

Menemukan arah tepian itu mudah jika kita sudah menemukan gradient x dan y nya. Tapi, akan terjadi kesalahan jika penjumlahan X = 0. Jadi pada sintak harus ada handlingnya jika terjadi hal seperti tadi. Ketika, gradient x=0 itu juga berarti arah tepiannya x adalah 90 dejarat atau 0 derajat, tergantung juga dari arah y. Tapi jika gradient Y=0,maka arah tepiannya=0. Rumus untuk mencari arah tepian adalah : theta = invtan (Gy / Gx) Langkah 4 Setelah arah tepian ditemukan, langkah selanjutnya adalah merelasikan arah tepiannya ke arah yang dapat ditrace pada sebuah gambar. Jika pada sebuah gambar mempunyai pixel 55 : x x x x x x x x x x x x a x x x x x x x x x x x x

Dapat kita lihat pixel a, ada 4 kemungkinan arah yaitu 0 derajat (horisontal). 45 derajat (diagonal positif), 90 derajat (vertikal), atau 135 derajat (diagonal negatif). Jadi orientasi tepi harus ditetapkan pada salah satu dari 4 arah tersebut tergantung dari arah yang terdekat. Langkah 5 Setelah arah tepian diketahui, penindihan nonmaksimum diaplikasikan. Penindihan ini digunakan untuk mentrace sepanjang tepian dalam arah tepiaannya dan menindih pixel yang bernilai (= 0) yang tidak ada hubungannya dengan tepi. Hal ini akan menimbulkan garis kecil pada gambar keluaran. Langkah 6 Akhirnya akan menghasilkan sebuah gambar yang sudah dieliminasi, kita membutuhkan sebuah gradient jika ingin mengetehui garis tepi. Sehingga setiap pixel yang ada terhubung sartu sama lain. Dari berbagai sumber,,

INI LISTING PROGRAMNYA DI LAMPIRAN


function varargout = Deteksi(varargin) % DETEKSI M-file for Deteksi.fig % DETEKSI, by itself, creates a new DETEKSI or raises the existing % singleton*. % % H = DETEKSI returns the handle to a new DETEKSI or the handle to % the existing singleton*. % % DETEKSI('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in DETEKSI.M with the given input arguments. % % DETEKSI('Property','Value',...) creates a new DETEKSI or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before Deteksi_OpeningFunction gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to Deteksi_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 Deteksi % Last Modified by GUIDE v2.5 26-May-2013 07:38:51 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Deteksi_OpeningFcn, ... 'gui_OutputFcn', @Deteksi_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 Deteksi is made visible. function Deteksi_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 Deteksi (see VARARGIN)

% Choose default command line output for Deteksi handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes Deteksi wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line. function varargout = Deteksi_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 edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (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,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double

% --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function edit2_Callback(hObject, eventdata, handles) % hObject handle to edit2 (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,'String') returns contents of edit2 as text % str2double(get(hObject,'String')) returns contents of edit2 as a double

% --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

% --- 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'); gray=rgb2gray(I); BW=edge(gray,'canny'); set(proyek.figure1,'CurrentAxes',proyek.axes2); set(imshow(BW)); set(proyek.axes2,'Userdata',I); %redo_Callback(hObject,eventdata, handles);

% --- 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) selection=questdlg(['Keluar ' get(handles.figure1,'Name')''],... ['Keluar ' get(handles.figure1,'Name')''],... 'Ya','Tidak','Ya'); if strcmp(selection,'Tidak')

return; end delete(handles.figure1)