• Tidak ada hasil yang ditemukan

VI. KESIMPULAN DAN SARAN

6.2. Saran

1. Prototipe tentang klasifikasi pola batik Yogyakarta ini hanya menggunakan 10 jenis batik Yogyakarta saja, sehingga diperlukan pengembangan penelitian untuk klasifikasi pola batik selain batik Yogyakarta dengan jumlah dan jenis batik yang lebih banyak.

2. Feature warna dan rata-rata vektor pola batik yang digunakan untuk pengolahan data batik pada penelitian ini menghasilkan akurasi yang cukup baik (sekitar 75%), akan tetapi diperlukan pengembangan lebih

lanjut dengan menggunakan feature yang berbeda yang diharapkan dapat menghasilkan akurasi yang lebih baik.

DAFTAR PUSTAKA

Arhami, Muhammad dan Desiani, Anita. 2005. Pemrograman Matlab. Andi. Yogyakarta.

Canny, J., 1986. A Computational Approach To Edge Detection, IEEE Trans. Pattern Analysis and Machine Intelligence, vol 8, pages 679-714.

Dogra, Shaillay K. 2007. Confusion Matrix. QSARWorld-A Strand Life Sciences Web. http://www.qsarworld.com/qsar-ml-confusion-matrix.php [21 Juli 2011]

GKBI.info. 2001. Sejarah Batik Solo dan Yogyakarta. http://putralaweyan.wordpress.com/2010/06/04/sejarah-batik-solo-dan-yogyakarta [6 November 2009]

Han, Jiwai dan Kamber, Micheline. 2006. Data Mining Concepts and Techniques. Academic Press. San Diego. Hal 297-298.

Hamilton. E. Gurak dan L. Findlater W. Olive .2001. Decision Trees. Rudjer Boskovic Institute.

J. Bala , J. Huang, H. Vafaie, K. Dejong, dan H. Wechsler. 1995. Hybrid Learning UsingGenetic Algorithms and Decision Trees for Pattern Classificatio. George Mason University Fairfax. VA 22030.

Li, C., Cao, Q., dan Guo, F. 2009. A Method for Color Classification of FruitsBased on Machine Vision. Shanghai Jiao Tong University. Shanghai. mioelgallery.multiply.com. 2005. Sejarah Batik Indonesia.

Mitchell, Tom M. 1997. Machine Learning. McGraw-Hill. Singapore.

Nagoro, Hardjo Krt. 1988. Sekapur Sirih tentang Pola Batik, Malam batik, Pola, dan Pesona. UNS Press. Surakarta.

Noviyanto, Ary. 2009. Klasifikasi Varietas Tomat Merah Dengan Metode Perbandingan Kadar Warna. Universitas Gadjah Mada. Yogyakarta.

Quinlan, J. R. 1986. Induction of Decision Trees. Mach. Morgan Kaufmann. Rahman, Arif. 2007. Pembangunan Sistem Content Base Image Retrieval

Menggunakan Kode Fraktal dari Dokumen Citra. Sekolah Tinggi Teknik Elektro dan Informatika: Institut Teknologi Bandung. Bandung.

Payam R., Lie Tang dan Huan Liu. 2008. Cross Validation. Arizona State University. USA.

Richard O. Duda, Peter E. Hart, David G. Stork (2001) Pattern classification (2nd edition). Wiley. New York. ISBN 0-471-05669-3.

Riyanto Sigit, dkk. 2002. Aplikasi Neural Network pada Pengenalan Pola Tanda Tangan, Institut Teknologi Sepuluh November. Surabaya.

Rothman, Ernest E. 2005. Create a tree structure. http://creativecommons.org/licenses/by-nc-sa/2.5/ [13 Februari 2011]. Santosa, Budi. 2007. Data Mining Teknik Pemanfaatan Data untuk Keperluan

Bisnis. Graha Ilmu. Yogyakarta. 103.

Shapiro L.G. & Stockman G.C. 2001. Computer Vision. Prentice Hall. London. Page 326.

Squire, David McG. 2004. CSE5230 Tutorial: The ID3 Decision Tree Algorithm. Faculty of Information Technology. Monash University.

Storkey, Amos. 2004. Learning from Data: Decision Trees. School of Informatics University. Edinburgh.

Sutoyo, E. Mulyanto, V. Suhartono, O.D. Nurhayati, dan Wijanarto. 2009. Teori Pengolahan Citra Digital. Andi. Yogyakarta.

