• Tidak ada hasil yang ditemukan

5. klasifikasi dengan penambahan pereduksi dimensi data PCA sebelumnya menghasilkan nilai akurasi yang lebih baik. Nilai paling tinggi ketika menggunakan kernel Polynomial orde 3 senilai 99% dan yang paling rendah pada saat menggunakan kernel Sequential Minimal Optimization Method sebesar 45%.

5.2Saran

Saran untuk tugas akhir ini adalah :

1. Inputan citra dapat lebih beraneka ragam dari berbagai sumber yang berbeda.

2. Inputan dengan menambahkan funsi perubahan pada nilai ambang. 3. Penelitian selanjutnya dapat menggunakan metode ekstraksi ciri yang

berbeda.

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

DAFTAR PUSTAKA

IDM (2015). Data Statistik Jumlah Penderita Diabetes di Dunia versi WHO.

http://indodiabetes.com/data-statistik-jumlah-penderita-diabetes-di-dunia- versi-who.html - Diakses April 2015

Kadir A, Susanto A. (2013). Teori dan Aplikasi Pengolahan Citra . Yogyakarta: Penerbit Andi Offset.

Kuivalainen, M., 2005. Retinal Image Analysis Using Machine Vision. Thesis, Lappeenranta University of Technology, Department of Information Technology, Finlandia. M.B Stegman GD. (2002). A Brief Introduction to Statistical Shape Analysis.

Mandasari HR, Tjandrasa H, Wijaya AY. (2012). Segmentasi Pembuluh Darah Retina pada Citra Fundus Mata dengan 2D-Gabor Filter. Undergraduate Thesis of Informatics Engineering, RSIf 004.62 Man s : 1-4.

Mingqiang Y, Kidiyo K, Joseph R. (2008). A Survey of Shape Feature Extraction Techniques on Pattern Recognition Tecnique.

Messidor, 2014, Methods to evaluate segmentation and indexing techniques in the field of retinal ophthalmology, http://messidor.crihan.fr/index-en.php, Diakses Mei 2015

Nugroho, A.S., Witarto, A. B., Handoko,D., 2003. Support Vector Machine Teori dan aplikasinya dalam Bioinformatika, Kuliah umum Ilmu Komputer.com, website : http://ilmukomputer.com, diakses 20 Desember 2011.

Price SA, Wilson LM. (2006). Patofisiologi. Jakarta: EGC.

Putra, Dharma. (2010). Pengolahan Citra Digital. Yogyakarta: Penerbit Andi Offset.

55

Santoso, Budi. (2007) Data Mining. Teknik Pemanfaatan Data untuk Keperluan Bisnis : Teknik dan Aplikasi. Yogyakarta: Graha Ilmu.

Setiawan W. (2012). Sitem Deteksi Retinopati Diabetik Menggunakan Support Vector Machine. Universitas Diponegoro. Thesis

Sitompul R. (2008). Retinopati Diabetik. J Indon Med Assoc, Volum :61, Nomor: 8,Agustus 2011.

W Sudoyo A, Setiyohadi B, Alwi I, Simadibrata M, Setiati S. (2009). Buku Ajar Ilmu Penyakit Dalam. Jakarta Pusat: InternaPublishing.

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

LAMPIRAN I : DATA TRAINING

Grade 0

57

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

59

Grade 2

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

61

Grade 3

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

LAMPIRAN II : CODE PROGRAM

File preprosess.m

function [Img,bwImg] = preprosess( Nambang,data)

%PREPROSESS Summary of this function goes here % Detailed explanation goes here

% clc;

% fprintf('memasukkan file citra\n');

% fprintf('========================================\n'); %

% proses input

% file = uigetfile('*.tif','masukkan filenya: '); % data=imread(file);

% Nambang = input('Masukkan nilai Ambang ( 0-255 ):');

%mengubah citra digital berwarna menjadi citra beraras keabuan

grayscalling=rgb2gray(data);

%memisahkan kanal setiap citra berdasarkan kanal merah,hijau,dan biru

