Senin, 09 Januari 2017

Aplikasi Eigenfacae for Face Detector



Target Aplikasi




Tampilan Menuutama:




function tampilanutama_OpeningFcn(hObject, eventdata, handles, varargin)
I=imread('matlab.png');
imshow(I);

guidata(hObject, handles);

function pushbutton1_Callback(hObject, eventdata, handles)
AplikasiUtama;

function pushbutton2_Callback(hObject, eventdata, handles)
tentangaplikasi;

function pushbutton3_Callback(hObject, eventdata, handles)
profil;



tentangaplikasi




profil


AplikasiUtama



Untuk menjalankan aplikasi cukup klik start camera...
Lalu tekan capture...maka objek akan tercapture dan secara automatis terhitung nilai RGB histogramnya....

Untuk lebih akurat sebaiknya di mainkan tombol zoom maupun fungsi crop yang disediakan...atau jika ingin default ....tombol tersebut bisa diabaikan ...


Tombol simpan untuk menyimpan citra yang dihasilkan kamera...
misal tulis foto1.jpg
maka akan tersimpan dengan nama foto1.jpg
NB Gunakan ektensi untuk menyimpan citranya....


Bisa juga aplikasi pengujian dilakukan dengan cara pilih citra ...artinya kita menggunakan citra yang sudah ada sebelumnya....

Gunakan tombol Browse.....


dan terahir tekan tombol Cek Gambar

maka akan dihasilkan nilai eigenface terendah berikut nama si pemilik foto ybs...

Di aplikasi di atas didapat nilai index ke 5 dengan nama "E" dan nilai eigenface : 0.0027814
ini adalah nilai eigenface terendahnya.....

nilai ini didapat dari data generate atau master yang diinputkan sesui rumus Generate yang didapat :

N=200  ; % image size???
M=4  ;% number faces
%% mic1
image(1)={'1.jpg'};%???
nama(1)={'A'};
    image(2)={'2.jpg'};
    nama(2)={'B'};
image(3)={'3.jpg'};
nama(3)={'C'};
    image(4)={'4.jpg'};
    nama(4)={'D'};
image(5)={'5.jpg'};
nama(5)={'E'};
    image(6)={'6.jpg'};
    nama(6)={'F'};
image(7)={'7.jpg'};
nama(7)={'G'};
    image(8)={'8.jpg'};
    nama(8)={'H'};
image(9)={'9.jpg'};
nama(9)={'I'};
    image(10)={'10.jpg'};
    nama(10)={'J'};
image(11)={'11.jpg'};
nama(11)={'K'};
    image(12)={'12.jpg'};
    nama(12)={'L'};
image(13)={'13.jpg'};
nama(13)={'M'};
    image(14)={'14.jpg'};
    nama(14)={'N'};
image(15)={'15.jpg'};
nama(15)={'O'};
    image(16)={'16.jpg'};
    nama(16)={'P'};
image(17)={'17.jpg'};
nama(17)={'Q'};
    image(18)={'18.jpg'};
    nama(18)={'R'};
image(19)={'19.jpg'};
nama(19)={'S'};
    image(20)={'20.jpg'};
    nama(20)={'T'};
image(21)={'21.jpg'};
nama(21)={'U'};
    image(22)={'22.jpg'};
    nama(22)={'V'};
image(23)={'23.jpg'};
nama(23)={'W'};
    image(24)={'24.jpg'};
    nama(24)={'X'};
image(25)={'25.jpg'};
nama(25)={'Y'};
    image(26)={'26.jpg'};
    nama(26)={'Z'};
image(27)={'27.jpg'};
nama(27)={'AA'};
    image(28)={'28.jpg'};
    nama(28)={'BB'};
image(29)={'29.jpg'};
nama(29)={'CC'};
    image(30)={'30.jpg'};
    nama(30)={'DD'};
image(31)={'31.jpg'};
nama(31)={'EE'};
    image(32)={'32.jpg'};
    nama(32)={'FF'};
image(33)={'33.jpg'};
nama(33)={'GG'};
    image(34)={'34.jpg'};
    nama(34)={'HH'};
image(35)={'35.jpg'};
nama(35)={'II'};
    image(36)={'36.jpg'};
    nama(36)={'JJ'};
image(37)={'37.jpg'};
nama(37)={'KK'};
    image(38)={'38.jpg'};
    nama(38)={'LL'};
image(39)={'39.jpg'};
nama(39)={'MM'};
    image(40)={'40.jpg'};
    nama(40)={'NN'};
