ekstraksi fitur dan pengenalan citra wajah

13
LAPORAN RESMI PRAKTIKUM PENGOLAHAN CITRA DIGITAL MODUL 6 EKSTRAKSI FITUR DAN PENGENALAN CITRA WAJAHDisusun Oleh : LABORATORIUM COMMON COMPUTING JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS TRUNOJOYO MADURA 2011 / 2012 TGL. PRAKTIKUM : 04 Januari 2013 NAMA : Tri Cahyo Lutfinanda Amrulloh NRP : 10.04.111.00088 KELOMPOK : C-2 DOSEN : ASISTEN : Ika Nofitasari Disetujui :......./........../............../Bangkalan ASISTEN DOSEN Ika Nofitasari 090411100063

Upload: protogizi

Post on 27-Oct-2015

298 views

Category:

Documents


12 download

DESCRIPTION

EKSTRAKSI FITUR DAN PENGENALAN CITRA WAJAH

TRANSCRIPT

Page 1: Ekstraksi Fitur Dan Pengenalan Citra Wajah

LAPORAN RESMI

PRAKTIKUM

PENGOLAHAN CITRA DIGITAL

MODUL 6

“EKSTRAKSI FITUR DAN PENGENALAN CITRA WAJAH”

Disusun Oleh :

LABORATORIUM COMMON COMPUTING

JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS TRUNOJOYO MADURA

2011 / 2012

TGL. PRAKTIKUM : 04 Januari 2013

NAMA : Tri Cahyo Lutfinanda Amrulloh

NRP : 10.04.111.00088

KELOMPOK : C-2

DOSEN :

ASISTEN : Ika Nofitasari

Disetujui :......./........../............../Bangkalan

ASISTEN DOSEN

Ika Nofitasari

090411100063

Page 2: Ekstraksi Fitur Dan Pengenalan Citra Wajah

BAB I

PENDAHULUAN

1.1 Latar Belakang

Dalam proses pengenalan citra wajah diperlukan beberapa cara agar hasil yang

diinginkan bisa tercapai dengan sempurna. Ada beberapa langkah – langkah

yang harus di penuhi dalam memproses pengenalan citra wajah. Antara lain

dengan mengambil beberapa contoh citra yang akan digunakan untuk testing,

pemrosesan zero mean dan masih banyak langkah yang harus dilakukan yang

selebihnya akan di bahas pada modul ini.

1.2 Tujuan

Tujuan mahasiswa mengikuti praktikum modul 6 ini adalah :

1. Mahasiswa dapat memahami ekstraksi fitur

2. Mahasiswa dapat membuat program pengenalan citra wajah menggunakan

matlab

Page 3: Ekstraksi Fitur Dan Pengenalan Citra Wajah

BAB II

DASAR TEORI

Modul 6 menggunakan hasil penyiapan dan pemisahan data yang dilakukan pada

modul 5. Pada modul 6 ini dilakukan ekstraksi fitur menggunakan Principal

Component Analysis (PCA) dan pengukuran kemiripan menggunakan Euclidian

Distance. Sebelum masuk pada penjelesan ekstraksi fitur menggunakan PCA,

maka dalam modul ini dijelaskan terlebih dahulu pemodalan pada PCA. Sebelum

ekstraksi fitur, data pelatihan matrik 2 dimensi dirubah menjadi matrik baris 1

dimensi. Jika dimensi masing-masing citra adalah ‘150x110’, maka dirubah

menjadi ‘1x165.000’. Jika jumlah data sampel yang digunakan adalah 100,

masing-masing sampel mempunyai 3 pose yang berbeda, maka jumlah data

sampel untuk pelatihan adalah sebanyak 300. Sehingga struktur matrik data

pelatihan yang baru berubah dimensinya menjadi dalam bentuk array dengan

ukuran ‘300x165.000’. Dalam contoh ini hasil pembentukan matrik tersebut

hanya dalam variabel memory dengan nama ‘TrainingMatric’ sebagaimana

terlihat pada Gambar 6.1 berikut ini :

TrainingMatric{1,1} F(1,1) F(1,2) F(1,3) F(1,4) . . . F(1,165.000) TrainingMatric{1,2} F(2,1) F(2,2) F(2,3) F(2,4) . . . F(2,165.000) TrainingMatric{1,3} F(3,1) F(3,2) F(3,3) F(2,4) . . . F(3,165.000)

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . TrainingMatric{100,1} F(298,1) F(298,2) F(298,3) F(298,4) . . . F(298,165.000) TrainingMatric{100,2} F(299,1) F(299,2) F(299,3) F(299,4) . . . F(299,165.000) TrainingMatric{100,3} F(300,1) F(300,2) F(300,3) F(300,4) . . . F(300,165.000)

