Pengenalan Wajah dengan Eigenface 6


Pengenalan Pola adalah cabang kecerdasan yang menitik-beratkan pada metode pengklasifikasian objek ke dalam kelas – kelas 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 Eigenface.
Algoritma Eigenface adalah salah satu algoritma yang cukup populer dalam menyelesaikan masalah pengenalan wajah manusia, keunggulannya adalah dari segi implementasi rumus yang mudah dipahami, dan waktu eksekusi yang cukup cepat dibandingkan algoritma lainnya. Hasil yang didapatkan juga cukup baik, tetapi tidak sebaik algoritma lain yang lebih sulit untuk diimplementasikan.


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

* Lakukan proses pembelajaran pada masing-masing contoh gambar wajah yang tersedia
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini (poin 1a – 1i)

[daftarGambar,H,W,M,m,U,omega]=PerhitunganContohData('ContohData');

Memasuki perhitungan pada fungsi PerhitunganContohData (poin 1a – 1i)

1a. Ambil semua gambar contoh wajah yang tersedia

bmpContohData=dir(sprintf('%s/*.bmp',pathContohData));

1b. Tentukan tinggi (H) dan lebar (W) dari masing-masing gambar
Kemudian hitung jumlah gambar yang tersedia (M)

H=size(im,1); %Tinggi gambar
W=size(im,2); %Lebar gambar
M=size(bmpContohData,1); %Jumlah gambar

1c. Baca masing-masing gambar yang tersedia,
kemudian lakukan konversi gambar tersebut menjadi vektor gambar (vec)

for i=1:M
	str=strcat(pathContohData,'\',bmpContohData(i).name);
	daftarGambar(:,:,i)=imread(str);
	vec(:,i)=reshape(daftarGambar(:,:,i),H*W,1);
end

1d. Hitung rata-rata (m) dari masing-masing gambar dengan rumus:
m = (1/M) * E(vec)

m=sum(vec,2)/M;

1e. Hitung selisih antara gambar dengan rata-rata gambar dengan rumus:
A(i) = vec(i) – M

A=vec-repmat(m,1,M);

1f. Hitung matriks kovarian (C) dengan rumus:
C = AT * A

C=A'*A;

1g. Hitung vektor eigen (V) dan nilai eigen (lambda) dengan rumus:
Fungsi eig akan melakukan dekomposisi matriks kovarian menjadi matriks V dan lambda

[V,lambda]=eig(C);

1h. Hitung nilai eigenface dari masing-masing contoh gambar dengan rumus:
U = A * V

U=A*V;

1i. Setelah menemukan nilai eigenface,
Hitung nilai bobot (W) untuk masing-masing gambar dengan rumus:
W(i) = U(i)T * A
Kemudian masukkan semua nilai bobot pada masing-masing gambar sebagai nilai omega

omega=U'*A;

* Lakukan proses perhitungan pada data baru menggunakan nilai eigenface yang sudah ditemukan sebelumnya
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini (poin 2a – 2e)

PerhitunganDataBaru('ContohData','Databaru',daftarGambar,H,W,M,m,U,omega)

Memasuki perhitungan pada fungsi PerhitunganDataBaru

2a. Cari gambar contoh wajah yang tersedia untuk ditampilkan

bmpContohData=dir(sprintf('%s/*.bmp',pathContohData));    

2b. Cari gambar data wajah baru yang tersedia

bmpDataBaru=dir(sprintf('%s/*.bmp',pathDataBaru));

2c. Hitung jumlah gambar data baru yang tersedia

jumlahDataBaru=size(bmpDataBaru,1);

2d. Tampilkan data contoh gambar yang tersedia

for i=1:M
	str=strcat(pathContohData,'\',bmpContohData(i).name);    
	bmp=imread(str);
	
	subplot(1+jumlahDataBaru,M,i)
	imshow(bmp)
	if i==1
		title('Contoh gambar wajah: ','Position',[105,0])
	end
end

2e. Lakukan perhitungan pada masing-masing data baru (poin 2e1 – 2e6)

for i=1:jumlahDataBaru
	str=strcat(pathDataBaru,'\',bmpDataBaru(i).name);    
	tmpBmp=imread(str);
	
	bmp=reshape(tmpBmp,H*W,1);
	testBmp=double(bmp);
	. . .

2e1. Hitung selisih antara gambar dengan rata-rata gambar (A)

selisihBmp=testBmp-m;

2e2. Hitung nilai bobot (om) pada gambar yang baru dengan rumus:
om = UT * A

om=U'*selisihBmp;

* Tentukan gambar contoh yang paling baik dalam mendeskripsikan data baru
dengan cara mencari minimal dari jarak Euclidean

2e3. Hitung nilai E(k) dengan rumus:
E(k) = om(k) – omega

d=repmat(om,1,M)-omega;

2e4. Hitung jarak euclidean dari nilai E(k) yang sudah ditentukan sebelumnya

for j=1:M
	dist(j,1)=norm(d(:,j));
end

2e5. Tentukan jawaban gambar, yaitu gambar yang memiliki jarak Euclidean terendah dari semua gambar

idx=MinimalIndeks(dist);

2e6. Tampilkan pada layar

subplot(1+jumlahDataBaru,M,(i*M)+1)
imshow(str)
title(strcat('Data ',int2str(i)),'Position',[25,0])

subplot(1+jumlahDataBaru,M,(i*M)+2)
imshow(uint8(daftarGambar(:,:,idx)))
title('Dikenali sebagai','Position',[75,0])

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 *

6 pemikiran di “Pengenalan Wajah dengan Eigenface