clear all
%%%%%%%%%读入测试样本
% datafile='YaleBselect20.mat';
% data=load(datafile);
% fea_Probe=data.fea;
% gnd_Probe=data.gnd;
% %%%%%%%%%读入训练样本
% datafile='YaleBselect20bc1.mat';
% data=load(datafile);
% fea_Train=data.fea;
% gnd_Train=data.gnd;
%%%%%%%%下面是一些可供选择的其它人脸库
datafile='PIE_select10_LBP.mat';
data=load(datafile);
fea_Probe=data.fea;
gnd_Probe=data.gnd;
datafile='PIE_select10buchong4_LBP.mat';
data=load(datafile);
fea_Train=data.fea;
gnd_Train=data.gnd;
% datafile='ORL_32.mat';
% data=load(datafile);
% fea=data.fea;
% gnd=data.gnd;
% load ORL_32idx1 galleryindex probeindex
% trainIdx=galleryindex(6,:);
% probeIdx=probeindex(6,:);
% fea_Train=fea(trainIdx,:);
% gnd_Train=gnd(trainIdx,:);
% fea_Probe=fea(probeIdx,:);
% gnd_Probe=gnd(probeIdx,:);
% datafile='YaleBselect20_LBP.mat';
% data=load(datafile);
% fea_Probe=data.fea;
% gnd_Probe=data.gnd;
% datafile='YaleBselect20bc1_LBP.mat';
% data=load(datafile);
% fea_Train=data.fea;
% gnd_Train=data.gnd;
% datafile='FRGC40select10.mat';
% data=load(datafile);
% fea_Probe=data.fea;
% gnd_Probe=data.gnd;
% datafile='FRGC40select10buchong1.mat';
% data=load(datafile);
% fea_Train=data.fea;
% gnd_Train=data.gnd;
nn=0;
for aa=1:100
nn=nn+1;
%%%%%%%%%调用PCA算法
options.ReducedDim=aa;
fea_Probe=fea_Probe-repmat(mean(fea_Probe),size(fea_Probe,1),1);
[eigvector, eigvalue, meanData, new_data] = PCA(fea_Train, options);
fea_Train=fea_Train-repmat(mean(fea_Train),size(fea_Train,1),1);
% %%%%%%%%调用LDA算法
% options.bPCA=1;
% options.PCARatio=0.97;
% options.ReducedDim=aa;
% [eigvector, eigvalue, Y] = LDA(fea_Train,gnd_Train,options);
%%%%%%%%%eigvector是降维矩阵,下面开始进行识别过程
fprintf(1,'-->Starting to recognition !\n');
newfea_Gallery=fea_Train*eigvector;
newfea_Probe=fea_Probe*eigvector;
gnd_Gallery=gnd_Train;
nGallery=length(gnd_Train);
nProbe=length(gnd_Probe);
if ~isfield(options,'Metric')
options.Metric='Euclidean';
end
wrongNumber=0;
for ii=1:nProbe
probe=newfea_Probe(ii,:);
for jj=1:nGallery
gallery=newfea_Gallery(jj,:);
switch lower(options.Metric)
case {lower('Euclidean')}
a(jj)=norm(probe-gallery);
case {lower('Cosin')}
pp=sum(probe.^2)^.5;
gg=sum(gallery.^2)^.5;
a(jj)=(probe*gallery')/max(1e-10,pp)*max(1e-10,gg);
otherwise
error('Do not have this metric for recognition !');
end
end
[nearest,nearest_ind]=min(a);
if gnd_Probe(ii)~=gnd_Gallery(nearest_ind)
wrongNumber=wrongNumber+1;
end
if mod(ii,100)==0
fprintf(1,'.');
end
end
fprintf(1,'\n');
%%%%%%%%%%对实验进过进行保存
% percentage(nn,3)=options.PCARatio;
percentage(nn,2)=aa;
percentage(nn,1)=1-wrongNumber/nProbe
save PIE_PCA percentage
end
% [a,b]=sort(percentage(:,1));
% percentage(b,:);