Theodoridis, Sergios dan Kountroumbas, Konstantinos. 2003. Pattern Recognition (4nd edition). Academic Press. San Diego.

LAMPIRAN 1

CODING PROGRAM

1. Listing Program createCiriHorisontal.m

function createCiriHorisontal()

dirAsal={'data_1'; 'data_2'; 'data_3'; 'data_4'; 'data_5'; ...

'data_6';'data_7';'data_8';'data_9';'data_10';};

for a=1:length(dirAsal)

% masuk ke suatu direktori,membaca file

cd (dirAsal{a});

fileJpg=dir ('*.jpg'); % ambil file yang berekstensi *.jpg

sum_jpg=length(fileJpg);

for b=1:length(fileJpg)

batik = imread(fileJpg(b).name); % baca citra

tinggi=size(batik,1); % hitung tinggi citra

lebar=size(batik,2); % hitung lebar citra

feature=[]; % matriks info kepadatan piksel

sum1=0; sum2=0; sum3=0; sum4=0; sum5=0; sum6=0; sum7=0; sum8=0; obyek = 1;

dR=batik(:,:,1); %keping Red

dG=batik(:,:,2); %keping Green

dB=batik(:,:,3); %keping Blue

meanR=mean(mean(dR)); %rata-rata Red

meanG=mean(mean(dG)); %rata-rata Green

meanB=mean(mean(dB)); %rata-rata Blue

meanRGB=(meanR+meanG+meanB)/3; %rata-rata RGB

gray=rgb2gray(batik); % ubah citra batik ke grayscale

gambar = edge(gray,'canny'); %deteksi tepi dengan canny

for i=1:25 for k=1:200

if (gambar(i,k)==obyek) sum1=sum1+1; end

end

end

for i=26:50 for k=1:200

if (gambar(i,k)==obyek) sum2=sum2+1; end end

end for i=51:75 for k=1:200

if (gambar(i,k)==obyek) sum3=sum3+1; end end

end

for i=76:100 for k=1:200

if (gambar(i,k)==obyek) sum4=sum4+1; end end

end

for i=101:125 for k=1:200

if (gambar(i,k)==obyek) sum5=sum5+1; end end

end

for i=126:150 for k=1:200

if (gambar(i,k)==obyek) sum6=sum6+1; end

end

end

for i=151:175 for k=1:200

if (gambar(i,k)==obyek) sum7=sum7+1; end end

end

for i=176:200 for k=1:200

if (gambar(i,k)==obyek) sum8=sum8+1; end end

end

% masukkan sum per baris ke dalam indeks info ke[i]

feature=[feature,meanR,meanG,meanB,meanRGB,sum1/5000,sum2/5000,sum3/5000,sum4/ 5000,sum5/5000,sum6/5000,sum7/5000,sum8/5000,a];

% tulis ke dalam file feature

nama_file =[num2str(a) '_' num2str(b) '.nw']; fid1=fopen(nama_file,'w'); fwrite(fid1, [num2str(feature)]); fclose(fid1); end cd ..; end

2. Listing Program createCiriVertikal.m

function createCiriVertical()

dirAsal={'data_1'; 'data_2'; 'data_3'; 'data_4'; 'data_5'; ...

'data_6';'data_7';'data_8';'data_9';'data_10';};

for a=1:length(dirAsal)

% masuk ke suatu direktori,membaca file

cd (dirAsal{a});

fileJpg=dir ('*.jpg'); % ambil file yang berekstensi *.jpg

sum_jpg=length(fileJpg);

for b=1:length(fileJpg)

batik = imread(fileJpg(b).name); % baca citra

feature=[]; % matriks info kepadatan piksel

sum1=0; sum2=0; sum3=0; sum4=0; sum5=0; sum6=0; sum7=0; sum8=0; obyek = 1; dR=batik(:,:,1); dG=batik(:,:,2); dB=batik(:,:,3); meanR=mean(mean(dR)); meanG=mean(mean(dG)); meanB=mean(mean(dB)); meanRGB=(meanR+meanG+meanB)/3;

gray=rgb2gray(batik); % ubah ke grayscale

gambar = edge(gray,'canny'); %deteksi tepi dengan canny

for i=1:200 for j=1:25

if (gambar(i,j)==obyek) sum1=sum1+1; end end

for k=26:50

if (gambar(i,k)==obyek) sum2=sum2+1; end end

for l=51:75