Gambar 2.1. Struktur Array Matrik Data Pelatihan

2.1 Ekstraksi Fitur Menggunakan PCA

Setelah diperoleh data matrik tersebut, proses selanjutnya adalah melakukan

ekstrakasi fitur menggunakan PCA. Adapun proses PCA dapat dituliskan

menggunakan algoritma berikut ini

a. Hitung nilai rata-rata citra wajah menggunakan persamaan

m

kf

m

kf

m

kfm

k

n

m

k

m

k 1

,1

1

2,1

1

1,1 )()()(

(2.1)

Page 4: Ekstraksi Fitur Dan Pengenalan Citra Wajah

b. Tentukan zero mean menggunakan persamaan berikut

whkf ,)( (2.2)

c. Hitung Covarian matrik menggunakan persamaan berikut

T

mC *

1

1

(2.3)

d. Tentukan nilai eigen value dan eigen vector menggunakan persamaan

0)*(

0)*(

0)*(

0*)(

0**

**

CI

IC

XIC

XC

XXC

XXC

(2.4)

e. Urutkan nilai eigen value secara decreasing dan nilai eigen vector

mengikuti

f. Tentukan matrik proyeksi menggunakan persamaan berikut

PV T *1 (2.5)

P merupakan nilai eigenvector yang teah terurut

g. Hitung matrik bobot menggunakan persamaan berikut

T

nm VkfW *)( , (2.6)

Code program dalam matlab untuk melakukan konversi matrik data pelatihan

dan ekstraksi fitur menggunakan PCA adalah sebagaimana berikut ini :

function [MatrikBobot, MatrikProyeksi,eigvector,Average,ZeroMean] =

TrainingProcess(ImageTraining);

[nClassTotal nMemberClassTotal]=size(ImageTraining);

[Height Width]=size(ImageTraining{1,1});

TrainingMatric=[];

%% Konversi ke matrik 1D

Number=0;

h = waitbar(0,'Sistem Melakukan Process Konversi ke Matrik 1D dan Training PCA . . . .');

for j=1:nClassTotal

for k=1:nMemberClassTotal

Flat=reshape(ImageTraining{j,k},1,Height*Width);

TrainingMatric=[TrainingMatric;Flat];

Number=Number+1;

waitbar(Number/(nClassTotal*nMemberClassTotal));

end

end

%% Training PCA

TrainingMatric=double(TrainingMatric);

Page 5: Ekstraksi Fitur Dan Pengenalan Citra Wajah

[HeightTrainingMatric, WidthTrainingMatric]=size(TrainingMatric)

Average = repmat(mean(TrainingMatric), HeightTrainingMatric,1);

ZeroMean=TrainingMatric-Average;

CovMatric =ZeroMean*ZeroMean';

if det(CovMatric)<0.000000001

[eigvector, eigvalue] = svd(CovMatric);

eigvalue=diag(eigvalue);

else

[eigvector, eigvalue] = eig(CovMatric);

eigvalue = diag(eigvalue);

[junk, index] = sort(-eigvalue);

eigvalue = eigvalue(index);

eigvector = eigvector(:, index);

end

xMatrikProyeksi = ZeroMean'*eigvector;

yMatrikProyeksi = xMatrikProyeksi *diag(1./(sum(xMatrikProyeksi.^2).^0.5));

MatrikProyeksi =transpose(xMatrikProyeksi);

MatrikBobot = TrainingMatric*transpose(MatrikProyeksi);

close(h)

Pada code program diatas, hasil proses disimpan dalam 5 veriabel yang

mempunyai fungsi berbeda, diantarnya adalah MatrikBobot, MatrikProyeksi,

eigvector, Averagei dan ZeroMean. Output dari program tersebut akan

digunakan sebagai input pada proses pengukuran kemiripan.

2.2 Pengukuran Kemiripan

Dua buah output dari ekstraksi fitur yang penting adalah MatrikBobot dan

MatrikProyeksi. MatrikBobot digunakan sebagai referensi untuk mengukur

kemiripan dari hasil proyeksi matrik ujicoba setelah diproyeksikan dengan

MatrikProyeksi output PCA. Pengukuran kemiripannya menggunakan

persamaan yang sederhana, yaitu ‘Euclidian Distance’ sebagaimana dalam

persamaan berikut ini:

m

i

n

j

jiji YXd1 1

,,

(2.7)

Code untuk melakukan perhitungan menggunakan Persamaan (2.7) adalah

sebagaimana berikut ini :

function [Kelas, Urutan] = SmEuclidDistance(TrainingWeightMatric,

MatrikBobotUjiCoba,nSamplePerClass); [HeightTrainingWeightMatric, WidthTrainingWeightMatric]=size(TrainingWeightMatric); Distance = ones(1,HeightTrainingWeightMatric); for k=1 : HeightTrainingWeightMatric EucDist= (TrainingWeightMatric(k,:) - MatrikBobotUjiCoba(1,:)); EucDist=sum(EucDist.^2); EucDist=EucDist^0.5; Distance(1,k)=EucDist;

Page 6: Ekstraksi Fitur Dan Pengenalan Citra Wajah

end; [aMin, Urutan]=min(Distance); Kelas=ceil(Urutan/nSamplePerClass); Urutan=mod(Urutan,nSamplePerClass); if Urutan==0 Urutan=nSamplePerClass end

Sebelum diukur kemiripannya menggunakan Persamaan (6.8), data ujicoba

matrik 2D dikonversi dulu menjadi matrik 1D.

%% Training load ImageTraining.mat FolderHasil='D:\CItra Digital\Praktikum\Hasil Process\'; [nClassTotalTraining nMemberClassTotalTraining]=size(ImageTraining); [MatrikBobot, MatrikProyeksi,eigvector,Average,ZeroMean] =

TrainingProcess(ImageTraining);

%% Testing load ImageTesting.mat [nClassTotalTesting nMemberClassTotalTesting]=size(ImageTesting); [Height Width]=size(ImageTesting{1,1}); Number=0; h = waitbar(0,'Sistem Melakukan Process Konversi ke Matrik 1D dan Training PCA . . . .'); TotalBenar=0; TotalSalah=0 for j=1:nClassTotalTesting for k=1:nMemberClassTotalTesting HasilProyeksiTest=reshape(ImageTesting{j,k},1,Height*Width); HasilProyeksiTest=double(HasilProyeksiTest)* transpose(MatrikProyeksi); %% Bandingkan Dengan Matrik Bobot dengan [Kelas, Urutan] = SmEuclidDistance(MatrikBobot,

HasilProyeksiTest,nMemberClassTotalTraining); %% Simpan hasil pengenalan CitraTes=ImageTesting{j,k}; CitraHas=ImageTraining{Kelas,Urutan}; Hasil=[CitraTes CitraHas]; if Kelas==j TotalBenar=TotalBenar+1 NamaHasil=[FolderHasil 'Benar-KelasKe-' num2str(j) ' PoseKe-' num2str(k) ' Match

PoseKe-' num2str(Urutan) '.jpg']; else TotalSalah=TotalSalah+1 NamaHasil=[FolderHasil 'Salah-KelasKe-' num2str(j) ' PoseKe-' num2str(k) '

MatchKelasKe-' num2str(Kelas) ' PoseKe-' num2str(Urutan) '.jpg']; end imwrite(Hasil,NamaHasil); Number=Number+1; waitbar(Number/(nClassTotalTesting*nMemberClassTotalTesting)); end end close(h)

Page 7: Ekstraksi Fitur Dan Pengenalan Citra Wajah

%% Prosentase Dikenali dan Tidak Dikenali ProsenSalah=(TotalSalah/(TotalSalah+TotalBenar))*100; ProsentBenar=(TotalBenar/(TotalSalah+TotalBenar))*100;

Hasil proses pengenalan disimpan secara berpasangan, dan diberikan nama

sesuai dengan hasil pengukuran kemiripan. Untuk data ujicoba yang dikenali,

diberi nama awal file ‘Benar’ diikuti dengan pasangan yang sesuai, misalnya

‘Benar-KelasKe-6 PoseKe-2 Match PoseKe-1.JPG’. Sedangkan untuk data

ujicoba yang salah hasilnya, diberi nama awal file ‘Salah’ diikuti dengan

urutan sampel dan pose yang diuji, dan diikuti dengan kata ‘MatchKelasKe’

dan ‘PoseKe’. Sebagai contoh nama file yang salah dalam pengukuran

kemiripannya adalah sebagaimana berikut ’Salah-KelasKe-2 PoseKe-2

MatchKelasKe-62 PoseKe-2.JPG’.

Page 8: Ekstraksi Fitur Dan Pengenalan Citra Wajah

BAB III

IMPLEMENTASI

1. Gunakan data citra wajah ORL untuk melakukan pengenalan, data pelatihan

yang digunakan 4 citra pada masing-masing kelas dan sisanya digunakan

ujicoba

2. Tampilkan hasil pengenalan setiap kelas dalam bentuk grafik untuk

keseluruhan data sampel

Jawaban

1. Set Data Training

function [UrutanPoseTraining UrutanPoseTesting] =

SetDataTrainTest(Sample, IndekTraining) UrutanPoseTraining=IndekTraining; c=ismember(Sample,UrutanPoseTraining); UrutanPoseTesting=[]; for j=1:length(Sample); if c(j)==0; UrutanPoseTesting=[UrutanPoseTesting j]; end end

Pengukuran Kemiripan

function [Kelas, Urutan] =

SmEuclidDistance(TrainingWeightMatric,

MatrikBobotUjiCoba,nSamplePerClass); [HeightTrainingWeightMatric,

WidthTrainingWeightMatric]=size(TrainingWeightMatric); Distance = ones(1,HeightTrainingWeightMatric); for k=1 : HeightTrainingWeightMatric EucDist= (TrainingWeightMatric(k,:) -

MatrikBobotUjiCoba(1,:)); EucDist=sum(EucDist.^2); EucDist=EucDist^0.5; Distance(1,k)=EucDist; end; [aMin, Urutan]=min(Distance); Kelas=ceil(Urutan/nSamplePerClass); Urutan=mod(Urutan,nSamplePerClass); if Urutan==0 Urutan=nSamplePerClass end

Training Proses

function [MatrikBobot,

MatrikProyeksi,eigvector,Average,ZeroMean] =

TrainingProcess(ImageTraining);

Page 9: Ekstraksi Fitur Dan Pengenalan Citra Wajah

[nClassTotal nMemberClassTotal]=size(ImageTraining); [Height Width]=size(ImageTraining{1,1}); TrainingMatric=[]; %% Konversi ke matrik 1D Number=0; h = waitbar(0,'Sistem Melakukan Process Konversi ke Matrik 1D

dan Training PCA . . . .'); for j=1:nClassTotal for k=1:nMemberClassTotal Flat=reshape(ImageTraining{j,k},1,Height*Width); TrainingMatric=[TrainingMatric;Flat]; Number=Number+1; waitbar(Number/(nClassTotal*nMemberClassTotal)); end end

%% Training PCA TrainingMatric=double(TrainingMatric); [HeightTrainingMatric,

WidthTrainingMatric]=size(TrainingMatric) Average = repmat(mean(TrainingMatric),

HeightTrainingMatric,1); ZeroMean=TrainingMatric-Average; CovMatric =ZeroMean*ZeroMean';

if det(CovMatric)<0.000000001 [eigvector, eigvalue] = svd(CovMatric); eigvalue=diag(eigvalue); else [eigvector, eigvalue] = eig(CovMatric); eigvalue = diag(eigvalue); [junk, index] = sort(-eigvalue); eigvalue = eigvalue(index); eigvector = eigvector(:, index); end

xMatrikProyeksi = ZeroMean'*eigvector; yMatrikProyeksi = xMatrikProyeksi

*diag(1./(sum(xMatrikProyeksi.^2).^0.5)); MatrikProyeksi =transpose(xMatrikProyeksi); MatrikBobot = TrainingMatric*transpose(MatrikProyeksi); close(h)

Pembentukan data training

%% Set Data Training Sample=(1:10); IndekTraining=[1 2 3 4]; [UrutanPoseTraining UrutanPoseTesting] =

SetDataTrainTest(Sample, IndekTraining);

%% Pembentukan data training load MatP.mat [nClassTotal nMemberClassTotalTesting]=size(MatP); nMemberClassTotal=length(UrutanPoseTraining); h = waitbar(0,'Pembentukan Data Training . . . .'); Number = 0;

Page 10: Ekstraksi Fitur Dan Pengenalan Citra Wajah

for k=1:nClassTotal for j=1:nMemberClassTotal ImageTraining{k,j}=MatP{k,UrutanPoseTraining(j)}; Number=Number+1; waitbar(Number/(nClassTotal*nMemberClassTotal)); end end

%% Simpan data training save ImageTraining ImageTraining; close(h);

%% Pembentukan data testing load MatP.mat nMemberClassTotal=length(UrutanPoseTesting); h = waitbar(0,'Pembentukan Data Testing . . . .'); Number = 0; for k=1:nClassTotal for j=1:nMemberClassTotal ImageTesting{k,j}=MatP{k,UrutanPoseTesting(j)}; Number=Number+1; waitbar(Number/(nClassTotal*nMemberClassTotal)); end end

%% Simpan Data Testing save ImageTesting ImageTesting; close(h);

Testing Proses

%% Training load ImageTraining.mat FolderHasil='H:\KULIAH\SEMESTER V\PRAK. PENGOLAHAN CITRA

DIGITAL\Citra Digital\Hasil Process\'; [nClassTotalTraining

nMemberClassTotalTraining]=size(ImageTraining);

[MatrikBobot, MatrikProyeksi,eigvector,Average,ZeroMean] =

TrainingProcess(ImageTraining);

%% Testing load ImageTesting.mat [nClassTotalTesting

nMemberClassTotalTesting]=size(ImageTesting); [Height Width]=size(ImageTesting{1,1}); Number=0; h = waitbar(0,'Sistem Melakukan Process Konversi ke Matrik 1D

dan Training PCA . . . .'); TotalBenar=0; TotalSalah=0; for j=1:nClassTotalTesting for k=1:nMemberClassTotalTesting

HasilProyeksiTest=reshape(ImageTesting{j,k},1,Height*Width); HasilProyeksiTest=double(HasilProyeksiTest)*

Page 11: Ekstraksi Fitur Dan Pengenalan Citra Wajah

transpose(MatrikProyeksi);

%% Bandingkan Dengan Matrik Bobot dengan [Kelas, Urutan] = SmEuclidDistance(MatrikBobot,

HasilProyeksiTest,nMemberClassTotalTraining); %% Simpan hasil pengenalan CitraTes=ImageTesting{j,k}; CitraHas=ImageTraining{Kelas,Urutan}; Hasil=[CitraTes CitraHas];

if Kelas==j TotalBenar=TotalBenar+1 NamaHasil=[FolderHasil 'Benar-KelasKe-' num2str(j)

' PoseKe-' num2str(k) ' Match PoseKe-' num2str(Urutan)

'.jpg']; else TotalSalah=TotalSalah+1 NamaHasil=[FolderHasil 'Salah-KelasKe-' num2str(j)

' PoseKe-' num2str(k) ' MatchKelasKe-' num2str(Kelas) '

PoseKe-' num2str(Urutan) '.jpg']; end imwrite(Hasil,NamaHasil); Number=Number+1;

waitbar(Number/(nClassTotalTesting*nMemberClassTotalTesting)); end end close(h)

%% Prosentase Dikenali dan Tidak Dikenali ProsenSalah=(TotalSalah/(TotalSalah+TotalBenar))*100; ProsentBenar=(TotalBenar/(TotalSalah+TotalBenar))*100;

Running Program:

Page 12: Ekstraksi Fitur Dan Pengenalan Citra Wajah

Hasil dari proses : Tersimpan di folder H:\KULIAH\SEMESTER V\PRAK.

PENGOLAHAN CITRA DIGITAL\Citra Digital\Hasil Process

Menampilkan prosentase kebenaran dan kesalahan pencocokan citra :

2. Menampilkan data per kelas

Page 13: Ekstraksi Fitur Dan Pengenalan Citra Wajah

BAB V

PENUTUP

5.1 Kesimpulan

Pada saat proses pencocokan citra wajah yang dilakukan banyak atau tidak

cocoknya citra wajah tersebut tergantung dari jumlah data training dan data

testing yang digunakan. Semua proses yang dilakukan harus berurutan karena

apabila satu proses dilewatkan maka ada satu file yang tidak akan terbentuk

dan proses selanjutnya tidak akan berjalan dengan sempurna.

5.2 Saran

Pada saat melakukan pengetesan source code harus di perhatikan destinasi

folder yang di tuju. Karena kesalahan destinasi folder akan menyebabkan

program eror dan tidak dapat berjalan dengan baik.