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');