Pengenalan Pola adalah cabang kecerdasan yang menitik-beratkan pada metode pengklasifikasian objek ke dalam klas – klas tertentu untuk menyelesaikan masalah tertentu. Contoh yang dibahas kali ini adalah mengenai penentuan pola wajah baru berdasarkan pola wajah yang sudah ada sebelumnya dengan menggunakan metode GLCM (Gray-Level Co-occurence Matrix).
Diasumsikan ada 10 wajah manusia yang sudah diketahui sebelumnya, dengan data sebagai berikut:
Selanjutnya ada pola wajah baru yang ingin diketahui hasilnya
Maka tentukan pola wajah baru ini cocok dengan pola wajah yang mana
Diasumsikan pola wajah yang baru adalah sebagai berikut:
Langkah-langkah penggunaan algoritma ini adalah
1a. Tentukan path folder dari gambar contoh data dan gambar data baru
pathContohData = 'ContohData'; pathDataBaru = 'DataBaru';
1b. Cari semua gambar contoh wajah dan data baru yang tersedia pada masing-masing folder
Kemudian hitung jumlah gambar untuk masing-masing contoh data dan data baru yang tersedia
bmpContohData=dir(sprintf('%s/*.bmp',pathContohData)); bmpDataBaru=dir(sprintf('%s/*.bmp',pathDataBaru)); jumlahContohData=size(bmpContohData,1); jumlahDataBaru=size(bmpDataBaru,1);
1c. Tentukan tinggi (H) dan lebar (W) dari masing-masing gambar
Kemudian buat matriks kosong berukuran H*W sebanyak jumlah gambar contoh data
str=strcat(pathContohData,'\',bmpContohData(1).name); im=imread(str); H=size(im,1); W=size(im,2); daftarGambar=zeros(H,W,jumlahContohData);
1d. Tampilkan data contoh gambar yang tersedia
dan masukkan ke dalam matriks gambar
for i=1:jumlahContohData str=strcat(pathContohData,'\',bmpContohData(i).name); daftarGambar(:,:,i)=imread(str); subplot(5,jumlahContohData,i) imshow(str) if i==1 title('Contoh gambar wajah: ','Position',[105,0]) end end
2. Lakukan proses perhitungan untuk mendapatkan fitur dengan metode GLCM (Gray Level Co-occurence Matrix)
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 2a – 2b)
[matriksFeatureContohData, matriksFeatureDataBaru] = GLCM(... pathDataBaru, bmpDataBaru, jumlahContohData, jumlahDataBaru, daftarGambar);
Memasuki perhitungan pada fungsi GLCM
2a. Lakukan perhitungan pada masing-masing contoh data (poin 2a1 – 2a4)
for i=1:jumlahContohData . . .
2a1. Lakukan konversi menjadi gambar grayscale apabila diperlukan
img = uint8(daftarGambar(:,:,i)); if length(size(img))>2 img = rgb2gray(img); end
2a2. Lakukan proses pengambilan matriks gray level co-occurence menggunakan fungsi graycomatrix
GLCM2 = graycomatrix(img,'Offset',[2 0;0 2]);
2a3. Lakukan proses ekstraksi fitur menggunakan GLCM
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip diakhir program (poin 4)
output = ekstraksiGLCM(GLCM2);
2a4. Simpan hasil ekstraksi fitur ke dalam variabel
output = cell2mat(struct2cell(output)); matriksFeatureContohData(:, :, i) = output;
2b. Lakukan proses yang sama sesuai poin diatas pada masing-masing data baru
3. Lakukan perhitungan pada masing-masing data baru (poin 3a – 3c)
for i=1:jumlahDataBaru . . .
3a. Hitung jarak Euclidean antara vektor feature data baru dengan vektor feature dari semua contoh data
jarakEuclidean = []; for j=1:jumlahContohData tmp = (norm(matriksFeatureDataBaru(:,:,i) - matriksFeatureContohData(:,:,j))); jarakEuclidean = [jarakEuclidean tmp]; end
3b. Ambil jarak paling minimal sebagai jawaban gambar contoh data yang paling sesuai dengan gambar data baru
[~, idxMinimal] = min(jarakEuclidean);
3c. Tampilkan hasil akhir pada layar
subplot(5,jumlahContohData,sp(i)) imshow(str) title(strcat('Data ',int2str(i)),'Position',[25,0]) subplot(5,jumlahContohData,sp(i)+1) imshow(uint8(daftarGambar(:,:,idxMinimal))) title('Dikenali sebagai','Position',[75,0])
Selanjutnya adalah pembahasan tentang fungsi ekstraksiGLCM yang sudah digunakan sebelumnya (poin 4)
4a. Lakukan inisialisasi variabel yang dibutuhkan dalam perhitungan
Ada 22 nilai fitur yang digunakan disini,
dan masing-masing pengertian dapat dilihat pada komentar disebelah kanan
out.autoc = zeros(1,ukuranGLCM3); % Autocorrelation: [2] out.contr = zeros(1,ukuranGLCM3); % Contrast: matlab/[1,2] out.corrm = zeros(1,ukuranGLCM3); % Correlation: matlab out.corrp = zeros(1,ukuranGLCM3); % Correlation: [1,2] out.cprom = zeros(1,ukuranGLCM3); % Cluster Prominence: [2] out.cshad = zeros(1,ukuranGLCM3); % Cluster Shade: [2] out.dissi = zeros(1,ukuranGLCM3); % Dissimilarity: [2] out.energ = zeros(1,ukuranGLCM3); % Energy: matlab / [1,2] out.entro = zeros(1,ukuranGLCM3); % Entropy: [2] out.homom = zeros(1,ukuranGLCM3); % Homogeneity: matlab out.homop = zeros(1,ukuranGLCM3); % Homogeneity: [2] out.maxpr = zeros(1,ukuranGLCM3); % Maximum probability: [2] out.sosvh = zeros(1,ukuranGLCM3); % Sum of sqaures: Variance [1] out.savgh = zeros(1,ukuranGLCM3); % Sum average [1] out.svarh = zeros(1,ukuranGLCM3); % Sum variance [1] out.senth = zeros(1,ukuranGLCM3); % Sum entropy [1] out.dvarh = zeros(1,ukuranGLCM3); % Difference variance [4] out.denth = zeros(1,ukuranGLCM3); % Difference entropy [1] out.inf1h = zeros(1,ukuranGLCM3); % Information measure of correlation1 [1] out.inf2h = zeros(1,ukuranGLCM3); % Informaiton measure of correlation2 [1] out.indnc = zeros(1,ukuranGLCM3); % Inverse difference normalized (INN) [3] out.idmnc = zeros(1,ukuranGLCM3); % Inverse difference moment normalized [3]
4b. Lakukan proses pembuatan daftar indeks yang mengikuti pola-pola tertentu
[i,j] = meshgrid(1:ukuranGLCM1,1:ukuranGLCM2); iAux = (i+j)-1; jAux = abs(i-j)+1; iTot = (1:(2*ukuranGLCM1-1))'; jTot = (0:ukuranGLCM1-1)';
4c. Lakukan perhitungan pada masing-masing data GLCM (poin 4c1 – 4c26)
for k = 1:ukuranGLCM3 . . .
4c1. Lakukan normalisasi nilai GLCM dan hitung nilai rata-rata nya
totalGLCM = sum(sum(glcm(:,:,k))); normalisasiGLCM = glcm(:,:,k)./totalGLCM; rata2GLCM = mean(normalisasiGLCM(:));
4c2. Lakukan proses penjumlahan data GLCM yang mengikuti pola-pola tertentu menggunakan nilai normalisasi GLCM
p_x = squeeze(sum(normalisasiGLCM,2)); p_y = squeeze(sum(normalisasiGLCM,1))'; u_x = sum(sum(i.*normalisasiGLCM)); u_y = sum(sum(j.*normalisasiGLCM)); p_xplusy = zeros((2*ukuranGLCM1 - 1),1); p_xminusy = zeros((ukuranGLCM1),1); for aux = 1:max(iAux(:)) p_xplusy(aux) = sum(normalisasiGLCM(iAux==aux)); end for aux = 1:max(jAux(:)) p_xminusy(aux) = sum(normalisasiGLCM(jAux==aux)); end
4c3. Lakukan perhitungan fitur Contrast
out.contr(k) = sum(sum((abs(i-j).^2).*normalisasiGLCM));
4c4. Lakukan perhitungan fitur Dissimilarity
out.dissi(k) = sum(sum(abs(i-j).*normalisasiGLCM));
4c5. Lakukan perhitungan fitur Energy
out.energ(k) = sum(sum(normalisasiGLCM.^2));
4c6. Lakukan perhitungan fitur Entropy
out.entro(k) = -sum(sum(normalisasiGLCM.*log(normalisasiGLCM+eps)));
4c7. Lakukan perhitungan fitur Homogeneity Matlab
out.homom(k) = sum(sum(normalisasiGLCM./(1+abs(i-j))));
4c8. Lakukan perhitungan fitur Homogeneity Paper
out.homop(k) = sum(sum(normalisasiGLCM./(1+abs(i-j).^2)));
4c9. Lakukan perhitungan fitur Sum of squares: Variance
out.sosvh(k) = sum(sum(normalisasiGLCM.*((j-rata2GLCM).^2)));
4c10. Lakukan perhitungan fitur Inverse difference normalized
out.indnc(k) = sum(sum(normalisasiGLCM./(1+(abs(i-j)./ukuranGLCM1))));
4c11. Lakukan perhitungan fitur Inverse difference moment normalized
out.idmnc(k) = sum(sum(normalisasiGLCM./(1+((i-j)./ukuranGLCM1).^2)));
4c12. Lakukan perhitungan fitur Maximum probability
out.maxpr(k) = max(normalisasiGLCM(:));
4c13. Lakukan perhitungan fitur Sum average
out.savgh(k) = sum((iTot+1).*p_xplusy);
4c14. Lakukan perhitungan fitur Sum entropy
out.senth(k) = -sum(p_xplusy.*log(p_xplusy+eps));
4c15. Lakukan perhitungan fitur Sum variance
out.svarh(k) = sum((((iTot+1) - out.senth(k)).^2).*p_xplusy);
4c16. Lakukan perhitungan fitur Difference entropy
out.denth(k) = -sum(p_xminusy.*log(p_xminusy+eps));
4c17. Lakukan perhitungan fitur Difference variance
out.dvarh(k) = sum((jTot.^2).*p_xminusy);
4c18. Hitung nilai korelasi yang diperlukan dalam perhitungan selanjutnya
hxy1 = -sum(sum(normalisasiGLCM.*log(p_x*p_y' + eps))); hxy2 = -sum(sum((p_x*p_y').*log(p_x*p_y' + eps))); hx = -sum(p_x.*log(p_x+eps)); hy = -sum(p_y.*log(p_y+eps)); hxy = out.entro(k);
4c19. Lakukan perhitungan fitur Information measure of correlation 1
out.inf1h(k) = (hxy-hxy1)/(max([hx,hy]));
4c20. Lakukan perhitungan fitur Information measure of correlation 2
out.inf2h(k) = (1-exp(-2*(hxy2-hxy)))^0.5;
4c21. Lakukan perhitungan fitur Cluster Prominence
out.cprom(k) = sum(sum(normalisasiGLCM.*((i+j-u_x-u_y).^4)));
4c22. Lakukan perhitungan fitur Cluster Shade
out.cshad(k) = sum(sum(normalisasiGLCM.*((i+j-u_x-u_y).^3)));
4c23. Hitung nilai korelasi yang diperlukan dalam perhitungan selanjutnya
s_x = sum(sum(normalisasiGLCM.*((i-u_x).^2)))^0.5; s_y = sum(sum(normalisasiGLCM.*((j-u_y).^2)))^0.5; corp = sum(sum(normalisasiGLCM.*(i.*j))); corm = sum(sum(normalisasiGLCM.*(i-u_x).*(j-u_y)));
4c24. Lakukan perhitungan fitur Autocorrelation
out.autoc(k) = corp;
4c25. Lakukan perhitungan fitur Correlation paper
out.corrp(k) = (corp-u_x*u_y)/(s_x*s_y);
4c26. Lakukan perhitungan fitur Correlation Matlab
out.corrm(k) = corm/(s_x*s_y);
Hasil akhir adalah: (klik untuk perbesar gambar)
Contoh modul / source code menggunakan Matlab dapat didownload disini:
[sdm_download id=”3456″ fancy=”0″]
Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.
Leave a Reply