if (gambar(i,l)==obyek) sum3=sum3+1; end end

for m=76:100

if (gambar(i,m)==obyek) sum4=sum4+1; end end

for n=101:125

if (gambar(i,n)==obyek) sum5=sum5+1; end end

for o=126:150

if (gambar(i,o)==obyek) sum6=sum6+1; end end

for p=151:175

if (gambar(i,p)==obyek) sum7=sum7+1; end end

for q=176:200

if (gambar(i,q)==obyek) sum8=sum8+1; end end

end

% masukkan sum per kolom ke dalam indeks info ke[i]

feature=[feature,meanR,meanG,meanB,meanRGB,sum1/5000,sum2/5000,sum3/5000,sum4/ 5000,sum5/5000,sum6/5000,sum7/5000,sum8/5000,a];

% tulis ke dalam file feature

nama_file =[num2str(a) '_' num2str(b) '.nw']; fid1=fopen(nama_file,'w'); fwrite(fid1, [num2str(feature)]); fclose(fid1); end cd ..; end

3. Listing Program DataTraining1.m

function [training1 testing1]=DataTraining1()

training1=[]; testing1=[];

dirAsal={'data_1'; 'data_2'; 'data_3'; 'data_4'; 'data_5'; ...

'data_6';'data_7';'data_8';'data_9';'data_10';};

for a=1:length(dirAsal)

% masuk ke suatu direktori,membaca file

cd(dirAsal{a}); for b=1:32

fnm = dir ([num2str(a) '_' num2str(b) '.nw']); f=fnm.name; ff=textread(f); training1=[training1; ff]; end cd .. end for c=1:length(dirAsal)

% masuk ke suatu direktori,membaca file

cd(dirAsal{c}); for d=33:40

fnm = dir ([num2str(c) '_' num2str(d) '.nw']); f=fnm.name; ff=textread(f); testing1=[testing1; ff]; end cd .. end

4. Listing Program DataTraining2.m

function [training2 testing2]=DataTraining2()

training2=[]; testing2=[]; data1=[]; data2=[];

dirAsal={'data_1'; 'data_2'; 'data_3'; 'data_4'; 'data_5'; ...

'data_6';'data_7';'data_8';'data_9';'data_10';};

% masuk ke suatu direktori,membaca file

cd(dirAsal{a}); for b=1:24

fnm = dir ([num2str(a) '_' num2str(b) '.nw']); f=fnm.name;

ff=textread(f); data1=[data1; ff]; end

for b=33:40

fnm = dir ([num2str(a) '_' num2str(b) '.nw']); f=fnm.name; ff=textread(f); data2=[data2; ff]; end cd .. end training2=[training2; data1;data2]; for c=1:length(dirAsal)

% masuk ke suatu direktori,membaca file

cd(dirAsal{c}); for d=25:32

fnm = dir ([num2str(c) '_' num2str(d) '.nw']); f=fnm.name; ff=textread(f); testing2=[testing2; ff]; end cd .. end

5. Listing Program DataTraining3.m

function [training3 testing3]=DataTraining3()

training3=[]; testing3=[]; data1=[]; data2=[];

dirAsal={'data_1'; 'data_2'; 'data_3'; 'data_4'; 'data_5'; ...

'data_6';'data_7';'data_8';'data_9';'data_10';};

for a=1:length(dirAsal)

% masuk ke suatu direktori,membaca file

cd(dirAsal{a}); for b=1:16

fnm = dir ([num2str(a) '_' num2str(b) '.nw']); f=fnm.name;

ff=textread(f); data1=[data1; ff]; end

for b=25:40

fnm = dir ([num2str(a) '_' num2str(b) '.nw']); f=fnm.name; ff=textread(f); data2=[data2; ff]; end cd .. end training3=[training3; data1;data2]; for c=1:length(dirAsal)

% masuk ke suatu direktori,membaca file

cd(dirAsal{c}); for d=17:24

fnm = dir ([num2str(c) '_' num2str(d) '.nw']); f=fnm.name; ff=textread(f); testing3=[testing3; ff]; end cd .. end

6. Listing Program DataTraining4.m

function [training4 testing4]=DataTraining4()

training4=[]; testing4=[]; data1=[]; data2=[];

dirAsal={'data_1'; 'data_2'; 'data_3'; 'data_4'; 'data_5'; ...

'data_6';'data_7';'data_8';'data_9';'data_10';};

for a=1:length(dirAsal)

