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 sebagai berikut:
lunak
diimplementasikan
pada
lingkungn
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.
45
46 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
[n,p]=size(trainingdata); %element1: menyimpan kolom ke-i pd datatraining yg memiliki jarak paling besar pada tiap kelas element1=zeros(C,1); %element2 : menyimpan index dari kolom ke-i pd datatraining yg memiliki jarak paling besar element2=zeros(C,1); dist=0;
%menyimpan jarak
%larg_dist:menyimpan jarak terbesar untuk tiap kelas larg_dist=zeros(1,C); start=0; for k=1:C %k X = trainingdata(:, start+1:start+nc(k)); for i=1:nc(k)-1 Y = X; Y(:, 1:i)=[]; dist = sum((repmat(X(:,i),1,nc(k)-i)-Y).^2); [dist,ind] = sort(dist); if (dist(end) > larg_dist(k)) larg_dist(k)=dist(end); element1(k)=i+start; element2(k)=ind(end)+start+i; end end start=sum(nc(1:k)); 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
47 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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
start=0; sortedtrain=zeros(n,p); for k=1:C %k key1=trainingdata(:, element1(k)); key2=trainingdata(:, element2(k)); sortedtrain(:, start+1)= key1; sortedtrain(:, start+nc(k)) = key2; num1=element1(k)-start; num2=element2(k)-start; temp = trainingdata(:, start+1:start+nc(k)); temp(:, num2)=[]; temp(:, num1)=[]; count=nc(k)-2; for i=1:fix((nc(k)-2)/2) dist = sum((repmat(key1,1,count) - temp).^2); [c,I]=min(dist); sortedtrain(:,start+1+i)=temp(:,I); temp(:,I)=[]; count=count-1; clear dist dist = sum((repmat(key2,1,count) - temp).^2); [c,I]=min(dist); sortedtrain(:,start+nc(k)-i)=temp(:,I); temp(:,I)=[]; count=count-1; clear dist end if (mod(nc(k),2)~=0) sortedtrain(:,start+fix(nc(k)/2)+1)=temp; end start = sum(nc(1:k)); 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.
48 Proses ini menentukan jumlah sampel untuk tiap subkelas. Jumlah sampel untuk tiap subkelas diusahakan sama. Kode program ditampilkan pada Gambar 4.3. 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
NH=[]; for i=1:category tempNH=[]; if (mod(nc(i),H(i)) == 0) nh = nc(i)/H(i); for j=1:H(i) tempNH = [tempNH, nh]; end else nh = fix(nc(i)/H(i)); if (mod(H(i),2)~=0) % H(i) ganjil for j=1:(H(i)-1)/2 tempNH = [nh,tempNH,nh]; end tempNH = [tempNH(1:j),nc(i)nh*2*j,tempNH(j+1:end)]; else for j=1:(H(i)-2)/2 %H(i) genap tempNH = [nh,tempNH,nh]; end if (H(i)==2) j=0; end; tempNH=[tempNH(1:j),nh,nc(i)nh*(2*j+1),tempNH(j+1:end)]; end end NH=[NH,tempNH]; end
Gambar 4.3 Kode Program Get Jumlah Sample
4.2.2
Implementasi Perhitungan Matriks Scatter-Between Subclass (ΣB)
Langkah awal implementasi perhitungan matriks scatterbetween subclass adalah dengan menghitung rata-rata sampel di tiap subkelas pada matriks data pelatihan. ΣB mengukur 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.
49 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
n = size(X,1); p = size(X,2); HH = sum(H); start = 0; %=================== menghitung SigmaB =================== meanx = mean(X,2); %rata-rata per kolom for i=1: HH %mengambil matriks tiap kelas(per kolom) temp = X(:,start+1:start+nh(i)); %mean subclass slicemean(:,i)=mean(temp,2); %melabeli subclass termasuk class yg mana for class = 1:C if (i <= sum(H(1:class))) sub_label(i) = class; break; end end start = sum(nh(1:i)); end clear temp; %menghitung matriks kovarian dari mean subkelas di kelas yg berbeda SigmaB = zeros(n,n); for i=1:HH-1 for j=i+1:HH if (sub_label(i) ~= sub_label(j)) %Menghitung matriks scatter antar subkelas per5 SigmaB = SigmaB + (nh(i)/p)*(nh(j)/p)* (slicemean(:,i)-slicemean(:,j))* (slicemean(:,i)-slicemean(:,j))'; end end end %==========================================================
Gambar 4.4 Kode Program Perhitungan Matriks Scatter-Between Subclass (ΣB)
50 4.2.3
Implementasi Perhitungan Matriks Scatter-Within Subclass (ΣX)
Kode program perhitungan Matriks Subclass (ΣX) ditampilkan pada Gambar 4.5.
Scatter-Within
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 (H0)
Pada tahap penentuan jumlah subkelas yang optimal (H0), langkah awal yang dilakukan adalah menghitung vektor eigen dari matriks Scatter-Within Subclass (ΣX) dan Scatter-Between Subclass (ΣB). Kemudian menghitung nilai KH seperti persamaan (2.17). Langkah terakhir adalah mencari nilai KH yang paling kecil, untuk menentukan jumlah subkelas yang optimal (H0). Kode program ditampilkan pada Gambar 4.6-a dan 4.6-b. 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
opts.disp=0; rankB=rank(SigmaB); [vb,db]=eigs(SigmaB,rankB,'LM',opts); %vb : eigenvector ke-i dari SigmaB %db : eigenvalue dari SigmaB db = diag(db)'; [vx,dx]=eig(SigmaX); %vx : eigenvector ke-j dari SigmaX %dx : eigenvalue dari SigmaX dx = diag(dx)'; [dx,ind]=sort(dx); dx=fliplr(dx); %flip left to right ind=fliplr(ind); vx=vx(:,ind); %mengurutkan egienvector sesuai index
Gambar 4.6-a Kode Program Penentuan Jumlah Subkelas yang Optimal (H0)
51 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
%menghapus eigenvector yg eigenvalue nya kurang dari ... vx(:,dx < (sum(dx)/thr))=[]; %menghapus eigenvalue yg eigenvalue nya kurang dari ... dx(dx < (sum(dx)/thr))=[]; L = length(dx); %K. nilai selisih -> nilai yg terkecil yg terbaik K=0; m=max(1,ceil(rankB/2)); %m < rank(B) %Menghitung persamaan 7 for i=1:m K=K+sum((vb(:,i)'*vx(:,1:min(i,L))).^2); end K=K/m;
Gambar 4.6-b Kode Program Penentuan Jumlah Subkelas yang Optimal (H0)
4.2.5
Implementasi Pembentukan Matriks Fitur Ekstraksi
Implementasi pembentukan matriks fitur ekstraksi dilakukan dengan menggunakan persamaan ∑ −1 . X ∑ B V = VΛ X Kode program ditampilkan pada Gambar 4.7. 169 170 171 172 173 174 175 176 177 178 179 180 181
% reconstruct (inv(SigmaX)*SigmaB using selected eigens) rat1 = db'*(1./dx); rat2 = vb'*vx; rat = rat1.*rat2; new_mtx=zeros(n,n); for i=1:rankB tmpvx = vx*rat(i,:)'; new_mtx = new_mtx + tmpvx*vb(:,i)'; end [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
52 fitur ekstraksi citra input dengan matriks fitur ekstraksi data pelatihan. Kode program ditampilkan pada Gambar 4.8. 182 183 184 185 186 187 188 189 190 191 192 193 194 195
196 197 198 199 200
%membaca tiap citra ReadObjRGB = imread(ObjName); %menjadikan dalam bentuk grayscale ReadObj = rgb2gray(ReadObjRGB); [baris kolom] = size(ReadObj); inputObjVector = zeros(JumDim, 1); inputObjVector(1:JumDim,1)= reshape(ReadObj,JumDim,1); % Penghitungan fitur ekstraksi dari matriks inputan recog_wt = v'*inputObjVector; % Penghitungan jarak antar fitur ekstraksi data training dengan fitur ekstraksi input sebagai bagian dari proses recognition for j=1:JmlTot, for i=1:klm, euDis(i,j)=sqrt((train_wt(i,j)-recog_wt(i,:)).^2); end 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
Gambar 4.9-a Kode Program Pencarian Jarak Terdekat
53 212 if minDistance > jum_mag, 213 minDistance = jum_mag; 214 index = i; 215 end 216 end 217 End
Gambar 4.9-b Kode Program Pencarian Jarak Terdekat