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:
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.
Mau tanya, adakah penjelasan untuk fungsi2 yang digunakan pada GLCM program diatas?
Penjelasan sudah saya sertakan pada masing-masing bagian dari skrip. Selebih dari penjelasan ini, saya hanya membagikan sesuatu yang saya pelajari dari referensi skrip. Jika anda menginginkan dasar teori dari algoritma ini, saya rasa ada berbagai macam sumber yang menjelaskan secara detail mengenai algoritma ini, yang dapat anda cari melalui google.
algoritma ini, kira2 bisa ngak digunakan untuk klasifikasi sidik jari ?
Sesuai penjelasan saya sebelumnya, algoritma ini digunakan untuk melakukan ekstraksi fitur saja. Setelah itu untuk melakukan klasifikasi memerlukan metode tambahan. Teknik yang paling umum digunakan adalah perhitungan jarak seperti Euclidean. Untuk lebih jelasnya silahkan baca kembali referensi yang anda miliki untuk mengetahui sistem klasifikasi tersebut
Kalau pake bahasa php bisa gak yaa, tolong di bantu
Algoritma ini bergantung pada fungsi yang disediakan pada fungsi matlab sehingga tidak memungkinkan untuk dikonversi ke dalam bahasa lainnya.
halo kak. link source code nya untuk aloritma sudah tidak bisa diakses lagi
Saya baru saja mencoba untuk mengunduh modul tersebut dan sejauh ini tidak menemukan error pada saat proses pengunduhan. Silahkan dicoba kembali.