% masuk ke suatu direktori,membaca file

cd(dirAsal{a}); for b=1:8

fnm = dir ([num2str(a) '_' num2str(b) '.nw']); f=fnm.name;

ff=textread(f); data1=[data1; ff]; end

for b=17:40

fnm = dir ([num2str(a) '_' num2str(b) '.nw']); f=fnm.name; ff=textread(f); data2=[data2; ff]; end cd .. end training4=[training4; data1;data2]; for c=1:length(dirAsal)

% masuk ke suatu direktori,membaca file

cd(dirAsal{c}); for d=9:16

fnm = dir ([num2str(c) '_' num2str(d) '.nw']); f=fnm.name; ff=textread(f); testing4=[testing4; ff]; end cd .. end

7. Listing Program DataTraining5.m

function [training5 testing5]=DataTraining5()

training5=[]; testing5=[];

dirAsal={'data_1'; 'data_2'; 'data_3'; 'data_4'; 'data_5'; ...

'data_6';'data_7';'data_8';'data_9';'data_10';};

for a=1:length(dirAsal)

% masuk ke suatu direktori,membaca file

cd(dirAsal{a}); for b=9:40

fnm = dir ([num2str(a) '_' num2str(b) '.nw']); f=fnm.name; ff=textread(f); training5=[training5; ff]; end cd .. end for c=1:length(dirAsal)

% masuk ke suatu direktori,membaca file

cd(dirAsal{c}); for d=1:8

fnm = dir ([num2str(c) '_' num2str(d) '.nw']); f=fnm.name; ff=textread(f); testing5=[testing5; ff]; end cd .. end

8. Listing Program konversi.m

function [train test]=konversi(training,testing)

length=size(training); panjang=size(testing); datatrain=[]; datatest=[]; for kolom=1:length(2)-1 uruttrain=[]; uruttest=[]; nilaiSort=sort(training(:,kolom)); maxi=max(nilaiSort); minim=min(nilaiSort); paut=maxi-minim; rata=paut/3; batas1=min(nilaiSort)+rata; batas2=batas1+rata; for baris=1:length(1) data=training(baris,kolom); if (data<=batas1) var=1';

elseif ((data>batas1) & (data<=batas2)) var=2; elseif (data>batas2) var=3; end uruttrain=[uruttrain;var]; end datatrain=[datatrain,uruttrain]; for baris=1:panjang(1) data=testing(baris,kolom); if (data<=batas1) var2=1';

elseif ((data>batas1) & (data<=batas2)) var2=2; elseif (data>batas2) var2=3; end uruttest=[uruttest;var2]; end datatest=[datatest,uruttest]; end train=[datatrain,training(:,13)]; test=[datatest,testing(:,13)];

9. Listing Program peluang.m

function [mat_label total p1 p2 p3]=peluang(label,att)

panjang=size(att); mat_label=[]; p101=0;p102=0;p103=0;p104=0;p105=0;p106=0;p107=0;p108=0;p109=0;p110=0; p201=0;p202=0;p203=0;p204=0;p205=0;p206=0;p207=0;p208=0;p209=0;p210=0; p301=0;p302=0;p303=0;p304=0;p305=0;p306=0;p307=0;p308=0;p309=0;p310=0; ulabel=unique(label); pnj_ulabel=size(ulabel); for baris=1:panjang(1) klas=label(baris,:); nom=att(baris,:);

if ((nom==1) & (klas==1)) p101=p101+1;

elseif ((nom==1) & (klas==2)) p102=p102+1;

elseif ((nom==1) & (klas==3)) p103=p103+1;

elseif ((nom==1) & (klas==4)) p104=p104+1;

elseif ((nom==1) & (klas==5)) p105=p105+1;

elseif ((nom==1) & (klas==6)) p106=p106+1;

elseif ((nom==1) & (klas==7)) p107=p107+1;

elseif ((nom==1) & (klas==8)) p108=p108+1;

elseif ((nom==1) & (klas==9)) p109=p109+1;

elseif ((nom==1) & (klas==10)) p110=p110+1;

elseif ((nom==2) & (klas==1)) p201=p201+1;

elseif ((nom==2) & (klas==2)) p202=p202+1;

elseif ((nom==2) & (klas==3)) p203=p203+1;

elseif ((nom==2) & (klas==4)) p204=p204+1;

elseif ((nom==2) & (klas==5)) p205=p205+1;

