Algoritma GLCM (Gray-Level Co-occurence Matrix) 8


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:
ef contoh data

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:
gabor data baru


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.


Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

8 pemikiran di “Algoritma GLCM (Gray-Level Co-occurence Matrix)

    • pip Penulis

      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.

    • pip Penulis

      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

    • pip Penulis

      Algoritma ini bergantung pada fungsi yang disediakan pada fungsi matlab sehingga tidak memungkinkan untuk dikonversi ke dalam bahasa lainnya.

    • pip Penulis

      Saya baru saja mencoba untuk mengunduh modul tersebut dan sejauh ini tidak menemukan error pada saat proses pengunduhan. Silahkan dicoba kembali.