image(41)={'41.jpg'};
nama(41)={'OO'};
    image(42)={'42.jpg'};
    nama(42)={'PP'};
image(43)={'43.jpg'};
nama(43)={'QQ'};
    image(44)={'44.jpg'};
    nama(44)={'RR'};
image(45)={'45.jpg'};
nama(45)={'SS'};
    image(46)={'46.jpg'};
    nama(46)={'TT'};
image(47)={'47.jpg'};
nama(47)={'UU'};
    image(48)={'48.jpg'};
    nama(48)={'VV'};
image(49)={'49.jpg'};
nama(49)={'WW'};
    image(50)={'50.jpg'};
    nama(50)={'XX'};
 
 
    z=[];
    for i=1:20
        img=image(i);
        im=cell2mat(img);
        [path]=['TrainDatabase/' im];
        [namanya]=['Nama ' cell2mat(nama(i)) ':' path];
        myimage= imread(path,'jpg');
        myimage=rgb2gray(myimage);
        myimage=imresize(myimage,[N N] );
        st.data{i}=myimage;
        st.names{i} = nama(i);
        st.path{i} = path;
       % figure(i),imshow(myimage,'Initialmagnification','fit');title(namanya);
    end
%figure(6),imshow(z,'Initialmagnification','fit');;title('ALL DATA')
save classFile st;
handles.st=st;
guidata(hObject, handles);
msgbox('Sukses Generate Data Training...','Generate',help);



dalam implementasinya....."E" bisa kita tuliskan dengan nama sesungguhnya misalkan EKO Nurcahyo dsb dsb...

ada baiknya.....gunakan beberaa foto untuk 1 orang agar kita bisa merekam banyak gaya......
dengan syarat background dan pencahayaan yang diproses adalah sama......

SO gunakan fitur kamera dan capture yang disediakan aplikasi ini untuk mendapatkan gambar trainingnya.....



misalkan si ADI ada 10 gambar maka rumus generate nya adalah sbb:

image(1)={'1.jpg'};%???
nama(1)={'ADI GANTENG'};
    image(2)={'2.jpg'};
    nama(2)={'ADI GANTENG'};
image(3)={'3.jpg'};
nama(3)={'ADI GANTENG'};
    image(4)={'4.jpg'};
    nama(4)={'ADI GANTENG'};
image(5)={'5.jpg'};
nama(5)={'ADI GANTENG'};
    image(6)={'6.jpg'};
    nama(6)={'ADI GANTENG'};
image(7)={'7.jpg'};
nama(7)={'ADI GANTENG'};
    image(8)={'8.jpg'};
    nama(8)={'ADI GANTENG'};
image(9)={'9.jpg'};
nama(9)={'ADI GANTENG'};
    image(10)={'10.jpg'};
    nama(10)={'ADI GANTENG'};

dengan asumsi si "ADI GANTENG" memiliki 10 image citra berurutan dengan aneka gaya...dan  dengan nama image 1.jpg, 2.jpg 3.jpg 4.jpg 5.jpg 6.jpg 7.jpg 8.jpg 9.jpg 10.jpg

selanjutnya untuk 10 citra orang kedua dst...dst...


 Setelah semua citra disusun dan didapatkan...maka masukkan ke folder

Traindatabase contoh:


OK Mudah yaaa.....


Adapun code untuk CEK GAMBAR adalah sbb:

load classFile;
whos
disp('==================');
I=get(handles.axesGambar,'Userdata');
               
y=st.data;% 1x50            51200  cell
p=size(y,2)

dt=cell2mat(y(1,1));        %50x50             2500  uint8
M=size(y,2);%JUMLAH CITRA
N=size(dt,1);%UKURAN FILE
avImg=zeros(N);
%% compute mean
for k=1:M
    st.data{k} = im2single(st.data{k});
    avImg   =avImg  + (1/M)*st.data{k};
end

set(handles.figure1,'CurrentAxes',handles.gbrHistogram);
imshow(avImg,'Initialmagnification','fit');title('average')

%% normalize (remove mean)
for k=1:M
    st.dataAvg{k}  = st.data{k} -avImg;
end

set(handles.figure1,'CurrentAxes',handles.gbrHistogram2);
z  = [ st.dataAvg{1}  st.dataAvg{2}   st.dataAvg{5}  ; st.dataAvg{3}     st.dataAvg{4}  st.dataAvg{6}];
imshow(z,'Initialmagnification','fit');;title('z average')


%% generate A = [ img1(:)  img2(:) ...  imgM(:) ];
A = zeros(N*N,M);% (N*N)*M   2500*4
for k=1:M
    A(:,k) = st.dataAvg{k}(:);