elseif ((nom==2) & (klas==6)) p206=p206+1;

elseif ((nom==2) & (klas==7)) p207=p207+1;

elseif ((nom==2) & (klas==8)) p208=p208+1;

elseif ((nom==2) & (klas==9)) p209=p209+1;

elseif ((nom==2) & (klas==10)) p210=p210+1;

elseif ((nom==3) & (klas==1)) p301=p301+1;

elseif ((nom==3) & (klas==2)) p302=p302+1;

elseif ((nom==3) & (klas==3)) p303=p303+1;

elseif ((nom==3) & (klas==4)) p304=p304+1;

elseif ((nom==3) & (klas==5)) p305=p305+1;

elseif ((nom==3) & (klas==6)) p306=p306+1;

elseif ((nom==3) & (klas==7)) p307=p307+1;

elseif ((nom==3) & (klas==8)) p308=p308+1;

elseif ((nom==3) & (klas==9)) p309=p309+1;

elseif ((nom==3) & (klas==10)) p310=p310+1; end p1=[p101,p102,p103,p104,p105,p106,p107,p108,p109,p110]; p2=[p201,p202,p203,p204,p205,p206,p207,p208,p209,p210]; p3=[p301,p302,p303,p304,p305,p306,p307,p308,p309,p310]; end for batik=1:max(ulabel) [a,b]=find(label==batik); jml_label=sum(b); mat_label=[mat_label,jml_label]; end total=sum(mat_label);

10.Listing Program buat_gain.m

function [g]=buat_gain(train) panjang=size(train); data=train(:,1:panjang(2)-1); label=train(:,panjang(2)); g=[]; ent=[];

ulabel=unique(label); pnj_ulabel=size(ulabel); for kolom=1:panjang(2)-1 att=data(:,kolom); uval=unique(att); jmlUnik=size(uval); if(jmlUnik(1)==1) gain=0; else

[mat_label total p1 p2 p3]=peluang(label,att); entropyKelas=0; for i=1:3 length=size(p1); entrop=0; eval(['Ep' num2str(i) '=0;']); for kolom=1:length(2)-1

eval(['Pnode=p' num2str(i) '(:,kolom);']); eval(['tot=sum(p' num2str(i) ')';]); if(Pnode==0) hasil=0; else hasil=(Pnode/tot)*log(Pnode/tot)/log(2); end entrop=entrop-hasil;

eval(['Ep' num2str(i) '=entrop;']); end ent=[ent,entrop]; end for i=1:max(ulabel) if (mat_label(1,i)==0) entKlas=0; else entKlas=(mat_label(1,i)/total)*(log(mat_label(1,i)/total)/log(2)); end entropyKelas = entropyKelas-entKlas; end info=0; for j=1:3 eval(['jum=sum(p' num2str(j) ');']); eval(['entropi=Ep' num2str(j) ';']) if (isnan(entropi)==1) entropi=0; info=info+(jum/total)*entropi; else info=info+(jum/total)*entropi; end gain=entropyKelas-info; end end g=[g,gain]; end

11.Listing Program buat_tree.m

function [node]=buat_tree(train, level, cutoff)

data_size = size(train);

clear node;

[nrows, ncols] = size(train); class_attr = ncols; if( level >= ncols-1 ) node.subnbode1 = []; node.subnbode2 = []; node.subnbode3 = []; node.split_attribute = 0;

node.split_vars = []; node.info_gain = 0; node.count_child_node = 0; node.level = 0; max_daun=1; daun1=sum(train(:,class_attr) == 1); for (k=2:10) daun=sum(train(:,class_attr) == k); temp=daun; if(temp>daun1) daun1 = temp; max_daun = k; end end node.classvar = max_daun; return; end [g] = buat_gain(train);

[max_info_gain, split_attr] = max(g); if (max_info_gain <= 0) node.subnbode1 = []; node.subnbode2 = []; node.subnbode3 = []; node.split_attribute = 0; node.split_vars = []; node.info_gain = 0; node.count_child_node = 0; node.level = 0; max_daun=1; daun1=sum(train(:,class_attr) == 1); for (k=2:10) daun=sum(train(:,class_attr) == k); temp=daun; if(temp>daun1) daun1 = temp; max_daun = k; end end node.classvar = max_daun; return; end % set up node node.subnode1 = []; node.subnode2 = []; node.subnode3 = []; node.split_attribute = split_attr; node.split_vars = unique(train(:,split_attr)); node.info_gain = max_info_gain; uvals = unique(train(:,split_attr)); node.count_child_node = length(uvals); node.level = level; node.classvar = -1; for i = 1 : node.count_child_node new_train = []; clear new_node;

