clear all
close all
clc
img_all=zeros(23*28,400);
file=dir('E:\att_faces\*.jpg');
for n=1:length(file)
img=imread(strcat('E:\att_faces\',file(n).name));
img=double(img);
for m=1:92/4
for p=1:112/4
img_all((p-1)*92+m,n)=img(4*p,4*m);
end
end
end
Ni=10;
I=40;
k=0;
K=60;
mu=zeros(2507,I);
M=zeros(2507,1);
A=zeros(2507,200);
for i=1:I
for j=1:Ni/2
mu(:,i)=mu(:,i)+img_all(:,(i-1)*Ni+j);
end
mu(:,i)=mu(:,i)/Ni*2;
M=M+mu(:,i);
end
M=M/I;
for i=1:I
for j=1:5
A(:,(i-1)*Ni/2+j)=img_all(:,10*(i-1)+j)-M;
end
end
[U,D]=eig(A'*A);
[lamuda index]=sort(diag(D),'descend');
for h=1:K
Wpca(:,h)=A*U(:,index(h))/norm(A*U(:,index(h)));
end
SB=(mu(:,1)-M)*(mu(:,1)-M)'/I;
for i=2:40
SB=SB+(mu(:,i)-M)*(mu(:,i)-M)'/I;
end
SW=zeros(2507,2507);
for i=1:I
for j=1:5
SW=SW+(img_all(:,(i-1)*Ni+j)-mu(:,i))*(img_all(:,(i-1)*Ni+j)-mu(:,i))'/200;
end
end
SB=Wpca'*SB*Wpca;
SW=Wpca'*SW*Wpca;
[V1 D1]=eig(SB,SW);
[lamuda1 index1]=sort(diag(D1),'descend');
for h=1:K
Wfld(:,h)=V1(:,index1(h))/norm(V1(:,index1(h)));
end
Wopt=(Wfld'*Wpca')';
y=zeros(60,200);
yi=zeros(60,40);
for i=1:I
yi(1:K,i)=Wopt'*(mu(:,i)-M);
end
for q=1:I
for j=1:5
y(1:K,5*(q-1)+j)=Wopt'*(img_all(:,(q-1)*Ni+j+5)-M);
for i=1:I
l(i)=norm(y(1:K,5*(q-1)+j)-yi(1:K,i));
end
[in index1]=sort(l,'ascend');
if index1(1)==q
k=k+1;
end
end
end
TP=k/200