end
% covariance matrix small dimension (transposed)
C = A'*A;
set(handles.figure1,'CurrentAxes',handles.imgCamera);
imagesc(C);title('covariance')

%% eigen vectros  in small dimension
[   Veigvec,Deigval ]  = eig(C);% v M*M e M*M only diagonal 4 eigen values
% eigan face in large dimension  A*veigvec is eigen vector of Clarge
Vlarge = A*Veigvec;% 2500*M*M*M  =2500 *M
% reshape to eigen face
eigenfaces=[];
for k=1:M
    c  = Vlarge(:,k);
    eigenfaces{k} = reshape(c,N,N);
end
x=diag(Deigval);
[xc,xci]=sort(x,'descend');% largest eigenval
%z  = [ eigenfaces{xci(1)}  eigenfaces{xci(2)}   eigenfaces{xci(3)}  eigenfaces{xci(4)}     eigenfaces{xci(5)}   eigenfaces{xci(6)}     eigenfaces{xci(7)}      eigenfaces{xci(8)}  eigenfaces{xci(9)}  eigenfaces{xci(10)}     eigenfaces{xci(11)}     eigenfaces{xci(12)}     eigenfaces{xci(13)}     eigenfaces{xci(14)}     eigenfaces{xci(15)}      eigenfaces{xci(16)}    eigenfaces{xci(17)}      eigenfaces{xci(18)}     eigenfaces{xci(19)}    eigenfaces{xci(20)}];
z=[];
MMM=eigenfaces{xci(1)};%200x200 double
whos MMM
M

for k=1:M
    z=[z eigenfaces{xci(k)} ];
end

set(handles.figure1,'CurrentAxes',handles.gbrHistogram3);
imshow(z,'Initialmagnification','fit');;title('eigen value')

%% weights
nsel=M;%50% select  eigen faces
for mi=1:M  % image number
  for k=1:nsel   % eigen face for coeff number
    wi(mi,k) =   sum(A(:,mi).* eigenfaces{xci(k)}(:)) ;
  end
end

testFaceMic = I;
testFaceMic  =rgb2gray(testFaceMic);
testFaceMic = imresize(testFaceMic,[N N]);
testFaceMic   =  im2single(testFaceMic);
%testFaceMic =  st.data{1}; test
set(handles.figure1,'CurrentAxes',handles.axesCompare);
imshow(testFaceMic,'Initialmagnification','fit'); title('Hasil Baca')
Aface = testFaceMic(:)-avImg(:); % normilized face
for(tt=1:nsel)
  wface(tt)  =  sum(Aface.* eigenfaces{xci(tt)}(:)) ;
end


% compute distance
min=10850;%%0
index=1;
for mi=1:M
    fsumcur=0;
    for(tt=1:nsel)
        fsumcur = fsumcur + (wface(tt) -wi(mi,tt)).^2;
    end
    diffWeights(mi) =   sqrt( fsumcur);
    if min>diffWeights(mi)
       hh=['COMP=' num2str(mi) '=' num2str(min) '=' num2str(diffWeights(mi))];
       disp(hh);
       min=diffWeights(mi);
       index=mi;
    end  
end

diffWeights

% if min>10
%     disp('NONE');
% end  

diffWeights
disp('gambar ke ');
index
min


d=st.data;
na=st.names;
pa=st.path;

dd=d(1,1);
ddd=cell2mat(dd);
imshow(ddd)


for i=1:M
    xnm=na(1,i);
        nama(i,:)=cell2mat(cellfun(@(x) cell2mat(x),xnm,'un',0));
    xpath=pa(1,i);
        path(i,:)=xpath;%cell2mat(cellfun(@(x) cell2mat(x),xpath,'un',0))
    xdata=d(1,i);
    mdata=cell2mat(xdata);
    data(:,:,i)=mdata;
end

imshow(data(:,:,index));
disp('++++++++++++++++++1');% 0.6431
data(index)
disp('++++++++++++++++++2');%path 'TrainDatabase/20.jpg'
path(index)
disp('++++++++++++++++++3');%nama T
nama(index)

set(handles.edNama,'String',nama(index));
set(handles.edIndex,'String',num2str(index));
set(handles.edEigen,'String',num2str(min));

proyek=guidata(gcbo);
set(proyek.figure1,'CurrentAxes',proyek.gbrHistogram3);
I=get(proyek.axesCompare,'Userdata');
imshow(data(index));


hmm....semakin menarik saja.......ayuh lanjutkan......