% create a new train

for j=1 : nrows

if( train( j, split_attr ) == uvals(i) ) new_train = [new_train; train(j,:)]; end

[srows, scols] = size(new_train); if( isempty(new_train) ) new_node.subnode1 = []; new_node.subnode2 = []; new_node.subnode3 = []; new_node.split_attribute = 0; new_node.split_vars = []; new_node.info_gain = 0; new_node.count_child_node = 0; new_node.level = 0; new_node.classvar = -1; else

new_node = buat_tree( new_train, level+1, cutoff ); end if( uvals(i) == 1 ) node.subnode1 = new_node; elseif( uvals(i) == 2 ) node.subnode2 = new_node; elseif( uvals(i) == 3 ) node.subnode3 = new_node; end end

12.Listing Program test_id3.m

function [kelas, test_acc1] = test_id3( tree, dataset )

kelas=[];

[nrows, ncols] = size( dataset ); success = 0;

failure = 0; for i=1:nrows

[class_res]=test_id3_case( tree, dataset(i,:) );

if( test_id3_case( tree, dataset(i,:) ) == dataset(i,ncols) ) success = success + 1; else failure = failure + 1; end kelas=[kelas; class_res]; end

test_acc1 = (success) / (success + failure);

function [class_res] = test_id3_case( node, dataset )

if( node.split_attribute ~= 0 )

if( ~isempty(node.subnode1) && dataset(node.split_attribute) == 1 ) class_res = test_id3_case(node.subnode1, dataset);

return;

elseif( ~isempty(node.subnode2) && dataset(node.split_attribute) == 2) class_res = test_id3_case(node.subnode2, dataset);

return;

elseif( ~isempty(node.subnode3) && dataset(node.split_attribute) == 3) class_res = test_id3_case(node.subnode3, dataset);

return; end

class_res = -1; else

class_res = node.classvar;

13.Listing Program cross_validation.m

function [tot_benar data_salah data_null confution_mat akurasi] =

cross_validation(id3_test, test) panjang=size(test); kelas=test(:,panjang(2)); uval=unique(kelas); length=size(uval); crossV=[];

hasil=[]; confution_mat=[]; for i=1:length(1) tab1=0;tab2=0,tab3=0;tab4=0;tab5=0,tab6=0,tab7=0,tab8=0;tab9=0,tab10=0; for baris=1:panjang(1) if (kelas(baris,:) == i) if (id3_test(baris,:) == 1) tab1=tab1+1; elseif (id3_test(baris,:) == 2) tab2=tab2+1; elseif (id3_test(baris,:) == 3) tab3=tab3+1; elseif (id3_test(baris,:) == 4) tab4=tab4+1; elseif (id3_test(baris,:) == 5) tab5=tab5+1; elseif (id3_test(baris,:) == 6) tab6=tab6+1; elseif (id3_test(baris,:) == 7) tab7=tab7+1; elseif (id3_test(baris,:) == 8) tab8=tab8+1; elseif (id3_test(baris,:) == 9) tab9=tab9+1; elseif (id3_test(baris,:) == 10) tab10=tab10+1; end else 0; end end crossV=[tab1;tab2;tab3;tab4;tab5;tab6;tab7;tab8;tab9;tab10]; hasil=[hasil,crossV]; end confution_mat=hasil'; tot_benar=0; totDat=0; con_mat=size(confution_mat); for j=1:con_mat(1) betul=confution_mat(j,j); tot_benar=tot_benar+betul; jml=sum(confution_mat(j,:)); totDat=totDat+jml; end data_salah=totDat-tot_benar; data_null=panjang(1)-totDat; akurasi=tot_benar/panjang(1)*100;

14.Listing Program training_testing.m

function [training benar salah tdkJelas pohon matriks

akurasi]=training_testing()

[training1 testing1]=DataTraining1(); [train1 test1]=konversi(training1,testing1); [pohon1] = buat_tree(train1, 0, 1);

[hasil_test1] = test_id3(pohon1, test1);

[data_benar1 data_salah1 data_null1 confution_mat1 akurasi1] = cross_validation(hasil_test1, test1)

[training2 testing2]=DataTraining2(); [train2 test2]=training(training2,testing2); [pohon2] = buat_tree(train2, 0, 1);

