资源简介

内含程序源代码,程序说明,以及400张人脸图像数据,有一定的参考价值

资源截图

代码片段和文件信息

%用KPCA进行人脸识别的Matlab代码 

clear 
clc 
allsamples=[];%所有训练图像 
for i=1:40 
    for j=6:10
      a=imread(strcat(‘Data\s‘num2str(i)‘\‘num2str(j)‘.pgm‘)); 
      b=a(1:112*92); % b是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右 
      b=double(b); 
      allsamples=[allsamples; b];  % allsamples 是一个200 * 10304 矩阵,allsamples 中每一行数据代表一张图片。
  end 
end 
 
cov_size=size(allsamples1); 
train_num=cov_size; 
patterns=allsamples; 
for i=1:cov_size 
  for j=i:cov_size 
    K(ij) =(patterns(i:)*patterns(j:)‘+1)^0.7; 
    K(ji) = K(ij); 
  end 
end 
unit = ones(cov_size cov_size)/cov_size; 
K_n = K - unit*K - K*unit + unit*K*unit; 
 
[evecsevals] = eig(K_n); 
evals = real(diag(evals)); 
[l1l2]=sort(-1*evals‘); 
evals=l1*(-1); 
evecs=evecs(:l2); 
for i=1:cov_size 
  evecs(:i) = evecs(:i)/(sqrt(evals(i))); 
end 
 
 
%90%的贡献率 
dsum = sum(evals); 
    dsum_extract = 0; 
    p = 0; 
    while( dsum_extract/dsum < 0.9) 
        p = p + 1; 
        dsum_extract = sum(evals(1:p)); 
    end 
 
 
max_ev=p; 
 
 
unit_train = ones(train_numcov_size)/cov_size; 
 
for i=1:train_num 
  for j=1:cov_size 
    K_train(ij) =(patterns(i:)*patterns(j:)‘+1)^0.7; 
  end 
end 
K_train_n = K_train - unit_train*K - K_train*unit + unit_train*K*unit; 
features = zeros(train_num max_ev); 
features = K_train_n * evecs(:1:max_ev); 
 
 
allcoor = features; 
 
 
 
accu=0; 
% 测试过程 
for i=1:40 
    for j=1:5 %读入40 x 5 副测试图像 
        a=imread(strcat(‘Data\s‘num2str(i)‘\‘num2str(j)‘.pgm‘)); 
        b=a(1:10304); 
        b=double(b); 
        unit_test = ones(1cov_size)/cov_size; 
        K_test = zeros(1cov_size);  
  for j=1:cov_size 
    K_test(j) = (b*patterns(j:)‘+1)^0.7; 
  end 
 
K_test_n = K_test - unit_test*K - K_test*unit + unit_test*K*unit; 
test_features = zeros(1 max_ev);  
test_features = K_test_n * evecs(:1:max_ev); 
         
         
        tcoor=test_features; %计算坐标,是1×p阶矩阵 
        for k=1:200  
                mdist(k)=norm(tcoor-allcoor(k:)); 
            end; 
 [distindex2]=sort(mdist); 
        class=ceil( index2(1)/5 ); 
        if class==i 
            accu=accu+1; 
        end; 
    end;
end; 
accuracy=accu/200 %输出识别率
p

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

     文件       2345  2009-06-18 10:33  程序\kpca.asv

     文件       2352  2009-06-23 11:10  程序\kpca.m

     文件      86528  2009-06-25 09:53  程序\程序说明.doc

     文件      10318  1994-04-18 14:18  程序\Data\s9\1.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s9\10.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s9\2.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s9\3.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s9\4.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s9\5.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s9\6.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s9\7.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s9\8.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s9\9.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s8\1.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s8\10.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s8\2.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s8\3.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s8\4.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s8\5.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s8\6.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s8\7.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s8\8.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s8\9.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s7\1.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s7\10.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s7\2.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s7\3.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s7\4.pgm

     文件      10318  1994-04-18 14:18  程序\Data\s7\5.pgm

     文件      10318  1994-04-18 14:07  程序\Data\s7\6.pgm

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

评论

共有 条评论