Implementasi Jaringan Syaraf Tiruan Self Organizing Map Kohonen dalam Pengenalan Telapak Kaki Bayi
62
LISTING PROGRAM
1. Form Beranda
function varargout = beranda(varargin) gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @beranda_OpeningFcn, ... 'gui_OutputFcn', @beranda_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
function beranda_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;
guidata(hObject, handles);
function varargout = beranda_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
function beranda_Callback(hObject, eventdata, handles) beranda;
close(gcbf);
function Latih_Callback(hObject, eventdata, handles) pelatihan;
close(gcbf);
function Uji_Callback(hObject, eventdata, handles) pengujian;
close(gcbf);
function Help_Callback(hObject, eventdata, handles) help;
function Exit_Callback(hObject, eventdata, handles) ask=questdlg('Anda ingin keluar dari aplikasi ini?',... 'Exit','Ya','Tidak','No');
switch ask case 'Ya'
(2)
close('all'); case 'Tidak' return end
function figure1_WindowButtonDownFcn(hObject, eventdata, handles) function text1_CreateFcn(hObject, eventdata, handles)
function axes3_CreateFcn(hObject, eventdata, handles) foto=imread('logo.jpg');
imshow(foto);
2. Form Pelatihan
function varargout = pelatihan(varargin) gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @pelatihan_OpeningFcn, ... 'gui_OutputFcn', @pelatihan_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
function pelatihan_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;
guidata(hObject, handles);
function varargout = pelatihan_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
function pushbutton1_Callback(hObject, eventdata, handles) function beranda_Callback(hObject, eventdata, handles) beranda;
close(gcbf);
function Latih_Callback(hObject, eventdata, handles) pelatihan;
close(gcbf);
function Uji_Callback(hObject, eventdata, handles) pengujian;
close(gcbf);
function help_Callback(hObject, eventdata, handles) help;
function Exit_Callback(hObject, eventdata, handles) ask=questdlg('Anda ingin keluar dari aplikasi ini?',... 'Exit','Ya','Tidak','No'); switch ask case 'Ya' close('all'); case 'Tidak' return
(3)
64
end
function load_citra_Callback(hObject, eventdata, handles) gambar1=imread('b1.jpg'); gambar2=imread('b2.jpg'); gambar3=imread('b3.jpg'); gambar4=imread('b4.jpg'); gambar5=imread('b5.jpg'); gambar6=imread('b6.jpg'); gambar7=imread('b7.jpg'); gambar8=imread('b8.jpg'); gambar9=imread('b9.jpg'); gambar10=imread('b10.jpg'); gambar11=imread('b11.jpg'); gambar12=imread('b12.jpg'); gambar13=imread('b13.jpg'); gambar14=imread('b14.jpg'); gambar15=imread('b15.jpg'); gambar16=imread('b16.jpg'); gambar17=imread('b17.jpg'); gambar18=imread('b18.jpg'); gambar19=imread('b19.jpg'); gambar20=imread('b20.jpg'); gambar21=imread('b21.jpg'); gambar22=imread('b22.jpg'); gambar23=imread('b23.jpg'); gambar24=imread('b24.jpg'); gambar25=imread('b25.jpg'); gambar26=imread('b26.jpg'); gambar27=imread('b27.jpg'); gambar28=imread('b28.jpg'); gambar29=imread('b29.jpg'); gambar30=imread('b30.jpg'); axes(handles.axes1); imshow(gambar1); axes(handles.axes2); imshow(gambar2); axes(handles.axes3); imshow(gambar3); axes(handles.axes4); imshow(gambar4); axes(handles.axes5); imshow(gambar5); axes(handles.axes6); imshow(gambar6); axes(handles.axes7); imshow(gambar7); axes(handles.axes8); imshow(gambar8); axes(handles.axes9); imshow(gambar9); axes(handles.axes10); imshow(gambar10); axes(handles.axes11); imshow(gambar11); axes(handles.axes12); imshow(gambar12); axes(handles.axes13); imshow(gambar13); axes(handles.axes14); imshow(gambar14); axes(handles.axes15); imshow(gambar15); axes(handles.axes16); imshow(gambar16); axes(handles.axes17); imshow(gambar17); axes(handles.axes18); imshow(gambar18); axes(handles.axes19); imshow(gambar19); axes(handles.axes20); imshow(gambar20); axes(handles.axes21); imshow(gambar21); axes(handles.axes22); imshow(gambar22); axes(handles.axes23); imshow(gambar23); axes(handles.axes24); imshow(gambar24);
(4)
axes(handles.axes25); imshow(gambar25); axes(handles.axes26); imshow(gambar26); axes(handles.axes27); imshow(gambar27); axes(handles.axes28); imshow(gambar28); axes(handles.axes29); imshow(gambar29); axes(handles.axes30); imshow(gambar30); set(handles.resize,'Enable','On');
function resize_Callback(hObject, eventdata, handles) gambar1=getimage(handles.axes1); gambar2=getimage(handles.axes2); gambar3=getimage(handles.axes3); gambar4=getimage(handles.axes4); gambar5=getimage(handles.axes5); gambar6=getimage(handles.axes6); gambar7=getimage(handles.axes7); gambar8=getimage(handles.axes8); gambar9=getimage(handles.axes9); gambar10=getimage(handles.axes10); gambar11=getimage(handles.axes11); gambar12=getimage(handles.axes12); gambar13=getimage(handles.axes13); gambar14=getimage(handles.axes14); gambar15=getimage(handles.axes15); gambar16=getimage(handles.axes16); gambar17=getimage(handles.axes17); gambar18=getimage(handles.axes18); gambar19=getimage(handles.axes19); gambar20=getimage(handles.axes20); gambar21=getimage(handles.axes21); gambar22=getimage(handles.axes22); gambar23=getimage(handles.axes23); gambar24=getimage(handles.axes24); gambar25=getimage(handles.axes25); gambar26=getimage(handles.axes26); gambar27=getimage(handles.axes27); gambar28=getimage(handles.axes28); gambar29=getimage(handles.axes29); gambar30=getimage(handles.axes30); gambar1=imresize(gambar1,[100,50]); gambar2=imresize(gambar2,[100,50]); gambar3=imresize(gambar3,[100,50]); gambar4=imresize(gambar4,[100,50]); gambar5=imresize(gambar5,[100,50]); gambar6=imresize(gambar6,[100,50]); gambar7=imresize(gambar7,[100,50]); gambar8=imresize(gambar8,[100,50]); gambar9=imresize(gambar9,[100,50]); gambar10=imresize(gambar10,[100,50]); gambar11=imresize(gambar11,[100,50]); gambar12=imresize(gambar12,[100,50]); gambar13=imresize(gambar13,[100,50]); gambar14=imresize(gambar14,[100,50]); gambar15=imresize(gambar15,[100,50]); gambar16=imresize(gambar16,[100,50]); gambar17=imresize(gambar17,[100,50]); gambar18=imresize(gambar18,[100,50]);
(5)
66 gambar19=imresize(gambar19,[100,50]); gambar20=imresize(gambar20,[100,50]); gambar21=imresize(gambar21,[100,50]); gambar22=imresize(gambar22,[100,50]); gambar23=imresize(gambar23,[100,50]); gambar24=imresize(gambar24,[100,50]); gambar25=imresize(gambar25,[100,50]); gambar26=imresize(gambar26,[100,50]); gambar27=imresize(gambar27,[100,50]); gambar28=imresize(gambar28,[100,50]); gambar29=imresize(gambar29,[100,50]); gambar30=imresize(gambar30,[100,50]); axes(handles.axes1); imshow(gambar1); axes(handles.axes2); imshow(gambar2); axes(handles.axes3); imshow(gambar3); axes(handles.axes4); imshow(gambar4); axes(handles.axes5); imshow(gambar5); axes(handles.axes6); imshow(gambar6); axes(handles.axes7); imshow(gambar7); axes(handles.axes8); imshow(gambar8); axes(handles.axes9); imshow(gambar9); axes(handles.axes10); imshow(gambar10); axes(handles.axes11); imshow(gambar11); axes(handles.axes12); imshow(gambar12); axes(handles.axes13); imshow(gambar13); axes(handles.axes14); imshow(gambar14); axes(handles.axes15); imshow(gambar15); axes(handles.axes16); imshow(gambar16); axes(handles.axes17); imshow(gambar17); axes(handles.axes18); imshow(gambar18); axes(handles.axes19); imshow(gambar19); axes(handles.axes20); imshow(gambar20); axes(handles.axes21); imshow(gambar21); axes(handles.axes22); imshow(gambar22); axes(handles.axes23); imshow(gambar23); axes(handles.axes24); imshow(gambar24); axes(handles.axes25); imshow(gambar25); axes(handles.axes26); imshow(gambar26); axes(handles.axes27); imshow(gambar27); axes(handles.axes28); imshow(gambar28); axes(handles.axes29); imshow(gambar29); axes(handles.axes30); imshow(gambar30); set(handles.grayscale,'Enable','On');
function grayscale_Callback(hObject, eventdata, handles) gambar1=getimage(handles.axes1); gambar2=getimage(handles.axes2); gambar3=getimage(handles.axes3); gambar4=getimage(handles.axes4); gambar5=getimage(handles.axes5); gambar6=getimage(handles.axes6); gambar7=getimage(handles.axes7); gambar8=getimage(handles.axes8); gambar9=getimage(handles.axes9); gambar10=getimage(handles.axes10); gambar11=getimage(handles.axes11); gambar12=getimage(handles.axes12); gambar13=getimage(handles.axes13); gambar14=getimage(handles.axes14);
(6)
gambar15=getimage(handles.axes15); gambar16=getimage(handles.axes16); gambar17=getimage(handles.axes17); gambar18=getimage(handles.axes18); gambar19=getimage(handles.axes19); gambar20=getimage(handles.axes20); gambar21=getimage(handles.axes21); gambar22=getimage(handles.axes22); gambar23=getimage(handles.axes23); gambar24=getimage(handles.axes24); gambar25=getimage(handles.axes25); gambar26=getimage(handles.axes26); gambar27=getimage(handles.axes27); gambar28=getimage(handles.axes28); gambar29=getimage(handles.axes29); gambar30=getimage(handles.axes30); gambar1=rgb2gray(gambar1); gambar2=rgb2gray(gambar2); gambar3=rgb2gray(gambar3); gambar4=rgb2gray(gambar4); gambar5=rgb2gray(gambar5); gambar6=rgb2gray(gambar6); gambar7=rgb2gray(gambar7); gambar8=rgb2gray(gambar8); gambar9=rgb2gray(gambar9); gambar10=rgb2gray(gambar10); gambar11=rgb2gray(gambar11); gambar12=rgb2gray(gambar12); gambar13=rgb2gray(gambar13); gambar14=rgb2gray(gambar14); gambar15=rgb2gray(gambar15); gambar16=rgb2gray(gambar16); gambar17=rgb2gray(gambar17); gambar18=rgb2gray(gambar18); gambar19=rgb2gray(gambar19); gambar20=rgb2gray(gambar20); gambar21=rgb2gray(gambar21); gambar22=rgb2gray(gambar22); gambar23=rgb2gray(gambar23); gambar24=rgb2gray(gambar24); gambar25=rgb2gray(gambar25); gambar26=rgb2gray(gambar26); gambar27=rgb2gray(gambar27); gambar28=rgb2gray(gambar28); gambar29=rgb2gray(gambar29); gambar30=rgb2gray(gambar30); axes(handles.axes1); imshow(gambar1); axes(handles.axes2); imshow(gambar2); axes(handles.axes3); imshow(gambar3); axes(handles.axes4); imshow(gambar4); axes(handles.axes5); imshow(gambar5); axes(handles.axes6); imshow(gambar6); axes(handles.axes7); imshow(gambar7); axes(handles.axes8); imshow(gambar8); axes(handles.axes9); imshow(gambar9); axes(handles.axes10); imshow(gambar10); axes(handles.axes11); imshow(gambar11); axes(handles.axes12); imshow(gambar12);
(7)
68 axes(handles.axes13); imshow(gambar13); axes(handles.axes14); imshow(gambar14); axes(handles.axes15); imshow(gambar15); axes(handles.axes16); imshow(gambar16); axes(handles.axes17); imshow(gambar17); axes(handles.axes18); imshow(gambar18); axes(handles.axes19); imshow(gambar19); axes(handles.axes20); imshow(gambar20); axes(handles.axes21); imshow(gambar21); axes(handles.axes22); imshow(gambar22); axes(handles.axes23); imshow(gambar23); axes(handles.axes24); imshow(gambar24); axes(handles.axes25); imshow(gambar25); axes(handles.axes26); imshow(gambar26); axes(handles.axes27); imshow(gambar27); axes(handles.axes28); imshow(gambar28); axes(handles.axes29); imshow(gambar29); axes(handles.axes30); imshow(gambar30); set(handles.sharpening,'Enable','On');
function sharpening_Callback(hObject, eventdata, handles) gambar1=getimage(handles.axes1); gambar2=getimage(handles.axes2); gambar3=getimage(handles.axes3); gambar4=getimage(handles.axes4); gambar5=getimage(handles.axes5); gambar6=getimage(handles.axes6); gambar7=getimage(handles.axes7); gambar8=getimage(handles.axes8); gambar9=getimage(handles.axes9); gambar10=getimage(handles.axes10); gambar11=getimage(handles.axes11); gambar12=getimage(handles.axes12); gambar13=getimage(handles.axes13); gambar14=getimage(handles.axes14); gambar15=getimage(handles.axes15); gambar16=getimage(handles.axes16); gambar17=getimage(handles.axes17); gambar18=getimage(handles.axes18); gambar19=getimage(handles.axes19); gambar20=getimage(handles.axes20); gambar21=getimage(handles.axes21); gambar22=getimage(handles.axes22); gambar23=getimage(handles.axes23); gambar24=getimage(handles.axes24); gambar25=getimage(handles.axes25); gambar26=getimage(handles.axes26); gambar27=getimage(handles.axes27); gambar28=getimage(handles.axes28); gambar29=getimage(handles.axes29); gambar30=getimage(handles.axes30); Sharp=fspecial('unsharp'); gbr1=imfilter(gambar1,Sharp); gbr2=imfilter(gambar2,Sharp); gbr3=imfilter(gambar3,Sharp); gbr4=imfilter(gambar4,Sharp);
(8)
gbr5=imfilter(gambar5,Sharp); gbr6=imfilter(gambar6,Sharp); gbr7=imfilter(gambar7,Sharp); gbr8=imfilter(gambar8,Sharp); gbr9=imfilter(gambar9,Sharp); gbr10=imfilter(gambar10,Sharp); gbr11=imfilter(gambar11,Sharp); gbr12=imfilter(gambar12,Sharp); gbr13=imfilter(gambar13,Sharp); gbr14=imfilter(gambar14,Sharp); gbr15=imfilter(gambar15,Sharp); gbr16=imfilter(gambar16,Sharp); gbr17=imfilter(gambar17,Sharp); gbr18=imfilter(gambar18,Sharp); gbr19=imfilter(gambar19,Sharp); gbr20=imfilter(gambar20,Sharp); gbr21=imfilter(gambar21,Sharp); gbr22=imfilter(gambar22,Sharp); gbr23=imfilter(gambar23,Sharp); gbr24=imfilter(gambar24,Sharp); gbr25=imfilter(gambar25,Sharp); gbr26=imfilter(gambar26,Sharp); gbr27=imfilter(gambar27,Sharp); gbr28=imfilter(gambar28,Sharp); gbr29=imfilter(gambar29,Sharp); gbr30=imfilter(gambar30,Sharp); axes(handles.axes1); imshow(gbr1); axes(handles.axes2); imshow(gbr2); axes(handles.axes3); imshow(gbr3); axes(handles.axes4); imshow(gbr4); axes(handles.axes5); imshow(gbr5); axes(handles.axes6); imshow(gbr6); axes(handles.axes7); imshow(gbr7); axes(handles.axes8); imshow(gbr8); axes(handles.axes9); imshow(gbr9); axes(handles.axes10); imshow(gbr10); axes(handles.axes11); imshow(gbr11); axes(handles.axes12); imshow(gbr12); axes(handles.axes13); imshow(gbr13); axes(handles.axes14); imshow(gbr14); axes(handles.axes15); imshow(gbr15); axes(handles.axes16); imshow(gbr16); axes(handles.axes17); imshow(gbr17); axes(handles.axes18); imshow(gbr18); axes(handles.axes19); imshow(gbr19); axes(handles.axes20); imshow(gbr20); axes(handles.axes21); imshow(gbr21); axes(handles.axes22); imshow(gbr22); axes(handles.axes23); imshow(gbr23); axes(handles.axes24); imshow(gbr24); axes(handles.axes25); imshow(gbr25); axes(handles.axes26); imshow(gbr26); axes(handles.axes27); imshow(gbr27); axes(handles.axes28); imshow(gbr28); axes(handles.axes29); imshow(gbr29); axes(handles.axes30); imshow(gbr30);
(9)
70
set(handles.deteksi_tepi,'Enable','On');
function deteksi_tepi_Callback(hObject, eventdata, handles) gambar1=getimage(handles.axes1); gambar2=getimage(handles.axes2); gambar3=getimage(handles.axes3); gambar4=getimage(handles.axes4); gambar5=getimage(handles.axes5); gambar6=getimage(handles.axes6); gambar7=getimage(handles.axes7); gambar8=getimage(handles.axes8); gambar9=getimage(handles.axes9); gambar10=getimage(handles.axes10); gambar11=getimage(handles.axes11); gambar12=getimage(handles.axes12); gambar13=getimage(handles.axes13); gambar14=getimage(handles.axes14); gambar15=getimage(handles.axes15); gambar16=getimage(handles.axes16); gambar17=getimage(handles.axes17); gambar18=getimage(handles.axes18); gambar19=getimage(handles.axes19); gambar20=getimage(handles.axes20); gambar21=getimage(handles.axes21); gambar22=getimage(handles.axes22); gambar23=getimage(handles.axes23); gambar24=getimage(handles.axes24); gambar25=getimage(handles.axes25); gambar26=getimage(handles.axes26); gambar27=getimage(handles.axes27); gambar28=getimage(handles.axes28); gambar29=getimage(handles.axes29); gambar30=getimage(handles.axes30); gb1=edge(gambar1,'canny'); gb2=edge(gambar2,'canny'); gb3=edge(gambar3,'canny'); gb4=edge(gambar4,'canny'); gb5=edge(gambar5,'canny'); gb6=edge(gambar6,'canny'); gb7=edge(gambar7,'canny'); gb8=edge(gambar8,'canny'); gb9=edge(gambar9,'canny'); gb10=edge(gambar10,'canny'); gb11=edge(gambar11,'canny'); gb12=edge(gambar12,'canny'); gb13=edge(gambar13,'canny'); gb14=edge(gambar14,'canny'); gb15=edge(gambar15,'canny'); gb16=edge(gambar16,'canny'); gb17=edge(gambar17,'canny'); gb18=edge(gambar18,'canny'); gb19=edge(gambar19,'canny'); gb20=edge(gambar20,'canny'); gb21=edge(gambar21,'canny'); gb22=edge(gambar22,'canny'); gb23=edge(gambar23,'canny'); gb24=edge(gambar24,'canny'); gb25=edge(gambar25,'canny'); gb26=edge(gambar26,'canny');
(10)
gb27=edge(gambar27,'canny'); gb28=edge(gambar28,'canny'); gb29=edge(gambar29,'canny'); gb30=edge(gambar30,'canny'); axes(handles.axes1); imshow(gb1); axes(handles.axes2); imshow(gb2); axes(handles.axes3); imshow(gb3); axes(handles.axes4); imshow(gb4); axes(handles.axes5); imshow(gb5); axes(handles.axes6); imshow(gb6); axes(handles.axes7); imshow(gb7); axes(handles.axes8); imshow(gb8); axes(handles.axes9); imshow(gb9); axes(handles.axes10); imshow(gb10); axes(handles.axes11); imshow(gb11); axes(handles.axes12); imshow(gb12); axes(handles.axes13); imshow(gb13); axes(handles.axes14); imshow(gb14); axes(handles.axes15); imshow(gb15); axes(handles.axes16); imshow(gb16); axes(handles.axes17); imshow(gb17); axes(handles.axes18); imshow(gb18); axes(handles.axes19); imshow(gb19); axes(handles.axes20); imshow(gb20); axes(handles.axes21); imshow(gb21); axes(handles.axes22); imshow(gb22); axes(handles.axes23); imshow(gb23); axes(handles.axes24); imshow(gb24); axes(handles.axes25); imshow(gb25); axes(handles.axes26); imshow(gb26); axes(handles.axes27); imshow(gb27); axes(handles.axes28); imshow(gb28); axes(handles.axes29); imshow(gb29); axes(handles.axes30); imshow(gb30); set(handles.train,'Enable','On');
function train_Callback(hObject, eventdata, handles) tic; gambar1=getimage(handles.axes1); gambar2=getimage(handles.axes2); gambar3=getimage(handles.axes3); gambar4=getimage(handles.axes4); gambar5=getimage(handles.axes5); gambar6=getimage(handles.axes6); gambar7=getimage(handles.axes7); gambar8=getimage(handles.axes8); gambar9=getimage(handles.axes9); gambar10=getimage(handles.axes10); gambar11=getimage(handles.axes11); gambar12=getimage(handles.axes12); gambar13=getimage(handles.axes13); gambar14=getimage(handles.axes14); gambar15=getimage(handles.axes15); gambar16=getimage(handles.axes16); gambar17=getimage(handles.axes17); gambar18=getimage(handles.axes18);
(11)
72 gambar19=getimage(handles.axes19); gambar20=getimage(handles.axes20); gambar21=getimage(handles.axes21); gambar22=getimage(handles.axes22); gambar23=getimage(handles.axes23); gambar24=getimage(handles.axes24); gambar25=getimage(handles.axes25); gambar26=getimage(handles.axes26); gambar27=getimage(handles.axes27); gambar28=getimage(handles.axes28); gambar29=getimage(handles.axes29); gambar30=getimage(handles.axes30); m1=double(reshape(gambar1,1,5000)); m2=double(reshape(gambar2,1,5000)); m3=double(reshape(gambar3,1,5000)); m4=double(reshape(gambar4,1,5000)); m5=double(reshape(gambar5,1,5000)); m6=double(reshape(gambar6,1,5000)); m7=double(reshape(gambar7,1,5000)); m8=double(reshape(gambar8,1,5000)); m9=double(reshape(gambar9,1,5000)); m10=double(reshape(gambar10,1,5000)); m11=double(reshape(gambar11,1,5000)); m12=double(reshape(gambar12,1,5000)); m13=double(reshape(gambar13,1,5000)); m14=double(reshape(gambar14,1,5000)); m15=double(reshape(gambar15,1,5000)); m16=double(reshape(gambar16,1,5000)); m17=double(reshape(gambar17,1,5000)); m18=double(reshape(gambar18,1,5000)); m19=double(reshape(gambar19,1,5000)); m20=double(reshape(gambar20,1,5000)); m21=double(reshape(gambar21,1,5000)); m22=double(reshape(gambar22,1,5000)); m23=double(reshape(gambar23,1,5000)); m24=double(reshape(gambar24,1,5000)); m25=double(reshape(gambar25,1,5000)); m26=double(reshape(gambar26,1,5000)); m27=double(reshape(gambar27,1,5000)); m28=double(reshape(gambar28,1,5000)); m29=double(reshape(gambar29,1,5000)); m30=double(reshape(gambar30,1,5000)); alpha=get(handles.alpha,'String');
input=[m1 ; m2 ; m3 ; m4 ; m5 ; m6 ; m7 ; m8; m9; m10; m11; m12; m13; m14; m15; m16; m17; m18; m19; m20;
m21; m22; m23; m24; m25; m26; m27; m28; m29; m30]; w= [m1; m2 ; m3 ; m4; m5; m6; m7; m8; m9; m10];
alpha= str2double(alpha); epoch=0;
tic;
while alpha > 0 && alpha <1 && epoch <=1000 for i=1:30
for j=1:10 d(j)=0; for k=1:5000
(12)
end end
for j=1:10
if d(j)== min(d) j_new = j; end
end
w(j_new,:)=w(j_new,:)+ alpha* (input(i,:)-w(j_new,:)); end alpha= 0.2*alpha; epoch=epoch+1; end t=toc; set(handles.time,'String',t); xlswrite('data.xls',w,'bobot_new','A1');
function pushbutton8_Callback(hObject, eventdata, handles) function alpha_Callback(hObject, eventdata, handles)
function alpha_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); end
function rad_Callback(hObject, eventdata, handles) function time_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); end
3. Form Pengujian
function varargout = pengujian(varargin) gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @pengujian_OpeningFcn, ... 'gui_OutputFcn', @pengujian_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
function pengujian_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;
(13)
74
function varargout = pengujian_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
function beranda_Callback(hObject, eventdata, handles) beranda;
close(gcbf);
function Latih_Callback(hObject, eventdata, handles) pelatihan;
close(gcbf);
function Uji_Callback(hObject, eventdata, handles) pengujian;
close(gcbf);
function help_Callback(hObject, eventdata, handles) help;
function Exit_Callback(hObject, eventdata, handles) ask=questdlg('Anda ingin keluar dari aplikasi ini?',... 'Exit','Ya','Tidak','No'); switch ask case 'Ya' close('all'); case 'Tidak' return end
function pilih_gambar_Callback(hObject, eventdata, handles)
[nama_file,nama_path] = uigetfile({'*.jpg','File jpeg (*.jpg)'},'Buka File Citra'); if ~isequal(nama_file,0) handles.citra=imread(fullfile(nama_path,nama_file)); guidata(hObject,handles); axes(handles.axes1); imshow(handles.citra); set(handles.testing,'Enable','On'); else return; end;
function testing_Callback(hObject, eventdata, handles) w=xlsread('data.xls','bobot_new'); citra_uji=getimage(handles.axes1); gambar=imresize(citra_uji,[100,50]); citra_uji_gray=rgb2gray(gambar); Sharp=fspecial('unsharp'); citra_uji2=imfilter(citra_uji_gray,Sharp); gb1=edge(citra_uji2,'canny'); uji1=double(reshape(gb1,1,5000)); for i=1:1 for k=1:10 d(k)=0; for j=1:5000 d(k)=d(k)+(w(k,j)- uji1(i,j)).^2;
(14)
end end end for k=1:10 if d(k)==min(d) cluster=k; end end if cluster==1;
set(handles.hasil,'String','Milik bayi 1'); elseif cluster==2;
set(handles.hasil,'String','Milik bayi 2'); elseif cluster==3;
set(handles.hasil,'String','Milik bayi 3'); elseif cluster==4;
set(handles.hasil,'String','Milik bayi 4'); elseif cluster==5;
set(handles.hasil,'String','Milik bayi 5'); elseif cluster==6;
set(handles.hasil,'String','Milik bayi 6'); elseif cluster==7;
set(handles.hasil,'String','Milik bayi 7'); elseif cluster==8;
set(handles.hasil,'String','Milik bayi 8'); elseif cluster==9;
set(handles.hasil,'String','Milik bayi 9'); elseif cluster==10;
set(handles.hasil,'String','Milik bayi 10'); end
function edit1_Callback(hObject, eventdata, handles) function edit1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); end
4. Form Help
function varargout = help(varargin) gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @help_OpeningFcn, ... 'gui_OutputFcn', @help_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
(15)
76
gui_mainfcn(gui_State, varargin{:}); end
function help_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;
guidata(hObject, handles);
function varargout = help_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
function pushbutton1_Callback(hObject, eventdata, handles) close('help');
(16)
Bobot Baru Setelah Pelatihan dalam Ms. Excel
(17)
(18)
(19)
80
(20)
(21)
(22)
(23)
(24)
Curriculum Vitae
Full Name : Ita Sharonni Alemmina Sinaga Place and Date of Birth : Medan, 2nd June, 1993
Religion : Christian
Marital Status : Single
Current address : Perum Graha Blok D No 158 Tj Anom Pancurbatu Home Address : Perum Graha Blok D No 158 Tj Anom Pancurbatu
Phone Number : +6285261649505
Email : [email protected]
Identity Card Number : 1207054206930006 Formal Education
Year Institution Learning
Time
GPA/Final Exam Score 2011-2015
(Now)
Bachelor’s Degree in Computer Science, From the Faculty of Computer Science And Information Technology
Universitas Sumatera Utara, Indonesia Under Graduate Thesis:
4 Years 3.60 (From
4.00-Scale) 2008-2011 Negeri 1 Senior High School Pem.Raya 3 Years 54.55
(From 60.00-Scale) 2005-2008 Santo Yoseph Junior High School Medan 3 Years 34.30
(From 40.00-Scale) 1999-2005 Tunas Harapan Elementary School Medan 6 Years 55.97
(From 60.00-Scale) Workshop and Seminar
Year Organizer Workshop and Seminar
2014 Department of Computer Science, Faculty of Computer Science And Information Technology
Universitas Sumatera Utara, Indonesia
Workshop and Seminar: Nasional Literasi Informasi (SENARAI) 2014 Department of Computer Science,
Faculty of Computer Science And Information Technology
Universitas Sumatera Utara, Indonesia
Workshop and Seminar: IMILKOM Contest and Seminar Open BTS (ICONS)
2013 National Congress ILP2MI4 Comitee Workshop and Seminar:
Pencaplokan Budaya dalam rangka Kongres Nasional Ikatan Lembaga Penalaran dan Penelitian Mahasiswa Indonesia
(25)
86
2013 Ikatan Mahasiswa Teknik Elektro Universitas Sumatera Utara
Seminar : Menuju Teknologi 5G: Tantangan dan Peluang Bagi Perguruan Tinggi
2012 Department of Computer Science, Faculty of Computer Science And Information Technology
Universitas Sumatera Utara, Indonesia
Workshop and Seminar: Application IMILKOM Contest
2012 Department of Computer Science, Faculty of Computer Science And Information Technology
Universitas Sumatera Utara, Indonesia
Workshop and Seminar: How to Build Reality for Mobile
Application 2011 Department of Computer Science,
Faculty of Computer Science And Information Technology
Universitas Sumatera Utara, Indonesia
Workshop and Seminar: “Animation
for Fun by DreamArch” Artechno Festival
Comitee Experience
Year Organization Position
2014 Celebration of Oikumene’s Christmas and Easter Universitas Sumatera Utara
Leader of documentas ional and publication
2013 IMILKOM Contest Staff
2014 Seminar Nasional Literasi Informasi Fasilkom TI Staff
2013 Retreat KMKI Universitas Sumatera Utara Song
Leader 2012 Christian student community of computer science’s Christmas Vice leader 2011 Christian student community of computer science’s Christmas Song
Leader
2011 Dies Natalis Computer Science Co.
Secretary
2010 SmoePle Choir Coordina
tor Organizational Experience
Year Organization Position
2015 Ikatan Mahasiswa Ilmu Komputer Staff
2014-2015 Ikatan Mahasiswa Ilmu Komputer Staff of
society relationship
2013-2014 Ikatan Mahasiswa Ilmu Komputer Staff of
educational 2013-2014 Christian student community of Computer Science Treasurer
(26)
Working Experience
Year Organization Position
2011-2015 Private Les Teacher
Expertise
Expertise Description
of Capabilities
Internet & MS. Office Advanced
Programming language: c++, Java, C#, Pascal, PHP, Symphony Intermediate Graphic design & Photo editing: Adobe Photoshop CS Basic
(27)
Daftar Pustaka
Astuti,E.D. 2009. Pengantar Jaringan Syaraf Tiruan. Wonosobo: Star Publishing. Bilsel,R.U & Lin, D.K.J.L. 2012. Ishikawa Cause and Effect Diagrams Using Capture
Recapture Techniques. Quality Technology & Quantitative Management 9(2): 137-152. (Online) www.personal.psu.edu/users/.../2012_QTQM.pdf (28 Agustus 2015)
Bose, T.K. 2012. Application of Fishbone Analysis for Evaluating Supply Chain and Business Process- A Case Study On The St James Hospital. International Journal of Managing Value and Supply Chains 3(2): 17-24. (Online) airccse.org/journal/mvsc/papers/3212ijmvsc02.pdf (28 Agustus 2015). Darmawan,D.2010. Pengenalan Wajah dengan Metode Backpropagation
Menggunakan Kamera CCTV Inframerah.Skripsi. Universitas Indonesia. Haykin,S. 2005. Neural Network A Comprehensive Foundation. India: Pearson
Education.
Hermawati,F.A.2013.Pengolahan Citra Digital Konsep dan Teori.Yogyakarta: ANDI. Johandra, M.I. 2014. Implementasi Learning Vector Quantization Dan Deteksi Tepi
Robert Untuk Pengenalan Citrawajah. Skripsi. Universitas Sumatera Utara.
Kasabov,N.K. 1998. Foundation of Neural Networks, Fuzzy Systems, and Knowledge Engineering. Massachusets: The MIT Press.
Marbun,L.2014. Implementasi Jaringan Syaraf Tiruan Bidirectional Associative
Memory Untuk Pengidentifikasian Telapak Tangan
Manusia.Skripsi.Universitas Sumatera Utara.
Muis,S. 2009. Identifikasi Pola Sinyal dengan Menggunakan Teknik Neural Networks. Yogyakarta: Graha Ilmu.
Prabowo,A., Sarwoko,E.A. & Riyanto,D.E. 2006. Perbandingan Antara Metode Neural Network dengan Metode Learning Vector Quantization pada Pengenalan Pola Tandatangan. Jurnal Sains & Matematika.14(4):147-153.
(28)
Prasetyo, Eko. 2011. Pengolahan Citra Digital dan Aplikasinya menggunakan Matlab.Yogyakarta: Andi Offset
Pressman, R.S. 2010. Rekayasa Perangkat Lunak: Pendekatan Praktisi Edisi 7.Yogyakarta: Penerbit Andi.
Putra,D.2010.Pengolahan Citra Digital.Yogyakarta: ANDI.
Siang,J.J. 2009. Jaringan Syaraf Tiruan dan Pemrogramannya menggunakan MATLAB. Yogyakarta: ANDI.
Sinaga,J.R.2015. Implementasi Algoritma Self Organizing Maps (SOM) Untuk Mengidentifikasi Benih Jagung Hibrida. Skripsi. Universitas Sumatera Utara.
Siregar,T.R. 2013. Implementasi Jaringan Syaraf Metode Bidirectional Associative Memory Untuk Pengenalan Pola Wajah.Skripsi. Universitas Sumatera Utara. Suyanto.2011.Artificial Intelligence.Bandung:Informatika.
Wuryandari,M.D & Afrianto, I. 2012. Perbandingan Metode Jaringan Syaraf Tiruan Backpropagation dan Learning Vector Quantization Pada Pengenalan Wajah.Jurnal Komputer dan Informatika 1(1): 45-51.
(29)
BAB 3
ANALISIS DAN PERANCANGAN SISTEM
3.1 Analisis Sistem
Sebelum proses pembuatan suatu sistem, langkah awal yang harus dilakukan adalah menganalisis sistem yang akan dibuat. Analisis sistem ini bertujuan untuk mengetahui permasalahan-permasalahan, serta kebutuhan sistem tersebut. Dengan adanya analisis ini, akan memudahkan dalam proses perancangan model suatu sistem sehingga sistem yang dibuat menjadi tepat guna. Ada 3 jenis analisis yang dilakukan dalam penelitian ini yakni: analisis masalah, analisis kebutuhan dan analisis proses. 3.1.1 Analisis masalah
Untuk dapat menyelesaikan suatu masalah, maka harus diketahui dengan baik bagaimana masalah tersebut. Hal itu bisa didapatkan melalui penganalisaan masalah. Diagram Ishikawa merupakan suatu diagram yang efektif untuk mengidentifikasi penyebab-penyebab dari suatu masalah (Bilsel, 2012)
Diagram Ishikawa atau fishbone diagram berbentuk menyerupai tulang ikan yang terdiri dari kepala ikan dan tulang ikan. Pada diagram Ishikawa, terdapat tulang utama yang menghubungkan antara masalah utama dan penyebabnya. Masalah utama diletakkan pada kepala diagram dan penyebabnya diletakkan pada tulangnya. (Bose,2012).
Identifikasi masalah dari penelitian ini dijabarkan dalam bentuk diagram Ishikawa seperti Gambar 3.1:
(30)
Gambar 3.1 Diagram Ishikawa Pengenalan Telapak Kaki Bayi
Melalui Gambar 3.1 dapat diketahui masalah serta penyebabnya yang ditinjau dari 4 kategori yaitu manusia, lingkungan, mesin dan material. Dari kategori manusia, seringkali tanda pengenal, seperti dalam kasus yang berhubungan dalam penelitian ini, yaitu pita identifikasi bayi dapat tercecer atau tertukar. Sedangkan mengenali seorang bayi dari wajah, sangat sulit dilakukan. Padahal, dibutuhkan alat pengenal yang bersifat unik untuk membedakan yang satu dengan yang lainnya. Inilah penyebab dari kategori lingkungan. Adanya perkembangan ilmu teknologi dalam bidang jaringan syaraf tiruan yang dapat bekerja mengenali pola seperti kemampuan visual manusia serta alat pendukung komputer yang saat ini lazim digunakan, mendorong dibentuknya sebuah sistem yang dapat mengenali identitas melalui biometrika manusia.
3.1.2 Analisis kebutuhan
Analisis spesifikasi kebutuhan akan menghasilkan spesifikasi dari karakteristik operasional yang akan dimiliki oleh sistem yang akan dibuat, dimana hal ini mungkin mengindikasikan antarmuka perangkat lunak dengan elemen-elemen sistem yang lain. Analisis kebutuhan memungkinkan untuk menetapkan spesifikasi-spesifikasi dasar perangkat lunak. (Pressman,2010)
(31)
24
Analisis kebutuhan sistem pengidentifikasian telapak kaki bayi terdiri dari 2 yaitu analisis kebutuhan fungsional dan analisis kebutuhan non fungsional. Kebutuhan fungsional adalah kebutuhan yang harus dipenuhi dalam fungsi-fungsi aplikasi.
Dalam sistem pengenalan citra cap telapak kaki bayi ini, yang menjadi persyaratan fungsional adalah:
1. Sistem dapat melakukan proses prapengolahan citra sebelum melakukan proses pelatihan yakni proses grayscale, sharpening dan filtering.
2. Sistem dapat menyimpan bobot akhir dari proses pelatihan
3. Sistem dapat melakukan pengenalan terhadap citra telapak kaki bayi yang telah diuji
Untuk menjalankan sistem pengidentifikasian telapak kaki bayi ini, maka persyaratan non-fungsional yng dibutuhkan adalah:
1. Performa
Aplikasi yang dibangun dapat menjalankan fungsinya dengan baik yaitu dapat mengenali citra cap telapak kaki bayi.
2. Tampilan
Sistem memiliki tampilan muka yang user friendly sehingga pengguna dapat lebih mudah memahami dalam penggunaan sistem. Selain itu, pemberian menu bantuan juga membantu pengguna untuk bisa belajar menggunakan sistem. 3. Ekonomi
Aplikasi yang dibangun tidak membutuhkan biaya tambahan atau perangkat tambahan dalam penggunaannya sehingga menjadi hemat biaya.
4. Manajemen kualitas
Aplikasi yang dibangun memiliki kualitas yang baik dalam proses pengolahan citra, pelatihan maupun proses pengujian serta pengefisiensian waktu dalam melakukan tiap proses tersebut.
5. Dokumentasi
Dari serangkaian proses pengolahan citra akan dihasilkan vektor input yang berasal dari pixel-pixel citra dalam bentuk biner. Vektor input dan bobot baru hasil pelatihan akan disimpan di dalam komputer.
(32)
3.1.3 Analisis proses
Ada 3 proses yang dilewati dari sistem yang dibuat dalam penelitian. Ketiga proses tersebut secara berurut adalah pengolahan citra, pelatihan dan pengujian. Pada proses pengolahan citra yang dilakukan adalah proses pengubahan ukuran citra, pengubahan citra menjadi citra grayscale, sharpening citra dan deteksi tepi.
Citra yang dilatih terdiri dari 30 citra, dimana 10 citra berupa citra asli cap telapak kaki bayi dari 10 bayi berbeda sedangkan 20 lainnya merupakan citra dari ke-10 citra asli tadi yang telah diberi noise dengan persenan yang berbeda.
Untuk proses pengolahan citra untuk pelatihan, yang pertama kali dilakukan yakni proses resize citra. Hal ini dilakukan untuk memperkecil ukuran citra asli yang ukurannya mencapai 1536 x 2048 pixel. Resize citra yang dilakukan mengubah ukuran citra asli menjadi 100 x 50 pixel.
Selanjutnya dilakukan proses grayscale citra. Proses grayscale adalah proses pengubahan citra RGB menjadi citra skala abu. Setiap citra RGB yang diinput akan diubah menjadi citra yang hanya memiliki informasi intensitas warna putih dan hitam dalam setiap pixelnya sehingga citra berubah menjadi warna abu-abu.
Proses yang dilakukan setelah pengubahan citra RGB menjadi citra skala abu adalah proses filtering. Filtering yang digunakan dalam penelitian ini adalah high-pass filtering yang bertujuan untuk mempertajam citra. Sharpening citra ini dibutuhkan agar garis-garis halus pada citra cap telapak kaki bayi dapat terdeteksi lebih jelas.
Setelah proses sharpening, maka akan dilakukan deteksi tepi. Dalam penelitian ini digunakan deteksi tepi Canny. Deteksi tepi ini bertujuan untuk menandai yang menjadi detail citra. Hasil dari deteksi tepi ini nantinya berupa citra biner. Matriks piksel dari citra biner hanya memuat nilai 0 atau 1.
Ukuran matriks dari citra biner hasil dari deteksi tepi berukuran 100 x 50. Oleh sebab itu, dilakukan pengubahan ukuran matriks citra menjadi 1 x 5000 sehingga matriks inilah yang akan dijadikan vektor input pada proses pelatihan maupun proses pengujian.
(33)
26
Untuk memulai proses pelatihan, pertama kali yang dilakukan adalah inisialisasi bobot. Inisialisasi bobot ini dilakukan secara acak. Ukuran matriks bobot acak ini disesuaikan dengan banyaknya kelompok yang akan dibentuk dan jumlah elemen setiap vektor input. Dalam penelitian ini , citra akan dikelompokkan ke dalam 10 kelompok. Sedangkan elemen tiap vektor input berjumlah 5000 elemen. Sehingga matriks bobot acak yang dibuat berukuran 10 x 5000. Selanjutnya dilakukan proses pelatihan menggunakan metode Kohonen.
Berikut salah satu proses perhitungan menggunakan Kohonen: 1. Inisialisasi bobot acak :
2. Misalkan nilai alpha diset sebesar 0.5 dan 0.2*
Vektor input citra 1:
Selanjutnya dihitung jarak Euclidean untuk vektor input dengan rumus: D(j)=
D(1)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(0-0)2 + (1-1)2 +(1-1)2+...= 0.6787 D(2)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-0)2 + (1-1)2 +(1-1)2+...= 0.2785 D(3)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-0)2 + (1-1)2 +(1-1)2+...=0.1124 D(4)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(0-0)2 + (0-1)2 +(1-1)2+...= 0.4218 D(5)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-0)2 + (1-1)2 +(1-1)2+...= 0.4218
(34)
D(6)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-0)2 + (1-1)2 +(1-1)2+...= 0.9706 D(7)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-0)2 + (1-1)2 +(1-1)2+...= 0.6948 D(8)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(0-0)2 + (1-1)2 +(1-1)2+...= 0.3816 D(9)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-0)2 + (1-1)2 +(1-1)2+...= 0.1576 D(10)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-0)2 + (1-1)2 +(1-1)2+...= 0.8235 Dari hasil D(j) yang diperoleh dapat dilihat D(j) minimum berada pada j=3, sehingga bobot acak pada baris 3 akan diubah dengan rumus:
Pengubahan bobot acak ini dilakukan untuk semua nilai i (1-5000), sehingga bobot baru adalah
Setelah itu dilakukan penghitungan untuk mencari D(j) minimum untuk vektor x2
dengan menggunakan bobot baru yang sudah diperoleh:
(35)
28
D(1)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(0-1)2 + (1-1)2 +(1-1)2+...= 1.6236 D(2)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(1-1)2+...= 0.1589 D(3)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(0-1)2 + (0-1)2 +(0-1)2+...= 0.2345 D(4)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(0-1)2 + (0-1)2 +(1-1)2+...= 0.9878 D(5)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(1-1)2+...= 0.2258 D(6)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(1-1)2+...= 0.4359 D(7)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(1-1)2+...= 0.3564 D(8)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(0-1)2 + (1-1)2 +(1-1)2+...= 0.3168 D(9)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(1-1)2+...= 0.3544 D(10)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(1-1)2+...= 0.5235 Dapat dilihat dari hasil perhitungan bahwa d(j) minimum terletak untuk j= 2, sehingga w akan diubah pada baris kedua dengan mencari menggunakan metode Kohonen
(36)
Hal ini dilakukan untuk semua nilai vektor input hingga iterasi ke 1000 sehingga pada akhirnya adalah sebagai berikut:
Gambar 3.2 Bobot baru dalam Ms.Excel Setelah dihasilkan, bobot tersebut akan disimpan.
Pada proses pengujian, citra yang dipilih akan terlebih dahulu mengalami proses pengolahan citra seperti pada proses pelatihan. Citra akan di resize, diubah ke skala abu , difilter dan dideteksi tepi sehingga menghasilkan citra biner. Matriks citra biner ini kemudian dikelompokkan berdasarkan jarak terdekatnya dengan bobot baru hasil pelatihan. Misalkan citra 1 dengan vektor input :
D(1)= (0-0)2 + ( 0-0)2 + (0-0)2 +... +(0.7233-1)2 + (1-1)2 +(1-1)2+...= 0.1253 D(2)= (0-0)2 + ( 0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(0.7233-1)2+...= 0.8156
(37)
30
D(3)= (0-0)2 + ( 0-0)2 + (0-0)2 +... +(0.2679-1)2 + (0.2679-1)2 +(0-1)2+...= -0.5883 D(4)= (0-0)2 + ( 0-0)2 + (0-0)2 +... +(0.7233-1)2 + (0.7233-1)2 +(1-1)2+...= 0.6145 D(5)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(1-1)2+...= 0.3803 D(6)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(1-1)2+...= 0.3524 D(7)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(1-1)2+...= 0.1765 D(8)= (0-0)2 + ( 0-0)2 + (0-0)2 +... +(0.7233-1)2 + (0.7233-1)2 +(1-1)2+...= 0.2213 D(9)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(1-1)2+...= -0.1254 D(10)= (0-0)2 + ( 0-0)2 + (0-0)2 + (0-0)2 +... +(1-1)2 + (1-1)2 +(1-1)2+...= 0.3564 Dapat dilihat D(j) minimum untuk j= 3, sehingga citra 1 dikelompokkan/ teridentifikasi ke dalam bayi 3.
3.2 Perancangan Sistem 3.2.1 Diagram use-case
Use case menggambarkan bagaimana seorang pengguna akhir yang berinteraksi dengan sistem yang berada di bawah sejumlah situasi dan kondisi yang sifatnya spesifik. Use case selalu didefenisikan dari sudut pandang aktor-aktor yang berinteraksi dengan sistem/perangkat lunak yang sedang dikembangkan (Pressman, 2010). Diagram use case untuk sistem pengenalan telapak kaki bayi dapat dilihat seperti pada Gambar 3.3:
(38)
Gambar 3.3 Use case Sistem Pengenalan Telapak Kaki Bayi
Selanjutnya tiap use case yang terdapat pada Gambar 3. 2 dijelaskan pada dokumentasi naratif pada Tabel 3.1 dan 3.2
Tabel 3.1 Dokumentasi naratif dari use case pelatihan Nama Use case Pelatihan
Aktor Programmer dan user
Deskripsi Use case ini mendekripsikan pelatihan dengan metode SOM Kohonen
Pra Kondisi Sudah masuk dalam tampilan antarmuka Pelatihan
Bidang Khas Aksi Aktor Respon Sistem
1. Aktor menekan tombol Load Citra
2. Sistem menampilan citra cap telapak kaki bayi
3. Aktor menekan tombol Resize citra
4. Sistem mengubah ukuran citra dan menampilkan citra hasil resize
5. Aktor menekan tombol Grayscale
6. Sistem mengubah citra asli menjadi citra grayscale
(39)
32
7. Aktor menekan tombol sharpening
8. Sistem melakukan penajaman citra dan menampilkannya dalam axes 9. Aktor menekan tombol
deteksi tepi
10. Sistem mendeteksi tepi citra 11. Aktor menekan
tombol Train
12. Sistem mengubah ukuran matriks citra dan melakukan Pelatihan Kohonen
Bidang Alternatif
1. Aktor memilih menu Exit
2. Keluar dari aplikasi
Post Kondisi Sistem menyimpan bobot baru
Tabel 3.2 Dokumentasi naratif dari use case pengujian Nama Use case Pengujian
Aktor Programmer dan user
Deskripsi Use case mendeskripsikan proses pengujian dengan metode Kohonen
Pra Kondisi Sudah masuk dalam tampilan antarmuka Pengujian
Bidang Khas Aksi Aktor Respon Sistem
1. Aktor menekan tombol Pilih Gambar
2. Sistem menampilan dialog memilih file citra
3. Aktor memilih citra yang akan diuji
4. Sistem menampilkan citra yang akan diuji ke dalam axes
6. Sistem mengubah ukuran citra 7. Sistem mengubah citra mengubah citra menjadi citra grayscale
8. Sistem melakukan penajaman citra dan deteksi tepi serta pengujian dengan metode Kohonen
Bidang Alternatif
1. Aktor memilih menu Exit
2. Keluar dari aplikasi
(40)
3.2.2 Diagram sekuensial
Diagram sekuensial atau sequence diagram adalah diagram yang menunjukkan model logika dari sebuah use case dengan menggambarkan interaksi pesan diantara objek-objek dalam urutan-urutan waktu (Whitten, 2007). Oleh sebab itu, perlu diketahui objek-objek yang dimiliki oleh suatu proses. Sequence diagram dari proses pelatihan seperti pada Gambar 3.3 berikut:
Gambar 3.4 Sequence diagram untuk pelatihan
Gambar 3.5 Sequence diagram untuk pengujian
3.2.3 Diagram aktivitas
Diagram aktivitas (activity diagram) melengkapi use case yang telah dibuat sebelumnya dengan memberikan representasi grafis dari aliran-aliran interaksi di
(41)
34
dalam suatu skenario yang sifatnya spesifik. Mirip dengan diagram alir, suatu diagram aktivitas menggunakan sebuah kotak bersisi lengkung untuk menggambarkan fungsi tertentu yang ada dalam suatu sistem, sedangkan tanda panah menggambarkan aliran di dalam sistem, bentuk intan digunakan untuk menggambarkan keputusan-keputusan bercabang, dan garis horizontal tebal mengindikasikan bahwa aktivitas- aktivitas paralel dalam perangkat lunak sedang terjadi (Pressman, 2010).
Diagram aktivitas untuk use case pelatihan dan pengujian dapat dilihat seperti pada Gambar 3.6 dan Gambar 3.7:
(42)
Gambar 3.7 Diagram aktivitas use case pengujian
3.2.4 Pseudocode
Pseudocode adalah salah satu bentuk penulisan algoritma dengan menggunakan bahasa yang dapat dimengerti oleh manusia. Pseudocode tidak dapat dijalankan atau dibaca oleh mesin. Tidak ada aturan baku dalam penulisan pseudocode.
a) Pseudocode proses pelatihan
citra_latih read(nama_file)
citra_latih2 resize(citra_Latih [100,50])
citra_gray rgb2gray(citra_Latih2)
citra_sharp sharpening (citra_gray)
(43)
36
vek_input reshape_matriks (citra biner [1,5000])
set : matriks bobot_acak[10,5000]
epoch 0;
input: double (alpha)
while alpha>0 and alpha < 1 and epoch<=1000 loop
for i 1 to 30
for j 1 to 10
d(j)0;
for k 1:5000
d(j)= d(j)+(bobot_acak [j k]-vek_input [i k]))^2
endfor endfor
for j 1 to 10
if d(j)== nilai_min(d);
change j value to j_new; endif
endfor
bobot[j_new ; allcoulumns)=bobot (j_new; allcooulumns)+ alpha*
(vek_input [i; allcoulumns] – bobot [j_new; allcoulumns])
endfor
alpha alpha* 0,2;
epoch epoch +1;
endwhile
(44)
b) Pseudocode proses pengujian Read bobot_new
citra_uji openfile(citra)
gambar imresize(citra_uji,[100,50]);
citra_uji_gray rgb2gray(gambar);
citra_uji2 filter(citra_uji_gray,Sharp);
gb1 edge(citra_uji2,'canny');
uji1 double(reshape(gb1,1,5000));
for i 1 to 1
for k 1 to 9
d(k)0;
for j 1 to 5000
d(k) d(k)+(bobot_new(k,j)- uji1(i,j)).^2;
endfor endfor endfor
for k 1 to 9
if d(k)==value_min(d)
made cluster value from k; endif
endfor
(45)
38
3.2.5 Flowchart sistem
Adapun flowchart sistem baik proses pelatihan maupun pengujian dapat dilihat pada Gambar 3.8 dan 3.9 :
(46)
(47)
40
3.2.6 Perancangan antarmuka sistem
Gambar 3.10 Rancangan antarmuka beranda
Keterangan untuk gambar rancangan antarmuka beranda dijelaskan pada tabel 3.3: Tabel 3.3 Keterangan rancangan antarmuka beranda
NO Keterangan
1 Menu beranda
2 Menu Pelatihan untuk memasuki antarmuka proses pelatihan 3 Menu Pengujian untuk menuju antarmuka proses pengujian
4 Menu Help untuk menampilkan bantuan serta petunjuk kepada pengguna 5 Menu Exit untuk keluar dari aplikasi
6 Label yang berfungsi menampilkan nama aplikasi
7 Axes yang berfungsi menampilkan logo fakultas
8 Label yang berfungsi untuk menampilkan nama dan nim pembuat aplikasi
(48)
Gambar 3.11 Rancangan antarmuka pelatihan
Penjelasan tiap elemen pada Gambar 3.11 terdapat pada tabel 3.4 dibawah ini:
Tabel 3.4 Keterangan rancangan antarmuka pelatihan
NO Keterangan
1. Label nama form pelatihan
2. Axes untuk menampilkan citra yang akan dilatih
3. Text box untuk menginputkan nilai learning rate
4 Text box untuk menampilkan lama proses training
5 Button untuk membaca dan menampilkan citra yang akan dilatih
6 Button untuk mengubah Ukuran citra menjadi 100 x 50 pixel
7 Button untuk mengubah citra menjadi citra grayscale
8 Button untuk memfilter citra (penajamaan citra)
9 Button untuk melakukan deteksi tepi pada citra
(49)
42
Gambar 3.12 Rancangan antarmuka pengujian
Keterangan dari rancangan antarmuka pengujian dijelaskan dalam tabel 3.5 Tabel 3.5 Keterangan Rancangan Antarmuka Pengujian
NO Keterangan
1 Label untuk menampilkan nama form pelatihan 2 Axes untuk menampilkan citra uji
3 Button untuk memilih gambar citra yang akan diuji 4 Button untuk memulai proses identifikasi/ menguji citra 5 Label untuk menampilkan nama pemilik cap telapak kaki
(50)
Gambar 3.13 Rancangan antarmuka help
Untuk penjelasan dari gambar rancangan form help dapat dilihat dalam Tabel 3.6 Tabel 3.6 Keterangan gambar rancangan antarmuka help
No Keterangan
1 Label untuk menampilkan nama form help
2 Label berisi yang memberisi informasi cara menggunakan sistem
(51)
BAB 4
IMPLEMENTASI DAN PENGUJIAN
4.1 Implementasi Sistem
Tahap implementasi dilakukan setelah tahap perancangan. Implementasi yang dilakukan menggunakan Matlab R2007b.
4.1.1 Implementasi form beranda
Form beranda merupakan form awal sistem ini. Pada form beranda, terdapat beberapa menu pilihan yakni menu Pelatihan, Pengujian, Help dan Exit. Menu Help berisi petunjuk untuk membantu user dalam menggunakan aplikasi ini. Sedangkan menu Exit berfungsi untuk keluar dari aplikasi. Form beranda dapat dilihat seperti pada Gambar 4.1
(52)
4.1.2 Implementasi form pelatihan
Gambar 4.2 menunjukkan form Pelatihan. Dalam form inilah dilakukan pelatihan terhadap citra. User harus mengisikan nilai learning rate untuk memulai proses pelatihan. Tombol Load Citra berfungsi untuk menampilkan citra yang akan dilatih dan selanjutnya yang perlu dilakukan adalah menekan tombol yang aktif secara berurut.
Gambar 4.2 Form pelatihan 4.1.3 Implementasi form pengujian
Sebagai kelanjutan dari pelatihan pada form pelatihan, pada form pengujian akan diuji citra yang telah dilatih maupun yang belum dilatih. User dapat memilih citra yang akan diuji atau diidentifikasi dengan menekan tombol Pilih Gambar dan melanjutkan dengan proses identifikasi. Gambar 4.3 mmerupakan tampilan form pelatihan.
(53)
46
Gambar 4.3 Form pengujian 4.1.4 Implementasi form help
Form Help berfungsi untuk memberikan informasi atau bantuan dalam menggunakan aplikasi ini. Gambar 4.4 merupakan tampilan dari form help.
(54)
4.2 Pengujian
Pentingnya pengujian perangkat lunak dan implikasinya mengacu pada kualitas perangkat lunak.
Spesifikasi perangkat keras yang digunakan untuk proses pengujian sistem ini adalah: 1. Intel(R) core(TM) i5 CPU M460@ 2,53GHz (4CPUs),~2.5 Ghz
2. Memory ( RAM) 2 GB
3. Resolusi display monitor 1366 x 768 (32bit)
Sedangkan spesifikasi perangkat lunak yang digunakan adalah: 1. Sistem Operasi Windows 7 Ultimate 32 Bit
2. Matlab R2007b 3. Microsoft Excel 2007
Setelah berada pada form pelatihan maka, user menginputkan nilai learning rate dan menekan tombol Load Citra sehingga akan tampak seperti pada Gambar 4.5.
Gambar 4.5 Pelatihan load citra
Gambar yang akan dilatih merupakan gambar telapak kaki 10 bayi berbeda dan 20 gambar lainnya merupakan gambar yang telah diberi noise dengan persenan noise yang berbeda. Setelah gambar berhasil di tampilkan, maka tombol Resize akan aktif
(55)
48
dan user dapat menekan tombol Resize untuk mengubah citra menjadi berukuran 100 x 50 piksel. Gambar 4.6 merupakan tampilan ketika citra sudah di resize.
Gambar 4.6 Tampilan citra setelah di resize
Tombol Grayscale akan otomatis aktif setelah semua citra selesai di ubah ukurannya. Selanjutnya adalah proses mengubah citra menjadi citra grayscale dengan menekan tombol grayscale seperti yang terlihat pada Gambar 4.7 berikut:
(56)
Setelah citra selesai diubah menjadi citra grayscale, maka tombol sharpening akan aktif secara otomatis. Untuk mempertajam citra, maka pengguna dapat menekan tombol ini sekali atau lebih. Sewaktu proses pengujian ini, penulis menekan tombol Sharpening sebanyak 2 kali. Tampilan setelah citra di sharpening dapat dilihat pada Gambar 4.8
Gambar 4.8 Proses filter citra dengan high-pass filter
Setelah selesai di filter, maka tombol Deteksi Tepi akan aktif secara otomatis dan pengguna dapat menekan tombol tersebut untuk mendapatkan citra hasil deteksi tepi. Gambar 4.9 merupakan tampilan form Pelatihan setelah melakukan proses deteksi tepi pada citra.
(57)
50
Gambar 4.9 Citra latih hasil deteksi tepi
Apabila proses deteksi tepi telah selasai maka, tombol Train akan aktif sehingga user dapat memulai proses pelatihan. Dalam fungsi pelatihan ini, sistem akan mengelompokkan 30 citra tersebut ke dalam 10 kelompok, dimana tiap kelompok merupakan gambar dari 1 telapak kaki bayi yang sama. Setelah pelatihan dengan metode Kohonen dilakukan, maka akan menghasilkan bobot baru yang disimpan dalam Ms Excel untuk dipakai dalam proses pengujian. Selain itu, sistem juga akan menampilkan lama waktu proses pelatihan yang dibutuhkan seperti terlihat pada Gambar 4.10.
(58)
Gambar 4.10 Tampilan pelatihan telah selesai
Setelah proses pelatihan selesai , maka akan dilanjutkan pada proses pengujian.Untuk menguji citra telapak kaki bayi, maka user harus masuk ke form pengujian dengan memilih menu Pengujian.
Pada form pengujian, user akan menginputkan gambar yang akan diuji. Setelah itu, user menekan tombol identifikasi dan sistem akan mengidentifikasi file citra yang dipilih. Outputnya berupa pemilik citra telapak kaki bayi. Berikut tampilan form pengujian setelah dijalankan:
(59)
52
Gambar 4.11 Form Pengujian setelah dijalankan 4.2.1 Pengujian terhadap citra yang telah dilatih
Adapun proses pengujian yang dilakukan terdiri dari 2 bagian yaitu pengujian terhadap citra yang telah dilatih dan pengujian terhadap citra yang belum dilatih. Tabel 4.1 adalah tabel hasil pengujian terhadap citra yang telah dilatih.
Tabel 4.1 Hasil Pengujian Terhadap Citra yang Telah Dilatih NO Citra Uji Teridentifikasi Keterangan
1 Bayi 1 Benar
(60)
3 Bayi 3 Benar
4 Bayi 4 Benar
5 Bayi 5 Benar
6 Bayi 6 Benar
7 Bayi 7 Benar
8 Bayi 8 Benar
9 Bayi 9 Benar
(61)
54
11 Bayi 1 Benar
12 Bayi 2 Benar
13 Bayi 3 Benar
14 Bayi 4 Benar
15 Bayi 5 Benar
16 Bayi 6 Benar
(62)
18 Bayi 8 Benar
19 Bayi 9 Benar
20 Bayi 2 Salah
21 Bayi 1 Benar
22 Bayi 2 Benar
23 Bayi 3 Benar
(63)
56
25 Bayi 5 Benar
26 Bayi 6 Benar
27 Bayi7 Benar
28 Bayi 8 Benar
29 Bayi 9 Benar
30 Bayi 2 Salah
Dari hasil pengujian terhadap 30 citra yang telah dilatih maka perhitungan akurasi yang didapat diperoleh dari rumus persentase adalah:
(64)
Dapat disimpulkan bahwa untuk ke 30 citra dimana 20 citra diantaranya adalah citra bernoise dengan persentase 50 % dan 60 %, dengan menggunakan metode Kohonen dapat mengelompokkan dan mengenali citra telapak kaki bayi hingga .
4.2.2 Pengujian terhadap citra yang tidak dilatih
Selanjutnya adalah proses pengujian citra yang tidak dilatih. Dalam pengujian ini digunakan citra dengan tingkat noise 80%, 90 % dan 100 %
Tabel 4.2 Pengujian Terhadap Citra yang Tidak Dilatih No Citra telapak
kaki
Persentase Noise
80 % 90 % 100%
1 Bayi 1 Benar Benar Salah
2 Bayi 2 Benar Benar Salah
3 Bayi 3 Benar Benar Salah
4 Bayi 4 Benar Benar Salah
5 Bayi 5 Benar Benar Benar
6 Bayi 6 Benar Benar Salah
7 Bayi 7 Benar Benar Salah
8 Bayi 8 Benar Benar Benar
9 Bayi 9 Benar Benar Salah
10 Bayi 10 Salah Salah Salah
Dari hasil pengujian terhadap citra yang tidak dilatih, maka persentase akurasi yang diperoleh adalah
(65)
BAB 5
KESIMPULAN DAN SARAN
5.1 Kesimpulan
1. Pengidentifikasian bayi melalui telapak kaki bayi menggunakan metode SOM Kohonen dapat dilakukan dan diperoleh tingkat akurasi sebesar 90% untuk citra yang telah dilatih sebelumnya.
2. Pengidentifikasian citra cap telapak kaki bayi menggunakan metode SOM Kohonen juga dapat dilakukan untuk citra yang belum dilatih dengan tingkat akurasi identifikasi sebesar 66.7 %
3. Pada pengujian citra telapak kaki bayi, metode SOM Kohonen akan selalu mengelompokkan citra ke kelompok terdekat berdasarkan nilai matriks citra biner. Hal ini berarti, dalam pengenalan pola, penggunaan metode ini tidak menghasilkan output tidak dikenali. Sehingga apapun inputnya akan selalu dikelompokkan ke dalam kelompok yang terdekat.
5.2 Saran
Untuk pengembangan sistem yang telah dibangun ini, penulis menyarankan:
1. Sistem ini dikembangkan dengan menambah lebih banyak citra telapak kaki dari bayi yang berbeda serta ukuran citra yang berbeda dari penelitian ini. 2. Untuk proses pengujian, hendaknya mengunakan citra telapak kaki bayi yang
sama namun diambil dalam waktu yang berbeda.
3. Sistem ini dapat dikembangkan dengan mengambil citra menggunakan webcam, atau media lainnya yang memungkinkan pengambilan citra secara real time.
(66)
(67)
BAB 2
LANDASAN TEORI
2.1 Pengenalan Pola
Pengenalan pola (pattern recognition) adalah suatu ilmu untuk mengklasifikasikan atau menggambarkan sesuatu berdasarkan pengukuran kuantitatif fitur atau sifat utama dari suatu obyek (Putra,2010).
Seperti halnya kemampuan manusia yang dapat mengenali dan membedakan objek yang dilihatnya, demikian pula suatu komputer diharapkan mampu meniru kemampuan visual manusia dalam mengenali suatu citra. Komputer menerima input berupa citra objek yang akan diidentifikasi, memproses citra tersebut dan memberikan output berupa deskripsi objek di dalam citra (Siregar, 2013).
Gambar 2.1 Skema Pengenalan Pola (Marbun,2014) 2.2 Deteksi Tepi
Tepi adalah sebuah himpunan dari piksel-piksel yang terhubung yang berada pada batas (boundary) diantara dua region. Defenisi tepi membutuhkan kemampuan untuk mengukur transisi gray-level dengan cara yang tepat (Fajar,2013). Tepian dari
(68)
suatu citra mengandung informasi penting dari citra bersangkutan. Tepian citra dapat merepresentasikan objek-objek yang terkandung dalam citra, bentuk, dan ukurannya serta terkadang juga informasi tentang tekstur (Johandra,2014). Oleh karena itu, tepi berguna untuk proses segmentasi dan identifikasi objek di dalam citra.
Ketebalan dari tepi ditentukan oleh panjang dari ramp, yang merupakan transisi dari gray level awal sampai gray level akhir. Panjang ramp ditentukan oleh slope, yang ditentukan juga oleh tingkat kekaburan. Berarti bahwa tepi yang kabur cenderung tebal dan tepi yang tajam cenderung tipis.(Hermawati, 2013)
Deteksi tepi adalah proses untuk menemukan perubahan intensitas yang berbeda nyata dalam sebuah bidang citra. Deteksi tepi merupakan langkah pertama untuk melingkupi informasi di dalam citra (Putra,2010). Setelah dilakukan deteksi tepi akan dihasilkan citra biner. Citra biner merupakan citra yang hanya memiliki dua nilai yaitu hitam dan putih atau dalam bentuk nilai yaitu 0 dan 1 (Marbun, 2014).
Deteksi tepi pada suatu citra memiliki tujuan sebagai berikut (Johandra, 2014): 1. Menandai bagian yang menjadi detail citra.
2. Memperbaiki detail citra yang kabur karena error atau adanya efek dari proses akuisisi citra.
Beberapa jenis deteksi tepi adalah deteksi tepi Robert, Prewitt, Log dan Canny. 2.2.1 Deteksi tepi Canny
Deteksi tepi Canny dapat mendeteksi tepian yang sebenarnya dengan tingkat kesalahan minimum (Marbun, 2014). Dengan kata lain, operator Canny didesain untuk menghasilkan citra tepian yang optimal. Operator ini diformulasikan dengan 3 tujuan utama (Hermawati, 2013):
a. Optimal detection, dengan tidak adanya respon yang salah
b. Good localization, dengan jarak minimal antara posisi tepi sebenarnya dengan
posisi yang terdeteksi
c. Single response, dengan mengelimasi multiple response menjadi satu garis tepi
(69)
7
Berikut adalah langkah-langkah dalam melakukan deteksi tepi Canny (Putra,2010): 1. Menghilangkan derau yang ada pada citra dengan mengimpelementasikan tapis
Gaussian. Proses ini akan menghasilkan citra yang tampak sedikit buram. 2. Melakukan deteksi tepi dengan salah satu operator deteksi tepi seperti Roberts,
Prewitt, atau Sobel dengan melakukan pencarian secara horisontal (Gx ) dan
secara vertikal (Gy).
3. Menentukan arah tepian yang ditemukan dengan menggunakan rumus sebagai berikut:
Selanjutnya membagi ke dalam 4 warna sehingga garis dengan arah berbeda dan memiliki warna yang berbeda. Pembagiannya adalah 0-22,5 dan 157,5-180 derajat berwarna kuning, 22,5-67,5 berwarna hijau dan derajat 67,5-157,5 berwarna merah.
4. Memperkecil garis tepi yang muncul dengan menerapkan nonmaximum suppresion.
5. Menerapkan dua buah tresholding
Dalam proses pendeteksian tepi terhadap citra yang dilakukan dengan metode Canny dapat menggunakan function di Matlab, sehingga cukup menggunakan function edge dalam pengkodean (Marbun, 2014). Gambar 2.3 merupakan contoh deteksi tepi menggunakan operator Canny:
(70)
Gambar 2.3 Citra Hasil Deteksi Tepi Canny 2.3 Perbaikan Citra (Image Enhancement)
Perbaikan citra bertujuan meningkatkan kualitas tampilan citra untuk pandangan manusia atau untuk mengkonversi suatu citra agar memiliki format yang lebih baik sehingga citra tersebut menjadi lebih mudah diolah dengan mesin.
Perbaikan suatu citra dapat dilakukan dengan operasi titik (point operation), operasi spasial (spatial operation), dan operasi aritmatik (arithmatic operation) (Putra, 2010).
2.3.1 Operasi spasial (filtering)
Pada proses filtering, nilai pixel baru dari suatu citra umumnya dihitung berdasarkan pixel tetangga. Berdasarkan cara penghitungan nilai pixel baru tersebut, proses filtering dapat dikelompokkan menjadi 2, yaitu tapis linier dan tapis non linier. 2.3.2 High-pass filtering
High-pass filtering merupakan salah satu jenis dari linier filtering. High-pass filtering merupakan kebalikan dari low-pass filtering yaitu mempertajam komponen frekuensi tinggi dan menghilangkan (mengurangi) komponen frekuensi rendah, sehingga filter ini sangat cocok untuk penajaman tepi citra. Nilai koefisien filter pada koordinat pusat bernilai positif dan koefisien kelilingnya bernilai negatif. Bila proses pentapisan dilakukan diatas area yang nilai intensitasnya konstan atau mengalami perubahan yang lamban maka nilai pixel keluaran adalah nol atau sangat kecil.
(71)
9
Adapun prosedur untuk menapis citra dalam kawasan frekuensi adalah sebagai berikut:
1. Input citra digital berupa citra *.jpg dengan ukuran lebar = ukuran tinggi.
2. Lakukan proses transformasi fourier dari citra input dengan menggunakan FFT 2D untuk mendapatkan F(u,v) yang merupakan nilai kompleks dari transformasi fourier. 3. Hitung filter mask H(u,v) dengan ukuran lebar dan tinggi sama dengan ukuran citra input.
4. Kalikan F(u,v) dengan H(u,v) untuk mendapatkan G(u,v) yang merupakan hasil perkalian antara transformasi dengan filter mask.
5. Lakukan proses invers transformasi fourier dari G(u,v) menggunakan invers DFT (Descrete Fourier Transformation ) 2D sehingga diperolehlah citra hasil g(x,y). ( Eko, 2011)
Dimana untuk transformasi Fourier diskrit dua dimensi dari sebuah fungsi diskrit f(x,y) dinyatakan sebagai berikut:
Dan inversnya:
Untuk u = 1,2,....M−1; x = 1,2,....M−1; v = 1,2,....N−1 y = 1,2,....N−1. Fungsi filter untuk High Pass filter adalah:
Dimana,
H(u,v) : fungsi filter
Do : konstanta positif (cutoff frekuensi)/titik pusat transformasi
D(u,v): jarak antara titik (u,v) dalam domain frekuensi dan pusat persegi panjang frekuensi.
Salah satu contoh matriks filternya dapat dilihat seperti gambar dibawah ini (Putra, 2010).
(72)
Gambar 2.4 Contoh Matriks High Pass Filtering Contoh hasil dari highpass filtering dapat dilihat seperti Gambar 2.5:
(a) (b) (c) Gambar 2.5 (a) Citra asli (b) Citra Grayscale (c) Citra hasil highpass
filtering
2.4Jaringan Syaraf Tiruan
Jaringan syaraf tiruan adalah sistem pembelajaran berbentuk jaringan yang terinspirasi berdasarkan jaringan syaraf manusia. Jaringan syaraf tiruan merupakan sistem adaptasi yang dapat merubah strukturnya untuk memecahkan masalah berdasarkan informasi yang masuk dan keluar melalui jaringan tersebut (Darmawan,2010). Jaringan syaraf tiruan tercipta sebagai suatu generalisasi model matematis dari pemahaman manusia ( human cognition ) yang didasarkan pada (Wuryandari & Afrianto, 2012):
1. Pemrosesan informasi terjadi pada elemen sederhana yang disebut neuron 2. Sinyal mengalir diantara sel syaraf/neuron melalui suatu sambungan
penghubung
3. Setiap sambungan penghubung memiliki bobot yang bersesuaian. Bobot ini akan digunakan untuk menggandakan/mengalikan sinyal yang dikirim melaluinya.
(73)
11
4. Setiap sel syaraf akan menerapkan fungsi aktivasi terhadap sinyal hasil penjumlahan berbobot yang masuk kepadanya untuk menentukan sinyal keluarannya.
Gambar 2.6 Contoh Model Neuron Jaringan Syaraf Tiruan (Siang, 2009) Jaringan syaraf tiruan mempunyai struktur tersebar paralel yang sangat besar dan mempunyai kemampuan belajar sehingga bisa melakukan generalisasi yaitu bisa menghasilkan output yang benar untuk input yang belum pernah dilatihkan. Defenisi belajar dalam jaringan syaraf tiruan adalah suatu proses dimana parameter-parameter bebas jaringan syaraf tiruan diadaptasikan melalui suatu proses perangsangan berkelanjutan oleh lingkungan dimana jaringan berada (Suyanto, 2011). Pembelajaran pada jaringan syaraf tiruan pada dasarnya dideskripsikan lewat perubahan bobot w antara neuron, tujuan akhir pembelajaran terhadap variabel masukan x adalah nilai keluaran output Y sedekat mungkin dengan nilai keluaran yang ditargetkan (beda nilai antara keluaran terhadap masukan disebut error value) (Muis,2009).
Jaringan syaraf tiruan dapat digunakan untuk (Siang, 2009): 1. Pengenalan pola (Pattern Recognition)
Jaringan syaraf tiruan dapat dipakai untuk mengenali pola ( huruf, angka, suara atau tanda tangan) yang sudah sedikit berubah. Hal ini mirip dengan otak manusia yang masih mampu mengenali orang yang sudah beberapa waktu tidak dijumpainya (mungkin wajah/bentuk tubuhnya yang sudah sedikit berubah).
2. Signal Processing
Jaringan syaraf tiruan (model Adaline) dapat dipakai untuk menekan noise dalam saluran telpon.
(74)
3. Peramalan
Jaringan syaraf tiruan juga dapat dipakai untuk meramalkan apa yang akan terjadi di masa yang akan datang berdasarkan pola kejadian yang ada di masa yang lampau. Peramalan ini dapat dilakukan mengingat kemampuan jaringan syaraf tiruan dapat membuat generalisasi dari apa yang sudah ada sebelumnya. Jaringan syaraf tiruan juga dapat menyelesaikan masalah dalam bidang kontrol dan kedokteran.
3. Menyelesaikan persoalan optimasi terbatas (Darmawan ,2010)
Meskipun banyak aplikasi menjanjikan yang dapat dilakukan oleh jaringan syaraf tiruan, namun jaringan syaraf tiruan juga memiliki beberapa keterbatasan umum. Salah satunya adalah ketidakakuratan hasil yang diperoleh(Siang,2009).
Karakteristik dari jaringan syaraf tiruan adalah (Darmawan,2010): 1. Arsitektur jaringan : pola keterhubungan antar neuron
2. Algoritma jaringan (pelatihan,pembelajaran) metode menentukan nilai bobot hubungan
3. Fungsi aktivasi : menentukan nilai keluaran berdasarkan nilai total masukannya.
2.4.1 Arsitektur jaringan
Pada jaringan syaraf tiruan, neuron-neuron akan dikumpulkan dalam lapisan-lapisan (layer) yang disebut dengan lapisan-lapisan neuron (neuron layers). Neuron-neuron pada satu lapisan akan dihubungkan dengan lapisan-lapisan sebelum dan sesudahnya. Informasi yang diberikan pada jaringan syaraf akan dirambatkan lapisan ke lapisan, mulai dari lapisan masukan sampai ke lapisan keluaran melalui lapisan tersembunyi (hidden layer).
Pola dimana neuron-neuron pada jaringan syaraf tiruan disusun berhubungan erat dengan algoritma belajar yang digunakan untuk melatih jaringan. Secara umum, arsitektur jaringan syaraf tiruan dibagi 4, yaitu ( Suyanto,2011):
(75)
13
1. Single-Layer feedforward networks
Bentuk jaringan berlapis yang paling sederhana yaitu lapis tunggal, hanya terdapat input layer dengan node sumber yang terproyeksi ke dalam output layer dari neuron, tetapi tidak sebaliknya.
Gambar 2.7 Single Layer Network
2. Multi-layer feedforward network
Arsitektur jaringan ini memiliki satu atau lebih lapis tersembunyi (hidden layer). Jaringan dengan banyak lapisan ini dapat menyelesaikan permasalahan yang kompleks, namun cenderung membutuhkan waktu yang lebih lama. Contoh jaringan yang menerapkan arsitektur ini adalah backpropagation.
(76)
3. Recurrent network
Recurrent network adalah jaringan yang mempunyai minimal satu feeedback loop. Feedback loop mempengaruhi kemampuan belajar dan kinerja jaringan.
Gambar 2.9 Recurrent Network dengan hidden neuron
4. Lattice structure
Sebuah lattice terdiri dari satu dimensi, dua dimensi, atau lebih array neuron dengan himpunan node sumber yang bersesuaian yang memberikan sinyal input ke array;dimensi lattice mengacu pada jumlah dimensi ruang dimana graph berada.
(77)
15
Berdasarkan paradigma pembelajarannya, jaringan syaraf tiruan terbagi 2 yakni supervised dan unsupervised learning ( Suyanto,2011):
1. Supervised learning
Supervised atau active learning adalah jenis jaringan syaraf tiruan dimana dalam proses belajar membutuhkan sampel input-output. Sampel input-output ini akan membangun pengetahuan dengan memberikan respon yang diinginkan jaringan syaraf tiruan. Respon yang diinginkan tersebut mereperesentasikan aksi optimum yang diinginkan oleh jaringan syaraf tiruan. Parameter-parameter jaringan berubah-ubah berdasarkan vektor latih dan sinyal kesalahan.
2. Unsupervised learning
Unsupervised learning atau self-organized learning tidak membutuhkan sampel input-output untuk memantau proses belajar. Salah satu contoh jenis jaringan syaraf yang tergolong unsupervised learning adalah self-organizing map.
Jenis jaringan ini didasarkan pada competitive learning; neuron output dari jaringan ini bersaing satu sama lain untuk diaktifkan , dengan hasil hanya satu neuron output yang memenangkan persaingan. Salah satu model self organizing maps ini adalah self organizing map Kohonen (SOM Kohonen).
2.4.2 Self organizing map Kohonen
Ada dua kemungkinan dalam menggunakan Self Organizing Maps. Pertama, adalah menggunakannya hanya untuk model unsupervised learning, dimana vektor input tidak diketahui. Kedua adalah menggunakannya untuk unsupervised learning dan diikuti dengan supervised learning. Algoritma LVQ (Learning Vector Quantization) dikembangkan untuk tujuan kedua ini. (Kasabov,1998)
Teknik self-organizing map (SOM) Kohonen pertama kali diperkenalkan oleh Touvo Kohonen, merupakan sistem jaringan neural berbasis kompetisi yang mampu melakukan pembelajaran tanpa terbimbing karena memiliki kemampuan mengatur dirinya sendiri (self-organizing) (Sinaga, 2015).
(78)
Jaringan Kohonen merupakan salah satu jaringan yang dipakai untuk membagi pola masukan kedalam beberapa kelompok (cluster), dimana semua pola yang berada dalam satu kelompok merupakan pola yang mirip satu dengan lainnya.
Arsitektur jaringan Kohonen mirip dengan model lain. Hanya saja jaringan Kohonen tidak menggunakan perhitungan net (hasil kali vektor masukan dengan bobot) maupun fungsi aktivasi (Siang, 2009).
Gambar 2.11 Arsitektur Jaringan Kohonen
Prinsip kerja dari algoritma SOM adalah pengurangan node-node tetangganya (neighbor), sehingga pada akhirnya hanya ada satu node output yang terpilih (winner node) (Astuti,2009).
Algoritma pengelompokan pola jaringan Kohonen adalah sebagai berikut (Siang,2009):
0. Inisialisasi
Bobot wji (acak)
Laju pemahaman (learning rate) awal dan faktor penurunannya Bentuk dan jari-jari (=R) topologi sekitarnya
1. Selama kondisi penghentian bernilai salah, lakukan langkah 2-7 2. Untuk setiap vektor masukan x, lakukan langkah 3-5
3. Hitung D(j)= ... (1) untuk semua j
(79)
17
4. Tentukan indeks J sedemikian hingga d(J) minimum 5. Untuk setiap unit j disekitar J modifikasi bobot:
...(2) 6. Modifikasi learning rate
7. Uji kondisi penghentian Keterangan:
D(j)= jarak Euclidean = nilai bobot
= laju pembelajaran/learning rate
Dalam inisialisasi bobot acak awal, selain membuat vektor bobot secara acak ada cara lain yang dapat digunakan yakni dengan memilih vektor bobot dari vektor input yang ditentukan secara acak. (Haykin, 1999).
Kondisi penghentian iterasi adalah selisih antara saat itu dengan pada iterasi sebelumnya. Apabila semua hanya berubah sedikit saja, berarti iterasi sudah mencapai konvergensi sehingga dapat dihentikan (Siang,2009).
Proses pembelajaran SOM Kohonen bersifat kompetitif atau bersaing. Untuk setiap pelatihan terdapat satu neuron keluaran dalam kondisi firing (neuron keluaran yang paling besar). Bobot yang terkoneksi pada neuron keluaran tersebut akan disesuaikan sehingga nilainya lebih kuat pada latihan berikutnya.
Dalam perubahan bobot yang terjadi, hal yang paling menentukan adalah atau learning rate. Learning rate adalah faktor pengali pada perubahan bobot yang berubah terhadap perubahan error. Perubahan ini sesuai dengan banyaknya input yang masuk dan akan selalu berkurang bila tidak ada perubahan error (Astuti,2009).
Contoh penggunaan algoritma Kohonen dalam mengelompokkan 4 buah vektor ke dalam maksimum 2 kelompok:
Diketahui 4 buah vektor x(1)=(1,1,0,0), x(2)=(0,0,0,1), x(3)=(1,0,0,0) dan x(4)=(0,0,1,1). Laju pemahaman awal dan . Jari-jari
(80)
vektor sekitar yang dimodifikasi=0 (berarti hanya vektor pemenang yang dimodifikasi bobotnya pada setiap langkah).
Langkah awal untuk meyelesaikan kasus diatas adalah dengan menentukan bobot awal. Kolom matriks bobot menyatakan jumlah komponen dalam sebuah vektor (dalam kasus ini=4) dan baris menyatakan jumlah maksimum kelompok yang akan dibentuk ( dalam kasus ini=2). Misalkan bobot awal secara acak:
Pelatihan untuk tiap vektor:
Untuk vektor x(1)=(1,1,0,0):
D(1) = (0.2-1)2 + (0.6-1)2 + (0.5-0)2 + (0.9-0)2 = 1.86 D(2) = (0.8-1)2 + (0.4-1)2 + ( 0.7-0)2 + (0.3-0)2 = 0.98
Karena D(j) minimum untuk j=2, maka vektor bobot baris 2 yang diubah sesuai aturan
w21 = 0.8 + 0.6 (1-0.8) = 0.92
w22 = 0.4 + 0.6 (1-0.4) = 0.76
w23 = 0.7 + 0.6 ( 0-0.7) = 0.28
w24 = 0.3 + 0.6(0- 0.3) = 0.12
Vektor bobot baru:
Untuk vektor x(2) = (0,0,0,1):
D(1)= (0.2-0)2 + ( 0.6-0)2 + (0.5-0)2 + (0.9-1)2 = 0.66 D(2)= (0.92-0)2 + ( 0.76-0)2 + (0.28-0)2 + (0.12-1)2 = 2.28
D(j) minimum untuk j=1, maka vektor bobot di baris 1 yang dimodifikasi. Maka bobot baru:
(1)
DAFTAR ISI
Hal. Persetujuan
Pernyataan
Ucapan Terima Kasih Abstrak
Abstract Daftar Isi Daftar Tabel Daftar Gambar Daftar Lampiran
ii iii iv vi vii viii x xi xiii Bab 1
Bab 2
Pendahuluan
1.1. Latar Belakang 1.2. Rumusan Masalah 1.3. Batasan Masalah 1.4. Tujuan Penelitian 1.5. Manfaat Penelitian 1.6. Metodologi Penelitian 1.7. Sistematika Penulisan Landasan Teori
2.1.Pengenalan Pola 2.2.Deteksi Tepi
2.2.1 Deteksi tepi Canny 2.3.Perbaikan Citra
2.3.1 Operasi spasial (filtering) 2.3.2 High pass filter
2.4.Jaringan Syaraf Tiruan 2.4.1 Arsitektur jaringan
2.4.2 Self Organizing Map Kohonen
1 2 2 2 3 3 3
5 5 6 8 8 8 10 12 15
(2)
Bab 3
Bab 4
Bab 5
Analisis dan Perancangan 3.1 Analisis Sistem
3.1.1 Analisis masalah 3.1.2 Analisis kebutuhan 3.1.3 Analisis proses 3.2 Perancangan Sistem
3.2.1 Diagram use case 3.2.2 Diagram sekuensial 3.2.3 Diagram aktivitas
3.2.4 Pseudocode
3.2.5 Flowchart sistem
3.2.6 Perancangan antarmuka sistem Implementasi dan Pengujian
4.1 Implementasi
4.1.1 Implementasi form beranda 4.1.2 Implementasi form pelatihan 4.1.3 Implementasi form pengujian 4.1.4 Implementasi form help 4.2 Pengujian
4.2.1. Pengujian terhadap citra yang dilatih 4.2.2. Pengujian terhadap citra yang tidak dilatih Kesimpulan dan Saran
5.1. Kesimpulan 5.2. Saran
22 22 23 25 30 30 33 33 35 38 40
44 44 45 45 46 47 52 57
58 58
Daftar Pustaka 60
(3)
DAFTAR TABEL
Tabel 3.1 Tabel 3.2 Tabel 3.3 Tabel 3.4 Tabel 3.5 Tabel 3.6 Tabel 4.1 Tabel 4.2
Dokumentasi naratif dari use case pelatihan Dokumentasi naratif dari use case pengujian Keterangan rancangan antarmuka beranda Keterangan rancangan antarmuka pelatihan Keterangan rancangan antarmuka pengujian Keterangan rancangan antarmuka help
Hasil pengujian terhadap citra yang telah dilatih Hasil pengujian terhadap citra yang tidak dilatih
31 32 40 41 42 43 52 57
(4)
DAFTAR GAMBAR Gambar 2.1 Gambar 2.2 Gambar 2.3 Gambar 2.4 Gambar 2.5 Gambar 2.6 Gambar 2.7 Gambar 2.8 Gambar 2.9 Gambar 2.10 Gambar 2.11 Gambar 3.1 Gambar 3.2 Gambar 3.3 Gambar 3.4 Gambar 3.5 Gambar 3.6 Gambar 3.7 Gambar 3.8 Gambar 3.9 Gambar 3.10 Gambar 3.11 Gambar 3.12 Gambar 3.13 Gambar 4.1 Gambar 4.2 Gambar 4.3 Gambar 4.4 Gambar 4.5
Skema pengenalan pola Citra asli
Citra hasil deteksi tepi Canny Contoh matriks high pass filtering
Citra asli, grayscale, hasil high pass filter Contoh model neuron jaringan syaraf tiruan Single layer network
Multi layer network
Recurrent network dengan hidden neuron Lattice 1 dimensi dengan 3 neuron
Arsitektur jaringan kohonen
Diagram Ishikawa pengenalan telapak kaki bayi Bobot baru dalam Ms.Excel
Use case sistem pengenalan telapak kaki bayi Sequence diagram untuk pelatihan
Sequence diagram untuk pengujian Diagram aktivitas use case pelatihan Diagram aktivitas use case pengujian Flowchart pelatihan
Flowchart pengujian
Rancangan antarmuka beranda Rancangan antarmuka pelatihan Rancangan antarmuka pengujian Rancangan antarmuka help Form beranda
Form pelatihan Form pengujian Form help
Pelatihan load citra
5 7 8 10 10 11 13 13 14 15 16 23 29 31 33 33 34 35 38 39 40 41 42 43 44 45 45 46 47
(5)
Gambar 4.6 Gambar 4.7 Gambar 4.8 Gambar 4.9 Gambar 4.10 Gambar 4.11
Tampilan citra setelah di resize Proses grayscale pada citra
Proses filter citra dengan high pass filter Citra hasil deteksi tepi
Tampilan pelatihan telah selesai Form pengujian setelah dijalankan
48 48 49 50 51 52
(6)
DAFTAR LAMPIRAN
Listing Program 62
Bobot Baru Setelah Pelatihan dalam MsExcel 77
Vektor Input Citra Latih dalam Ms Excel 80
Curriculum Vitae 85