[hasil_test2] = test_id3(pohon2, test2);

[data_benar2 data_salah2 data_null2 confution_mat2 akurasi2] = cross_validation(hasil_test2, test2)

[training3 testing3]=DataTraining3(); [train3 test3]=training(training3,testing3);

[pohon3] = buat_tree(train3, 0, 1); [hasil_test3] = test_id3(pohon3, test3);

[data_benar3 data_salah3 data_null3 confution_mat3 akurasi3] = cross_validation(hasil_test3, test3)

[training4 testing4]=DataTraining4(); [train4 test4]=training(training4,testing4); [pohon4] = buat_tree(train4, 0, 1);

[hasil_test4] = test_id3(pohon4, test4);

[data_benar4 data_salah4 data_null4 confution_mat4 akurasi4] = cross_validation(hasil_test4, test4)

[training5 testing5]=DataTraining5(); [train5 test5]=training(training5,testing5); [pohon5] = buat_tree(train5, 0, 1);

[hasil_test5] = test_id3(pohon5, test5);

[data_benar5 data_salah5 data_null5 confution_mat5 akurasi5] = cross_validation(hasil_test5, test5) akur=[akurasi1,akurasi2,akurasi3,akurasi4,akurasi5]; [a b]=max(akur); eval(['training=training' num2str(b) ';']); eval(['benar=data_benar' num2str(b) ';']); eval(['salah=data_salah' num2str(b) ';']); eval(['tdkJelas=data_null' num2str(b) ';']); eval(['pohon=pohon' num2str(b) ';']); eval(['matriks=confution_mat' num2str(b) ';']); eval(['akurasi=akurasi' num2str(b) ';']);

15.Listing Program modeling.m

function [data_model]=modeling(training, fileJpg)

batik = imread(fileJpg(b).name); % baca citra

tinggi=size(batik,1); % hitung tinggi citra

lebar=size(batik,2); % hitung lebar citra

feature=[]; % matriks info kepadatan piksel

sum1=0; sum2=0; sum3=0; sum4=0; sum5=0; sum6=0; sum7=0; sum8=0; obyek = 1;

dR=batik(:,:,1); %keping Red

dG=batik(:,:,2); %keping Green

dB=batik(:,:,3); %keping Blue

meanR=mean(mean(dR)); %rata-rata Red

meanG=mean(mean(dG)); %rata-rata Green

meanB=mean(mean(dB)); %rata-rata Blue

meanRGB=(meanR+meanG+meanB)/3; %rata-rata RGB

gray=rgb2gray(batik); % ubah citra batik ke grayscale

gambar = edge(gray,'canny'); % deteksi tepi dengan canny

for i=1:25 for k=1:200

if (gambar(i,k)==obyek) sum1=sum1+1; end

end

end

for i=26:50 for k=1:200

if (gambar(i,k)==obyek) sum2=sum2+1; end

end

end for i=51:75 for k=1:200

if (gambar(i,k)==obyek) sum3=sum3+1; end end

end

for i=76:100 for k=1:200

if (gambar(i,k)==obyek) sum4=sum4+1; end

end

end

for k=1:200

if (gambar(i,k)==obyek) sum5=sum5+1; end end

end

for i=126:150 for k=1:200

if (gambar(i,k)==obyek) sum6=sum6+1; end

end

end

for i=151:175 for k=1:200

if (gambar(i,k)==obyek) sum7=sum7+1; end

end

end

for i=176:200 for k=1:200

if (gambar(i,k)==obyek) sum8=sum8+1; end end

end

% masukkan sum per baris ke dalam indeks info ke[i]

feature=[feature,meanR,meanG,meanB,meanRGB,sum1/5000,sum2/5000,sum3/5000,sum4/ 5000,sum5/5000,sum6/5000,sum7/5000,sum8/5000,a]; length=size(training); data_model=[]; for kolom=1:length(2)-1 nilaiSort=sort(training(:,kolom)); maxi=max(nilaiSort); minim=min(nilaiSort); paut=maxi-minim; rata=paut/3; batas1=min(nilaiSort)+rata; batas2=batas1+rata; data=feature(:,kolom); if (data<=batas1) var=1';

elseif ((data>batas1) & (data<=batas2)) var=2; elseif (data>batas2) var=3; end data_model=[data_model,var]; end

16.Listing Program pengujian.m

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

% --- Executes just before pengujian is made visible.

