45
BAB 4
IMPLEMENTASI PERANGKAT LUNAK
Setelah tahap perancangan, tahap selanjutnya adalah
tahap pembuatan sistem. Tahap – tahap implementasi perangkat
lunak mencakup lingkungan implementasi, serta program dalam
bentuk script matlab, yang akan dijelaskan pada subbab berikut
ini.
4.1
Lingkungan Implementasi
Perangkat lunak diimplementasikan pada lingkungn
sebagai berikut:
Perangkat Keras
Perangkat lunak ini diimplementasikan pada sebuah
notebook, dengan spesfikasi prosesor Intel Core 2 Duo 2,20
GHz dan memori 0,99 GB.
Perangkat Lunak
Perangkat lunak ini dikembangkan pada sistem operasi
Microsoft Windows XP Home Service Pack 2 dengan
menggunakan Matlab 7.0.
4.2
Implementasi Subclass Discriminant Analysis (SDA)
Pada metode Subclass Discriminant Analysis (SDA),
langkah yang dilakukan setelah membentuk matriks data citra
pelatihan adalah dengan membagi data di tiap kelas menjadi
beberapa subkelas. Pada tugas akhir ini, pembagian tersebut
menggunakan metode yang berdasarkan dengan aturan algoritma
Nearest-Neighbor.
4.2.1
Implementasi Pembagian Data per Kelas Menjadi
Beberapa Subkelas dengan Algoritma NN-Clustering
Proses awal pada implementasi NN class clustering
adalah mengurutkan data pelatihan terlebih dahulu. Yaitu, dengan
mendapatkan dua sampel untuk tiap kelas yang memiliki jarak
paling jauh. Kode program ditampilkan pada Gambar 4.1.
1 [n,p]=size(trainingdata); 2
3 %element1: menyimpan kolom ke-i pd datatraining yg memiliki jarak paling besar pada tiap kelas 4 element1=zeros(C,1);
5
6 %element2 : menyimpan index dari kolom ke-i pd datatraining yg memiliki jarak paling besar 7 element2=zeros(C,1);
8
9 dist=0; %menyimpan jarak 10
11 %larg_dist:menyimpan jarak terbesar untuk tiap kelas 12 larg_dist=zeros(1,C); 13 14 start=0; 15 for k=1:C 16 %k 17 X = trainingdata(:, start+1:start+nc(k)); 18 for i=1:nc(k)-1 19 Y = X; 20 Y(:, 1:i)=[]; 21 dist = sum((repmat(X(:,i),1,nc(k)-i)-Y).^2); 22 [dist,ind] = sort(dist); 23 24 if (dist(end) > larg_dist(k)) 25 larg_dist(k)=dist(end); 26 element1(k)=i+start; 27 element2(k)=ind(end)+start+i; 28 end 29 end 30 start=sum(nc(1:k)); 31 end
Gambar 4.1 Kode Program NN Class Clustering (1)
Kemudian meletakkan dua sampel yang memiliki jarak
terjauh tersebut pada elemen pertama dan elemen paling akhir.
Langkah selanjutnya adalah mengurutkan semua sampel pada tiap
kelas. Dengan cara, mencari tiap sampel yang berjarak paling
dekat dengan elemen pertama dan elemen terkahir secara
bersamaan. Kode program ditampilkan pada Gambar 4.2.
32 start=0; 33 sortedtrain=zeros(n,p); 34 for k=1:C 35 %k 36 key1=trainingdata(:, element1(k)); 37 key2=trainingdata(:, element2(k)); 38
39 sortedtrain(:, start+1)= key1; 40 sortedtrain(:, start+nc(k)) = key2; 41
42 num1=element1(k)-start; 43 num2=element2(k)-start; 44
45 temp = trainingdata(:, start+1:start+nc(k)); 46 temp(:, num2)=[]; 47 temp(:, num1)=[]; 48 49 count=nc(k)-2; 50 51 for i=1:fix((nc(k)-2)/2)
52 dist = sum((repmat(key1,1,count) - temp).^2); 53 [c,I]=min(dist); 54 sortedtrain(:,start+1+i)=temp(:,I); 55 temp(:,I)=[]; 56 count=count-1; 57 clear dist 58
59 dist = sum((repmat(key2,1,count) - temp).^2); 60 [c,I]=min(dist); 61 sortedtrain(:,start+nc(k)-i)=temp(:,I); 62 temp(:,I)=[]; 63 count=count-1; 64 clear dist 65 end 66 if (mod(nc(k),2)~=0) 67 sortedtrain(:,start+fix(nc(k)/2)+1)=temp; 68 end 69 start = sum(nc(1:k)); 70 end
Gambar 4.2 Kode Program NN Class Clustering (2)
Setelah mengurutkan data pelatihan, langkah selanjutnya
adalah membagi data di tiap kelas menjadi beberapa subkelas.
Proses ini menentukan jumlah sampel untuk tiap subkelas. Jumlah
sampel untuk tiap subkelas diusahakan sama. Kode program
ditampilkan pada Gambar 4.3.
71 NH=[]; 72 for i=1:category 73 tempNH=[]; 74 if (mod(nc(i),H(i)) == 0) 75 nh = nc(i)/H(i); 76 for j=1:H(i) 77 tempNH = [tempNH, nh]; 78 end 79 else 80 nh = fix(nc(i)/H(i));
81 if (mod(H(i),2)~=0) % H(i) ganjil 82 for j=1:(H(i)-1)/2 83 tempNH = [nh,tempNH,nh]; 84 end 85 tempNH = [tempNH(1:j),nc(i)- nh*2*j,tempNH(j+1:end)]; 86 else
87 for j=1:(H(i)-2)/2 %H(i) genap 88 tempNH = [nh,tempNH,nh]; 89 end 90 if (H(i)==2) j=0; end; 91 tempNH=[tempNH(1:j),nh,nc(i)- nh*(2*j+1),tempNH(j+1:end)]; 92 end 93 end 94 NH=[NH,tempNH]; 95 end
Gambar 4.3 Kode Program Get Jumlah Sample
4.2.2
Implementasi Perhitungan Matriks Scatter-Between
Subclass (Σ
B)
Langkah awal implementasi perhitungan matriks
scatter-between subclass adalah dengan menghitung rata-rata sampel di
tiap subkelas pada matriks data pelatihan. Σ
Bmengukur
perbedaan mean subkelas antar subkelas di kelas yang berbeda.
Matriks
scatter-between
subclass
dihitung
menggunakan
persamaan (2.14). Kode program ditampilkan pada Gambar 4.4.
96 n = size(X,1); 97 p = size(X,2); 98 99 HH = sum(H); 100 start = 0; 101 102 %=================== menghitung SigmaB =================== 103 meanx = mean(X,2); %rata-rata per kolom
104 for i=1: HH
105 %mengambil matriks tiap kelas(per kolom) 106 temp = X(:,start+1:start+nh(i));
107
108 %mean subclass
109 slicemean(:,i)=mean(temp,2); 110
111 %melabeli subclass termasuk class yg mana 112 for class = 1:C 113 if (i <= sum(H(1:class))) 114 sub_label(i) = class; 115 break; 116 end 117 end 118 start = sum(nh(1:i)); 119 end 120 clear temp; 121
122 %menghitung matriks kovarian dari mean subkelas di kelas yg berbeda
123 SigmaB = zeros(n,n); 124 for i=1:HH-1
125 for j=i+1:HH
126 if (sub_label(i) ~= sub_label(j))
127 %Menghitung matriks scatter antar subkelas per5 128 SigmaB = SigmaB + (nh(i)/p)*(nh(j)/p)*
129 (slicemean(:,i)-slicemean(:,j))* 130 (slicemean(:,i)-slicemean(:,j))'; 131 end 132 end 133 end 134 %==========================================================
Gambar 4.4 Kode Program Perhitungan Matriks Scatter-Between
4.2.3
Implementasi Perhitungan Matriks Scatter-Within
Subclass (Σ
X)
Kode program perhitungan Matriks Scatter-Within
Subclass (Σ
X) ditampilkan pada Gambar 4.5.
135 temp=X-repmat(meanx,1,p);
136 SigmaX=temp*temp'/p; %matriks kovarian
Gambar 4.5 Kode Program Perhitungan Matriks Scatter-Within
Subclass (
Σ
X)
4.2.4
Implementasi Penentuan Jumlah Subkelas yang
Optimal (H
0)
Pada tahap penentuan jumlah subkelas yang optimal (H
0),
langkah awal yang dilakukan adalah menghitung vektor eigen
dari matriks Scatter-Within Subclass (Σ
X) dan Scatter-Between
Subclass (Σ
B). Kemudian menghitung nilai K
Hseperti persamaan
(2.17). Langkah terakhir adalah mencari nilai K
Hyang paling
kecil, untuk menentukan jumlah subkelas yang optimal (H
0).
Kode program ditampilkan pada Gambar 4.6-a dan 4.6-b.
137 opts.disp=0;
138 rankB=rank(SigmaB);
139 [vb,db]=eigs(SigmaB,rankB,'LM',opts); 140 %vb : eigenvector ke-i dari SigmaB 141 %db : eigenvalue dari SigmaB 142 db = diag(db)';
143
144 [vx,dx]=eig(SigmaX);
145 %vx : eigenvector ke-j dari SigmaX 146 %dx : eigenvalue dari SigmaX 147 dx = diag(dx)';
148
149 [dx,ind]=sort(dx);
150 dx=fliplr(dx); %flip left to right 151 ind=fliplr(ind);
152 vx=vx(:,ind); %mengurutkan egienvector sesuai index 153
Gambar 4.6-a Kode Program Penentuan Jumlah Subkelas yang
Optimal (H
0)
154 %menghapus eigenvector yg eigenvalue nya kurang dari ... 155 vx(:,dx < (sum(dx)/thr))=[];
156 %menghapus eigenvalue yg eigenvalue nya kurang dari ... 157 dx(dx < (sum(dx)/thr))=[];
158
159 L = length(dx); 160
161 %K. nilai selisih -> nilai yg terkecil yg terbaik 162 K=0; 163 m=max(1,ceil(rankB/2)); %m < rank(B) 164 %Menghitung persamaan 7 165 for i=1:m 166 K=K+sum((vb(:,i)'*vx(:,1:min(i,L))).^2); 167 end 168 K=K/m;
Gambar 4.6-b Kode Program Penentuan Jumlah Subkelas yang
Optimal (H
0)
4.2.5
Implementasi Pembentukan Matriks Fitur Ekstraksi
Implementasi pembentukan matriks fitur ekstraksi
dilakukan dengan menggunakan persamaan
∑
−1X∑
BV
=
V
Λ
X.
Kode program ditampilkan pada Gambar 4.7.
169 % reconstruct (inv(SigmaX)*SigmaB using selected eigens) 170 rat1 = db'*(1./dx); 171 rat2 = vb'*vx; 172 rat = rat1.*rat2; 173 174 new_mtx=zeros(n,n); 175 176 for i=1:rankB 177 tmpvx = vx*rat(i,:)';
178 new_mtx = new_mtx + tmpvx*vb(:,i)'; 179 end
180
181 [v,d]=eigs(new_mtx,min(rankB,L),'LM',opts);
Gambar 4.7 Kode Program Pembentukan Matriks Fitur Ekstraksi
4.2.6
Implementasi Pengenalan Citra
Pada proses pengenalan, citra input terlebih dahulu
diubah menjadi vektor kolom. Kemudian menghitung matriks
fitur ekstraksi citra input. Dan, menghitung jarak antara matriks
fitur ekstraksi citra input dengan matriks fitur ekstraksi data
pelatihan. Kode program ditampilkan pada Gambar 4.8.
182 %membaca tiap citra
183 ReadObjRGB = imread(ObjName); 184
185 %menjadikan dalam bentuk grayscale 186 ReadObj = rgb2gray(ReadObjRGB); 187
188 [baris kolom] = size(ReadObj); 189 inputObjVector = zeros(JumDim, 1);
190 inputObjVector(1:JumDim,1)= reshape(ReadObj,JumDim,1); 191
192 % Penghitungan fitur ekstraksi dari matriks inputan 193 recog_wt = v'*inputObjVector;
194
195 % Penghitungan jarak antar fitur ekstraksi data training dengan fitur ekstraksi input sebagai bagian dari proses recognition 196 for j=1:JmlTot, 197 for i=1:klm, 198 euDis(i,j)=sqrt((train_wt(i,j)-recog_wt(i,:)).^2); 199 end 200 end
Gambar 4.8 Kode Program Perhitungan Jarak Fitur Ekstraksi Data
Pelatihan dengan Fitur Ekstraksi Citra Input
Langkah selanjutnya adalah mencari jarak terdekat antara
matriks fitur ekstraksi data pelatihan dengan matriks fitur
ekstraksi citra input. Kode program ditampilkan pada Gambar
4.9-a dan 4.9-b.
201 % penghitungan/pencarian jarak terdekat 202 temp =[];
203 for i=1:JmlTot, 204 jum_mag = 0;
205 mag(i) = norm(euDis(:,i),2); 206 jum_mag = [jum_mag + mag(i)]; 207 temp = [temp jum_mag];
208 if i == 1,
209 minDistance = jum_mag; 210 index = 1;
211 else
212 if minDistance > jum_mag, 213 minDistance = jum_mag; 214 index = i; 215 end 216 end 217 End