red=data(:,:,1); green=data(:,:,2); blue=data(:,:,3);

%melakukan penajaman kontras adapthisteq

ad_red=adapthisteq (red); ad_green=adapthisteq (green); ad_blue=adapthisteq (blue);

%proses binerisasi citra

[lebar tinggi]=size(ad_green); for a=1:lebar for b=1:tinggi hasilbiner=double(ad_green(a,b)); if (ad_green(a,b)) < Nambang hasilbiner= 0; else hasilbiner= 255; end Gambar2(a,b)=hasilbiner; end end g = im2bw(Gambar2); % figure,imshow(uint8(Gambar2));

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

File ekstraksi.m histo = sum(g); index = find(histo); g = g(:, index); histo = sum(g'); index = find(histo); g = g(index, :); %melakukan resize [lebar tinggi]=size(g); center = [lebar/2 tinggi/2]; jari = min(center);

for a=1:lebar

for b=1:tinggi

jarak = sqrt((a - center(1)) .^ 2 + (b - center(2)) .^ 2);

if jarak > jari g(a, b) = 255; end end end neg=~g; % subplot (2,1,1) % imshow(g); % title('biner') % subplot (2,1,2) % imshow(neg); % title('negasi') % figure,imshow(uint8(Gambar2)); % imwrite(g,'C:\Users\rerenietha\Documents\MATLAB\percobaanAkhir\bin er20060523_49928_0100_PP.tif'); % imwrite(neg,'C:\Users\rerenietha\Documents\MATLAB\percobaanAkhir\n egasi20060523_49928_0100_PP.tif'); Img=g; bwImg=neg; end

function [b]= ekstraksi( img,bwImg)

%EKSTRAKSI Summary of this function goes here % Detailed explanation goes here

65

[x,y]=meshgrid(-100:100,-100:100); sigma = 15; theta = pi/12; F = 0.05; g_sigma = (1./(2*pi*sigma^2)).*exp(((- 1).*(x.^2+y.^2))./(2*sigma.^2)); real_g = g_sigma.*cos((2*pi*F).*(x.*cos(theta)+y.*sin(theta))); im_g = g_sigma.*sin((2*pi*F).*(x.*cos(theta)+y.*sin(theta))); % % load image img=double(img);

% shrink image to decrease computation time.

scale = 0.25;

img = imresize(img,scale);

% % load answer (location of vessels)

bwImg=double(bwImg);

bwImg = imresize(bwImg,scale,'nearest');

bwImg(bwImg==255) = 1; bwImg(bwImg==0) = 0;

% get training and testing image and vessel location from the above images

testingImg = img(1:175,:); testingAns = bwImg(1:175,:); trainingImg = img(176:end,:); trainingAns = bwImg(176:end,:);

%% Extract features from training image.

% initialize parameters for Gabor transforms

filter_size = 50.*scale;

filter_size_halfed = round((filter_size)/2); Fs = 0.1:0.1:0.4;

sigmas = [2:2:2].*scale; thetas=pi/12:pi/12:pi-pi/12;

% initialize array for storing features

features =

zeros([size(trainingImg),numel(sigmas),numel(thetas),numel(Fs)]);

% h1 = figure;

% perform multiple Gabor transforms with varying parameters

for k = 1:numel(sigmas) for j = 1:numel(Fs) for i = 1:numel(thetas) sigma = sigmas(k); F = Fs(j); theta = thetas(i);

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

[x,y]=meshgrid(-filter_size_halfed:filter_size_halfed,- filter_size_halfed:filter_size_halfed); g_sigma = (1./(2*pi*sigma^2)).*exp(((- 1).*(x.^2+y.^2))./(2*sigma.^2)); real_g = g_sigma.*cos((2*pi*F).*(x.*cos(theta)+y.*sin(theta))); im_g = g_sigma.*sin((2*pi*F).*(x.*cos(theta)+y.*sin(theta)));

% perform Gabor transform

uT

=sqrt(conv2(trainingImg,real_g,'same').^2+conv2(trainingImg,im_g,'

same').^2);

% normalize transformed image

uT = (uT-mean(uT(:)))./std(uT(:));

% append tranformed images to 'features'

features(:,:,k,j,i) = uT;

end end end

%% Fit GLM with features and location of the vessels

% reshape feature array

szG = size(features);

features = reshape(features,[prod(szG(1:2)),prod(szG(3:end))]);

% fit GLM with the features and the location of the vessels

b = glmfit(features,trainingAns(:),'normal');

% see the output of the model based on the training features

CTrain = glmval(b,features,'logit');

CTrain = reshape(CTrain,szG(1:2));

% Again, perform multiple Gabor transforms with varying parameters. features = zeros([size(testingImg),numel(sigmas),numel(thetas),numel(Fs)]); for k = 1:numel(sigmas) for j = 1:numel(Fs) for i = 1:numel(thetas) sigma = sigmas(k); F = Fs(j); theta = thetas(i);

67

% setup the "Gabor transform"

[x,y]=meshgrid(-filter_size_halfed:filter_size_halfed,- filter_size_halfed:filter_size_halfed); g_sigma = (1./(2*pi*sigma^2)).*exp(((- 1).*(x.^2+y.^2))./(2*sigma.^2)); real_g = g_sigma.*cos((2*pi*F).*(x.*cos(theta)+y.*sin(theta))); im_g = g_sigma.*sin((2*pi*F).*(x.*cos(theta)+y.*sin(theta)));

% perform Gabor transform

uT

=sqrt(conv2(testingImg,real_g,'same').^2+conv2(testingImg,im_g,'sa

me').^2);

% normalize transformed image

uT = (uT-mean(uT(:)))./std(uT(:));

% append tranformed images to 'features'

features(:,:,k,j,i) = uT;

end end end

% feed the features to GLM.

szG = size(features);

features = reshape(features,[prod(szG(1:2)),prod(szG(3:end))]);

Ctest = glmval(b,features,'logit');

Ctest = reshape(Ctest,szG(1:2));

% calculate sensitivity and specificity by thresholding

% the output of GLM 'Ctest' and comparing the thresholded image with the answer.

sensitivity = []; specificity = []; rgs = 0:0.01:1;

for i = rgs

tmpBwImg = im2bw(Ctest,i);

tp = sum(tmpBwImg == 1 & testingAns ==1); fn = sum(tmpBwImg == 0 & testingAns ==1); tn = sum(tmpBwImg == 0 & testingAns ==0); fp = sum(tmpBwImg == 1 & testingAns ==0);

sensitivity = [sensitivity tp/(tp+fn)]; %true positive rate

specificity = [specificity tn/(tn+fp)]; %true negative rate

end

% calculate auc.

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

File pca.m

function [ dataHasilPCA, indeksPCA ] = pca( data, jmlPC)

% IMPLEMENTASI ALGORITMA PCA

% 1. Matriks X adalah hasil pengurangan rata-rata dari setiap dimensi data pada matriks data.

[jmlBaris,jmlKolom] = size(data); rerataData = mean(data); X=data; for i=1:jmlBaris for j=1:jmlKolom X(i,j)=data(i,j)-rerataData(j); end end

% 2. Hitung covariance matrix dari matriks X.

Cx=cov(X);

% Cx=X'*X;

% Cx = 1 / (jmlKolom-1) * X * X';

% 3. Hitung eigenvector dan eigenvalue dari covariance matrix. % [eigenvector, eigenvalue] = eig(dataCov);

[eigenvector,eigenvalue]=eig(Cx);

% [eigenvector, eigenvalue] = eig(cov(dataCov));

% 4. Pilih component dan bentuk vector feature dan principal component dari

% eigenvector yang memiliki eigenvalue paling besar diambil

(decreasing order). % D2=diag(sort(diag(eigenvalue),'descend')); eigenvalue=diag(eigenvalue); [~, indeks]=sort(eigenvalue,'descend'); % eigenvalue = eigenvalue(indeks); featureVector=eigenvector(:,indeks);

% 5. Menurunkan data set yang baru. % dataBaru = featureVector * X;

dataBaru = X*featureVector;

% assignin('base','X',X);

% assignin('base','featureVector',featureVector);

auc = trapz([0 fprSort 1],[0 sensitivity(fprSortInd) 1]);

title(sprintf('ROC curve, AUC: %1.2f',auc));

% get optimal threshold by maximizing Youden's index

[trsh, thInd] = max(sensitivity + specificity - 1); th = rgs(thInd);

69

File svm.m

% jmlPC = jumlah principal component yang ingin digunakan

if jmlPC==0 [jmlIndeks,~]=size(indeks); indeksPCA=indeks; dataHasilPCA=dataBaru(:,1:jmlIndeks); else indeksPCA=indeks(1:jmlPC); dataHasilPCA = dataBaru(:,1:jmlPC); end end

function [kelas_latih, kelas_uji_hasil]= svm( data,pc,option)

%UNTITLED2 Summary of this function goes here % Detailed explanation goes here

[m,n]=size(data); kelas = data(:,1); att = data(:,2:end);

if option == 1

% [~,att,~]=princomp(att);

[ att, ~ ] = pca( att, pc);

% att=zscore(att);

save ('dataPCA.mat','att');

end kelas1 = 1:25; kelas2 = 26:50; kelas3 = 51:75; kelas4 = 76:100; data_latih = att;

%mengganti label kelas dengan nomor indeks kelas

kelas_1 = double(ismember(kelas, 0)); kelas_2 = double(ismember(kelas, 1)); kelas_3 = double(ismember(kelas, 2)); kelas_4 = double(ismember(kelas, 3));

kelas_latih = [kelas_1 kelas_2 kelas_3 kelas_4]; [a, kelas_latih] = max(kelas_latih');

kelas_latih = kelas_latih';

%membuat klasifikator 1

kelas_latih_1_1 = kelas_1;

kelas_latih_1_0 = kelas_2 + kelas_3 + kelas_4;

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

[a1, kelas_latih_1] = max(kelas_latih_1'); kelas_latih_1 = kelas_latih_1';

kelas_latih_1 = 2-kelas_latih_1;

%membuat model klasifikasi

fungsi_kernel = 'Polynomial';

% fungsi_kernel = 'Quadratic'; % fungsi_kernel = 'Linear'; % nilai_order = 2;

SVMStruct_1 = svmtrain(data_latih, kelas_latih_1,

'Kernel_Function', fungsi_kernel, 'showplot', true);

% SVMStruct_1 = svmtrain(data_latih, kelas_latih_1, 'Kernel_Function',

fungsi_kernel,'POLYORDER',nilai_order,'showplot', true); % RBFSigmaValue = 1;

% SVMStruct_1 = svmtrain(data_latih, kelas_latih_1, 'RBF_Sigma',RBFSigmaValue, 'showplot', true);

% method='LS'; % method='SMO'; % method='QP';

% SVMStruct_1 = svmtrain(data_latih, kelas_latih_1,'METHOD', method, 'showplot', true);

% % % display(['Klasifikator 1']);

Support_Vector_1 = SVMStruct_1.SupportVectors;

Index_Support_Vector_1 = SVMStruct_1.SupportVectorIndices;

% % display(['Index Support Vector 1']);

Index_Support_Vector_1'; Data_Support_Vector_1 = data_latih(Index_Support_Vector_1,:); Alpha_1 = SVMStruct_1.Alpha; % % display(['Alpha']); Alpha_1'; Bias_1 = SVMStruct_1.Bias; %membuat klasifikator 2

kelas_latih_2_1 = kelas_1 + kelas_3 +kelas_4; kelas_latih_2_0 = kelas_2;

kelas_latih_2 = [kelas_latih_2_1 kelas_latih_2_0]; [a2, kelas_latih_2] = max(kelas_latih_2');

kelas_latih_2 = kelas_latih_2'; kelas_latih_2 = 2-kelas_latih_2;

%membuat model klasifikasi

fungsi_kernel = 'Polynomial';

% fungsi_kernel = 'Quadratic'; % fungsi_kernel = 'Linear'; % nilai_order = 2;

SVMStruct_2 = svmtrain(data_latih, kelas_latih_2,

'Kernel_Function', fungsi_kernel, 'showplot', true);

% SVMStruct_2 = svmtrain(data_latih, kelas_latih_2, 'Kernel_Function',

fungsi_kernel,'POLYORDER',nilai_order,'showplot', true); % RBFSigmaValue = 1;

% SVMStruct_2 = svmtrain(data_latih, kelas_latih_2, 'RBF_Sigma',RBFSigmaValue, 'showplot', true);

% method='LS'; % method='SMO';

71

% method='QP';

% SVMStruct_2 = svmtrain(data_latih, kelas_latih_2,'METHOD', method, 'showplot', true);

% % display(['Klasifikator 2']);

Support_Vector_2 = SVMStruct_2.SupportVectors;

Index_Support_Vector_2 = SVMStruct_2.SupportVectorIndices;

% % % display(['Index Support Vector 2']);

Index_Support_Vector_2'; Data_Support_Vector_2 = data_latih(Index_Support_Vector_2,:); Alpha_2 = SVMStruct_2.Alpha; % % % display(['Alpha 2']); Alpha_2'; Bias_2 = SVMStruct_2.Bias; %membuat klasifikator 3

kelas_latih_3_1 = kelas_1 + kelas_2 + kelas_4; kelas_latih_3_0 = kelas_3;

kelas_latih_3 = [kelas_latih_3_1 kelas_latih_3_0]; [a1, kelas_latih_3] = max(kelas_latih_3');

kelas_latih_3 = kelas_latih_3'; kelas_latih_3 = 2-kelas_latih_3;

%membuat model klasifikasi

fungsi_kernel = 'Polynomial';

% fungsi_kernel = 'Quadratic'; % fungsi_kernel = 'Linear'; % nilai_order = 2;

SVMStruct_3 = svmtrain(data_latih, kelas_latih_3,

'Kernel_Function', fungsi_kernel, 'showplot', true);

% SVMStruct_3 = svmtrain(data_latih, kelas_latih_3, 'Kernel_Function',

fungsi_kernel,'POLYORDER',nilai_order,'showplot', true); % RBFSigmaValue = 1;

% SVMStruct_3 = svmtrain(data_latih, kelas_latih_3, 'RBF_Sigma',RBFSigmaValue, 'showplot', true);

% method='LS'; % method='SMO'; % method='QP';

% SVMStruct_3 = svmtrain(data_latih, kelas_latih_3,'METHOD', method, 'showplot', true);

% % % display(['Klasifikator 3']);

Support_Vector_3 = SVMStruct_3.SupportVectors;

Index_Support_Vector_3 = SVMStruct_3.SupportVectorIndices;

% % % display(['Index Support Vector 3']);

Index_Support_Vector_3'; Data_Support_Vector_3 = data_latih(Index_Support_Vector_3,:); Alpha_3 = SVMStruct_3.Alpha; % % % display(['Alpha 3']); Alpha_3'; Bias_3 = SVMStruct_3.Bias; %membuat klasifikator 4

kelas_latih_4_1 = kelas_1 + kelas_2 + kelas_3; kelas_latih_4_0 = kelas_4;

kelas_latih_4 = [kelas_latih_4_1 kelas_latih_4_0];

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

kelas_latih_4 = kelas_latih_4'; kelas_latih_4 = 2-kelas_latih_4;

%membuat model klasifikasi

fungsi_kernel = 'Polynomial';

% fungsi_kernel = 'Quadratic'; % fungsi_kernel = 'Linear'; % nilai_order = 2;

SVMStruct_4 = svmtrain(data_latih, kelas_latih_4,

'Kernel_Function', fungsi_kernel, 'showplot', true);

% SVMStruct_4 = svmtrain(data_latih, kelas_latih_4, 'Kernel_Function',

fungsi_kernel,'POLYORDER',nilai_order,'showplot', true); % RBFSigmaValue = 1;

% SVMStruct_4 = svmtrain(data_latih, kelas_latih_4, 'RBF_Sigma',RBFSigmaValue, 'showplot', true);

% method='LS'; % method='SMO'; % method='QP';

% SVMStruct_4 = svmtrain(data_latih, kelas_latih_4,'METHOD', method, 'showplot', true);

% % % display(['Klasifikator 4']);

Support_Vector_4 = SVMStruct_4.SupportVectors;

Index_Support_Vector_4 = SVMStruct_4.SupportVectorIndices;

% % % display(['Index Support Vector 4']);

Index_Support_Vector_4'; Data_Support_Vector_4 = data_latih(Index_Support_Vector_4,:); Alpha_4 = SVMStruct_4.Alpha; % % % display(['Alpha 4']); Alpha_4'; Bias_4 = SVMStruct_4.Bias; %melakukan prediksi kelas_1 = [1 1 1 1]; kelas_2 = [0 0 1 1]; kelas_3 = [0 1 0 1]; kelas_4 = [0 1 1 0]; for i=1:m prediksi(1) = svmclassify(SVMStruct_1,data_latih(i,:)); prediksi(2) = svmclassify(SVMStruct_2,data_latih(i,:)); prediksi(3) = svmclassify(SVMStruct_3,data_latih(i,:)); prediksi(4) = svmclassify(SVMStruct_4,data_latih(i,:)); jarak(1) = sum(xor(prediksi, kelas_1));

jarak(2) = sum(xor(prediksi, kelas_2)); jarak(3) = sum(xor(prediksi, kelas_3)); jarak(4) = sum(xor(prediksi, kelas_4)); [a, idx_kelas] = min(jarak);

73

Class main.m

function varargout = Main(varargin)

% MAIN MATLAB code for Main.fig

% MAIN, by itself, creates a new MAIN or raises the existing

% singleton*.

%

% H = MAIN returns the handle to a new MAIN or the handle to

% the existing singleton*.

%

% MAIN('CALLBACK',hObject,eventData,handles,...) calls the

local

% function named CALLBACK in MAIN.M with the given input

arguments. %

% MAIN('Property','Value',...) creates a new MAIN or raises

the

% existing singleton*. Starting from the left, property

value pairs are

% applied to the GUI before Main_OpeningFcn gets called. An

% unrecognized property name or invalid value makes property

application

% stop. All inputs are passed to Main_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 Main

% Last Modified by GUIDE v2.5 27-Aug-2015 18:27:45

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Main_OpeningFcn, ... 'gui_OutputFcn', @Main_OutputFcn, ... 'gui_LayoutFcn', [] , ... end kelas_uji_hasil = kelas_uji_hasil';

% hasil_prediksi = confusionmat(kelas_latih, kelas_uji_hasil) % akurasi=(sum(diag(hasil_prediksi))/sum(hasil_prediksi(:)))*100;

end

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

% hObject % eventdata MATLAB % handles % varargin '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 Main is made visible.

function Main_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn.

% Choose default command line output for Main

handles.output = hObject; clc;

warning off;

set(handles.confMatriks,'Data', []);

set(handles.confMatriks,'ColumnWidth',{30});

set(handles.txtNmFile,'String','Nama File');

axes(handles.axesIcon); imshow('icons\logoUSD.png'); axes(handles.axImg); imshow('icons\bolaMata.jpg'); axes(handles.axbwImg); imshow('icons\bolaMata.jpg'); axes(handles.axDiuji); imshow('icons\bolaMata.jpg'); axes(handles.axImgUji); imshow('icons\bolaMata.jpg'); axes(handles.axbwImgUji); imshow('icons\bolaMata.jpg');

% Update handles structure

guidata(hObject, handles);

% UIWAIT makes Main wait for user response (see UIRESUME) % uiwait(handles.figure1);

handle to figure

reserved - to be defined in a future version of

structure with handles and user data (see GUIDATA) command line arguments to Main (see VARARGIN)

75 % hObject % eventdata MATLAB % handles % varargout % hObject % eventdata MATLAB % handles

% --- Outputs from this function are returned to the command line.

function varargout = Main_OutputFcn(hObject, eventdata, handles)

% Get default command line output from handles structure

varargout{1} = handles.output;

% --- Executes on button press in btnProses.

function btnProses_Callback(hObject, eventdata, handles)

clc;

set(handles.confMatriks,'Data', []);

set(handles.confMatriks,'ColumnWidth',{30});

set(handles.txtNmFile,'String','Nama File');

axes(handles.axesIcon); imshow('icons\logoUSD.png'); axes(handles.axImg); imshow('icons\bolaMata.jpg'); Nambang=str2double(get(handles.Nambang,'String')); n=0; m=1; bHasil=[]; class=[]; for i=1:4

folder=strcat('dataFoto\GRADE',num2str(n),'\');

for j=1:25

file = strcat(folder,'grade',num2str(n),'

(',num2str(j),').tif');

% Tampilkan nama file yang sedang diproses

set(handles.txtNmFile,'String',strcat('grade',num2str(n),'

(',num2str(j),').tif'));

data=imread(file);

[Img,bwImg] = preprosess( Nambang,data);

% Tampilkan gambar hasil preprocessing

axes(handles.axImg) imshow(Img)

cell array for returning output args (see VARARGOUT); handle to figure

reserved - to be defined in a future version of

structure with handles and user data (see GUIDATA)

handle to btnProses (see GCBO)

reserved - to be defined in a future version of structure with handles and user data (see GUIDATA)

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

% hObject % eventdata MATLAB % handles imshow(bwImg) pause(0.01); [b]=ekstraksi( Img,bwImg); b=b'; bHasil=[bHasil;b]; class(m)=n; m=m+1; end n=n+1; end class=class'; bHasil=[class,bHasil];

save('hasilPreprocessing.mat','bHasil');

uiwait(msgbox('Preprocessing sudah

selesai.','Peringatan','modal'));

% --- Executes on button press in btnKlasifikasi.

function btnKlasifikasi_Callback(hObject, eventdata, handles)

clc;

set(handles.confMatriks,'Data', []);

set(handles.confMatriks,'ColumnWidth',{30});

load('hasilPreprocessing.mat','bHasil');

pc=21; data=bHasil; option=1;

assignin('base','data',data);

[kelas_latih, kelas_uji_hasil]= svm( data,pc,option);

% assignin('base','kelas_latih',kelas_latih); %

% assignin('base','kelas_uji_hasil',kelas_uji_hasil);

hasil_prediksi = confusionmat(kelas_latih, kelas_uji_hasil); akurasi=(sum(diag(hasil_prediksi))/sum(hasil_prediksi(:)))*100;

handle to btnKlasifikasi (see GCBO)

reserved - to be defined in a future version of structure with handles and user data (see GUIDATA)

77

% hObject % eventdata MATLAB

% handles

assignin('base','hasil_prediksi',hasil_prediksi);

assignin('base','akurasi',akurasi);

% load hasil_prediksi;

[hasil_prediksi]=warnaConfusion(hObject, eventdata, handles,hasil_prediksi);

% Menampilkan confius matriks

set(handles.confMatriks,'Data', hasil_prediksi);

set(handles.confMatriks,'ColumnWidth',{30});

set(handles.confMatriks,'Visible','on');

%menampilkan hasil akurasi % load akurasi;

set(handles.textHasilAkurasi,'String',strcat(num2str

(akurasi),'%'));

set(handles.textHasilAkurasi,'Visible','on');

function [dataConfMat]=warnaConfusion(hObject, eventdata,

handles,dataConfMat)

% Hint: get(hObject,'Value') returns toggle state of BtnFigureTable

X=dataConfMat;

% Konversi matrix dari nomor ke cell array string

XX = reshape(strtrim(cellstr(num2str(X(:)))), size(X));

% Penentuan yang akan diberi warna dengan fotmat html

[~,I] = max(X);

for i=1:size(I,2)

XX(I(i),i) = strcat(...

'<html><span style="color: #429808; font-weight: bold;font-size:14;">', ...

XX(I(i),i), ...

'</span></div></html>');

end

dataConfMat=XX;

% --- Executes on button press in buttonBrowse.

function buttonBrowse_Callback(hObject, eventdata, handles)

% hObject handle to buttonBrowse (see GCBO) handle to BtnFigureTable (see GCBO)

reserved - to be defined in a future version of structure with handles and user data (see GUIDATA)

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

% hObject % eventdata MATLAB

% handles

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

clc; axes(handles.axDiuji); imshow('icons\bolaMata.jpg'); axes(handles.axImgUji); imshow('icons\bolaMata.jpg'); axes(handles.axbwImgUji); imshow('icons\bolaMata.jpg'); set(handles.outUjiTunggal,'String','0'); [nama_file, nama_path]=uigetfile(...

{'*.tif;','File Citra(*.tif)';

'*.tif','File tif(*.tif)';...

% '*.jpg','File JPEG(*.jpg)';

'*.*','Semua File(*.*)'},... 'Buka File Citra Host/Asli');

if ~isequal(nama_file, 0)

handles.databrowse=imread(fullfile(nama_path, nama_file)); guidata(hObject,handles)

axes(handles.axDiuji); imshow(handles.databrowse);

set(handles.gambarDiujiText,'String',nama_file);

else

return;

end

% --- Executes on button press in buttonPreprosesUji.

function buttonPreprosesUji_Callback(hObject, eventdata, handles)

Nambang=str2double(get(handles.Nambang,'String'));

muncul=get(handles.gambarDiujiText,'String');

folder=strcat('dataUji\',muncul);

data=imread(folder);

[Img,bwImg] = preprosess( Nambang,data); axes(handles.axImgUji) imshow(Img) axes(handles.axbwImgUji) imshow(bwImg) b=ekstraksi(Img,bwImg); b=b'; bHasilUji=b;

handle to buttonPreprosesUji (see GCBO)

reserved - to be defined in a future version of

79 % hObject % eventdata MATLAB % handles set(handles.outUjiTunggal,'String','0');

load('hasilPreprocessing.mat','bHasil');

load('hasiluji.mat','bHasilUji');

pc=21; option=3; data=bHasilUji; grade=0; data=[grade,data]; data=[bHasil;data];

[kelas_latih, kelas_uji_hasil]= svm( data,pc,option);

% assignin('base','kelas_latih',kelas_latih(end,:)); % assignin('base','kelas_uji_hasil',kelas_uji_hasil); % assignin('base','data',data);

set(handles.outUjiTunggal,'String',num2str(kelas_uji_hasil(end,:))

); % hObject % eventdata MATLAB % handles clc;

save('hasiluji.mat','bHasilUji');

uiwait(msgbox('Preprocessing sudah

selesai.','Peringatan','modal'));

% --- Executes on button press in buttonProsesUji.

function buttonProsesUji_Callback(hObject, eventdata, handles)

function outUjiTunggal_Callback(hObject, eventdata, handles)

% Hints: get(hObject,'String') returns contents of outUjiTunggal as text

% str2double(get(hObject,'String')) returns contents of

outUjiTunggal as a double

% --- Executes during object creation, after setting all properties.

function outUjiTunggal_CreateFcn(hObject, eventdata, handles)

% hObject handle to outUjiTunggal (see GCBO) handle to buttonProsesUji (see GCBO)

reserved - to be defined in a future version of structure with handles and user data (see GUIDATA)

handle to outUjiTunggal (see GCBO)

reserved - to be defined in a future version of

structure with handles and user data (see GUIDATA)

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

% 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 Nambang_Callback(hObject, eventdata, handles)

% hObject handle to Nambang (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 Nambang as text

% str2double(get(hObject,'String')) returns contents of

Nambang as a double

% --- Executes during object creation, after setting all properties.

function Nambang_CreateFcn(hObject, eventdata, handles)

% hObject handle to Nambang (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');

Dokumen terkait