function pengujian_OpeningFcn(hObject, eventdata, handles, varargin)

% Choose default command line output for pengujian

handles.output = hObject;

% Update handles structure

function varargout = pengujian_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

% --- Executes on button press in btnKembali.

function btnKembali_Callback(hObject, eventdata, handles)

delete(handles.figure1)

function popupFeature_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

% --- Executes on button press in btnProses.

function btnProses_Callback(hObject, eventdata, handles)

set(handles.textProses1,'string','sedang membuat feature...'); set(handles.textProses2,'string','...');

selected_cmd = get(handles.popupFeature,'Value');

switch selected_cmd;

case 1

createCiriHorisontal();

set(handles.textProses3,'string','feature Warna & Rata2 Horisontal berhasil dibuat.');

case 2

createCiriVertikal();

set(handles.textProses3,'string','feature Warna & Rata2 Vertikal berhasil dibuat.');

end

set(handles.textProses4,'string','proses training...');

[training benar salah tdkJelas pohon matriks akurasi]=training_testing(); set(handles.textProses5,'string','confution matriks'); set(handles.uitable1,'Data',matriks) set(handles.textBenar,'string',benar); set(handles.textSalah,'string',salah); set(handles.textNull,'string',tdkJelas); set(handles.textAkurasi,'string',akurasi);

17.Listing Program pengenalan.m

gui_Singleton = 1;

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

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @pengenalan_OpeningFcn, ...

'gui_OutputFcn', @pengenalan_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

% --- Executes just before pengenalan is made visible.

function pengenalan_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

function edit1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

% --- Executes on button press in pushbutton_kembali.

function pushbutton_kembali_Callback(hObject, eventdata, handles)

delete(handles.figure1)

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

function edit2_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

% --- Executes on button press in pushBrowse.

function pushBrowse_Callback(hObject, eventdata, handles)

[nama_file1, nama_path1]=uigetfile(...

{'*.bmp;*.jpg','File Citra (*.bmp,*.jpg)'; '*.jpg','File jpeg (*.jpg)'},...

'Buka File Citra');

if ~isequal(nama_file1, 0)

handles.data1=imread(fullfile(nama_path1,nama_file1)); if isequal(nama_file1,0)|isequal(nama_path1,0)

errordlg('File Tidak Ditemukan.','Peringatan'); end; guidata(hObject,handles); handles.current_data1=handles.data1; axes(handles.axes1); imshow(handles.current_data1); else return; end set(handles.edit1,'String',nama_file1);

% --- Executes on button press in pushProses.

function pushProses_Callback(hObject, eventdata, handles)

set(handles.textProses1,'string','membentuk feature...');

[training benar salah tdkJelas pohon matriks akurasi]=training_testing(); image_file = get(handles.edit1,'String'); nama_file= char(image_file); display(nama_file); [data_model]=modeling(training,nama_file); set(handles.textProses2,'string','mencocokan pola'); [klasifikasi] = test_id3(pohon, data_model);

if (klasifikasi==1)

nama_pola={'Nitik Cengkeh'};

elseif(klasifikasi==2)

nama_pola={'Parang Pancing'};

elseif(klasifikasi==3)

nama_pola={'Pari Sewuli Seling Pamor'};

elseif(klasifikasi==4) nama_pola={'Truntum'}; elseif(klasifikasi==5) nama_pola={'Tambal'}; elseif(klasifikasi==6) nama_pola={'Ceplok Kece'}; elseif(klasifikasi==7)

nama_pola={'Kawung Kembang Cempoko Hitam'};

elseif(klasifikasi==8)

nama_pola={'Kawung Picis'};

elseif(klasifikasi==9)

nama_pola={'Parang Kawung Picis'};

elseif(klasifikasi==10)

nama_pola={'Parang Kunci'}; end

set(handles.textPola,'string',nama_pola);

% --- Executes on button press in pushKembali.

function pushKembali_Callback(hObject, eventdata, handles)

LAMPIRAN 2

DATA HASIL

1. Data hasil ekstraksi feature horisontal

3. Data hasil ekstraksi feature vertical

LAMPIRAN 3

DATA PENELITIAN

1. Jenis Batik

Nitik Cengkeh Parang Pancing

Parang Sewuli Seling Pamor

Truntum Tambal

Ceplok Kece Kawung Kembang Cempoko Hitam

Kawung Picis Parang Kawung Picis

Dokumen terkait