www.gusucode.com > MATLAB代码,模式识别,人脸识别实验,K-L变换提取人脸特征 > MATLAB代码,模式识别,人脸识别实验,K-L变换提取人脸特征/K_L变换/kl.m

    [TrainX,TrainClass] = com_ReadDB('D:\模式识别\ORL\','1,2,3,4,5');  %从数据库中读取图片信息每个人的前5幅,第一个参数为数据库路径
m=mean(TrainX,2);                                                 %计算样本的均值
Q=[];
for i=1:200
    Q=[Q TrainX(:,i)-m];
end
R=Q'*Q;
[V,D] = eig(R); 
U=Q*V*D^(-0.5);
W=U(:,150:200);                                                    %通过取不同的特征向量获得不同的识别率
Ty=W' * TrainX;
[TrainX1,TrainClass1] = com_ReadDB('D:\模式识别\ORL\','6,7,8,9,10'); %从数据库中读取图片信息每个人的后5幅
Ty1=W' * TrainX1;
compare=0;                                                          %记录比较成功次数
for j=1:200
          for i=1:200                                                
               a(i) =norm(Ty(:,i)-Ty1(:,j),2); 
          end
          min=a(1);
          order=1;
          for i=2:200
              if a(i)<min
                  min=a(i);
                  order=i;
              end
          end
          ju1=TrainClass(order,1);                          
          ju2=TrainClass1(j,1);
          if ju1{1}==ju2{1}                                      %必须将cell类型转换成字符型再作比较,否则会出错
              compare=compare+1;
          end
end
disp('成功识别率为:');disp(compare/200);                         %输出识别的成功率