📄 pca_2d.m
字号:
person=40;
number=1;
dd=5;
for i=1:person
for j=1:number
[T{i,j},map]=imread(strcat('e:\orl\',num2str(i),'\',num2str(j),'.bmp'));
a=size(T{i,j});
end
end
%以下得到全部训练样本平均值
TOTAL=size(a(1),a(2));
for i=1:person
for j=1:number
TOTAL=double(TOTAL)+double(T{i,j});
end
end
TOTAL=TOTAL/(person*number);
a=size(TOTAL);
%求协方差矩阵
R=zeros(a(2),a(2));
for i=1:person
TEMP=zeros(a(2),a(2));
for j=1:number
N2{i,j}=double(T{i,j})-double(TOTAL);
TEMP=TEMP+(N2{i,j})'*N2{i,j};
end
R=R+TEMP;
end
R=R/(person*number);
[pc,latent,explained]=pcacov(R);%pc为特征值 latent为对应的特征矢量
U=pc(:,1:dd);
M=U;
for i=1:person
for j=1:number
T2{i,j}=(double(T{i,j})-double(TOTAL))*M;
end
end
total1=0;
total2=0;
for i=1:person
for j=number+1:10
[T1,map]=imread(strcat('e:\orl\',num2str(i),'\',num2str(j),'.bmp'));
f=(double(T1)-double(TOTAL))*M;
%求到各个样本的距离
for x=1:person
for y=1:number
distance(x,y)=0.0;
dd1=0;
TEMP1=f-T2{x,y};
for m=1:a(1)
for n=1:dd
dd1=dd1+TEMP1(m,n).^2;
end
end
dd1=sqrt(dd1);
distance(x,y)=dd1;
end
end
%计算识别率
minnum=distance(1,1);
flag=1;
for k=1:person
for j=1:number
if(minnum>=distance(k,j))
minnum=distance(k,j);
flag=k;
end
end
end
if(flag==i)
total2=total2+1;
end
total1=total1+1;
end
end
rate=(total2)/(total1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -