• 大小: 3.37MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-17
  • 语言: 其他
  • 标签: pca  人脸识别  

资源简介

简单的pca人脸识别程序,包括了orl的人脸库 运行方便,不需要修改. 程序可输出识别率

资源截图

代码片段和文件信息

%一个修改后的PCA进行人脸识别的Matlab代码

% calc xmeansigma and its eigen decomposition
allsamples=[];%所有训练图像
for i=1:40
    for j=1:5
      a=imread(strcat(‘ORL\s‘num2str(i)‘\‘num2str(j)‘.pgm‘));
      % imshow(a);
      b=a(1:112*92); % b是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右
      b=double(b);
      allsamples=[allsamples; b];  % allsamples 是一个M * N 矩阵,allsamples 中每一行数据代表一张图片,其中M=200
  end
end
samplemean=mean(allsamples); % 平均图片,1 × N
for i=1:200 xmean(i:)=allsamples(i:)-samplemean; % xmean是一个M × N矩阵,xmean每一行保存的数据是“每个图片数据-平均图片”
end;

sigma=xmean*xmean‘;   % M * M 阶矩阵
[v d]=eig(sigma);
d1=diag(d);
[d2 index]=sort(d1); %以升序排序
cols=size(v2);% 特征向量矩阵的列数
for i=1:cols
    vsort(:i) = v(: index(cols-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量每一列构成一个特征向量
    dsort(i)   = d1( index(cols-i+1) );  % dsort 保存的是按降序排列的特征值,是一维行向量
end  %完成降序排列
%以下选择90%的能量
dsum = sum(dsort);
    dsum_extract = 0;
    p = 0;
    while( dsum_extract/dsum < 0.9)
        p = p + 1;
        dsum_extract = sum(dsort(1:p));
    end
i=1;
% (训练阶段)计算特征脸形成的坐标系
while (i<=p && dsort(i)>0)
    base(:i) = dsort(i)^(-1/2) * xmean‘ * vsort(:i);   % base是N×p阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化,详见《基于PCA的人脸识别算法研究》p31
    i = i + 1;
end

% add by wolfsky 就是下面两行代码,将训练样本对坐标系上进行投影得到一个 M*p 阶矩阵allcoor
allcoor = allsamples * base;
accu = 0;

% 测试过程
for i=1:40
    for j=6:10 %读入40 x 5 副测试图像
        a=imread(strcat(‘ORL\s‘num2str(i)‘\‘num2str(j)‘.pgm‘));
        b=a(1:10304);
        b=double(b);
        tcoor= b * base; %计算坐标,是1×p阶矩阵
        for k=1:200 
                mdist(k)=norm(tcoor-allcoor(k:));
            end;
        %三阶近邻 
 [distindex2]=sort(mdist);
        class1=floor( index2(1)/5 )+1;
        class2=floor(index2(2)/5)+1;
        class3=floor(index2(3)/5)+1;
        if class1~=class2 && class2~=class3
            class=class1;
        elseif class1==class2
            class=class1;
            %elseif class2==class3
          %  class=class2;
        end;
        if class==i
            accu=accu+1;
        end;
    end;
end;
accuracy=accu/200 %输出识别率
zuobiao=[1:100];
plot(zuobiaoaccuracy);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1579  1995-02-24 02:13  orl\README

     文件      10318  1994-04-18 21:17  orl\s1\1.pgm

     文件      10318  1994-04-18 21:07  orl\s1\10.pgm

     文件      10318  1994-04-18 21:17  orl\s1\2.pgm

     文件      10318  1994-04-18 21:17  orl\s1\3.pgm

     文件      10318  1994-04-18 21:17  orl\s1\4.pgm

     文件      10318  1994-04-18 21:17  orl\s1\5.pgm

     文件      10318  1994-04-18 21:07  orl\s1\6.pgm

     文件      10318  1994-04-18 21:07  orl\s1\7.pgm

     文件      10318  1994-04-18 21:07  orl\s1\8.pgm

     文件      10318  1994-04-18 21:07  orl\s1\9.pgm

     文件      10318  2008-06-18 17:33  orl\s1\1.pgmhex.TXT

     文件     209256  2008-07-05 11:13  orl\s1\pgm.rar

     文件       3387  2008-06-18 18:01  orl\s1\pgm\Test1.dsp

     文件        533  2008-06-18 18:01  orl\s1\pgm\Test1.dsw

     文件      41984  2008-08-01 16:52  orl\s1\pgm\Test1.ncb

     文件       1427  2008-07-05 11:25  orl\s1\pgm\Test1.plg

     文件        923  2008-07-05 11:25  orl\s1\pgm\Test1.c

     文件     218112  2008-08-01 16:52  orl\s1\pgm\Test1.opt

     文件      10318  1994-04-18 21:17  orl\s1\pgm\a\1.pgm

     文件      33792  2008-07-05 11:25  orl\s1\pgm\Debug\vc60.idb

     文件      53248  2008-07-05 11:25  orl\s1\pgm\Debug\vc60.pdb

     文件     175656  2008-06-18 21:10  orl\s1\pgm\Debug\Test1.pch

     文件       4302  2008-07-05 11:25  orl\s1\pgm\Debug\Test1.obj

     文件     180282  2008-07-05 11:25  orl\s1\pgm\Debug\Test1.exe

     文件     451584  2008-07-05 11:25  orl\s1\pgm\Debug\Test1.pdb

     文件     210672  2008-07-05 11:25  orl\s1\pgm\Debug\Test1.ilk

     文件      10318  1994-04-18 21:17  orl\s1\pgm\Debug\a\1.pgm

     文件      10318  1994-04-18 21:18  orl\s10\1.pgm

     文件      10318  1994-04-18 21:07  orl\s10\10.pgm

............此处省略437个文件信息

评论

共有 条评论