• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: Matlab
  • 标签: 2DPCA  matlab  

资源简介

利用2DPCA进行图像的降维处理,有PCA所不具备的保持图像几何特征的性质。同时,运算速度也比PCA快。经过2DPCA线性降维器降维后,方便进行分类识别。 代码是matlab编程

资源截图

代码片段和文件信息

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

% calc xmeansigma and its eigen decomposition
function [frobenius_distrain_time] = u2dpca;
clear all;
cv = zeros(92/192/1);
train_samples = zeros(112/192/1200);
d = 8;
f = randperm(10)
tic;
for i=1:40
    for j=1:5
      a=imread(strcat(‘H:\毕业设计\face database\orl\orl_faces_gai\s‘num2str(i)‘\‘num2str(f(j))‘.bmp‘));%D:\rawdata\ORL\s
      %a =  imresize(a1/4‘bilinear‘);
      %imshow(a);
      %b=a(112:92); % b是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右
      b=double(a);
      train_samples(::(i-1)*5 + j)=b;
      cv = cv + b‘*b;
    end
end
toc;
%mean_train_samples = mean(train_samples3);
%train_samples_sub = zeros(112/192/1200);
%for i = 1:200;
%    train_samples_sub(::i) = train_samples(::i) - mean_train_samples;
%    cv = cv +  train_samples_sub(::i)‘ *  train_samples_sub(::i);
%end
cv = cv/200;

[vv dv]=eig(cv);
d3=diag(dv);
[d4 indexv]=sort(d3); %以升序排序

for i=1:92/1
    vsortv(:i) = vv(: indexv(92/1-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量每一列构成一个特征向量
    dsortv(i)   = d3( indexv(92/1-i+1) );  % dsort 保存的是按降序排列的特征值,是一维行向量
end  %完成降序排列

final_v = zeros(92/1d);
for i = 1:d;
     final_v(:i) = vsortv(:i);
end
toc;
frobenius_dis = 0;
u2dproject = zeros(112/1d200);
for i = 1:200
    u2dproject(::i) = train_samples(::i) * final_v;
    %image = u2dproject(::i) * final_v‘;
    %imwrite(uint8(image)strcat(‘H:\毕业设计\face database\orl\orl_faces_rename\u2dpca8\‘num2str(i)‘.bmp‘)‘bmp‘);
    mid = train_samples(::i) - u2dproject(::i) * final_v‘;
    frobenius_dis = frobenius_dis + (norm(mid‘fro‘))^2;
end
train_time = toc;
%frobenius_dis
%tic;
%accu = 0;
%flag = zeros(1200);
%test_features = zeros(112/1d);
%mdist = zeros(1200);
%for i=1:40
%    for j=6:10 %读入40 x 5 副测试图像
%       a=imread(strcat(‘H:\毕业设计\face database\orl\orl_faces_gai\s‘num2str(i)‘\‘num2str(f(j))‘.bmp‘));%D:\rawdata\ORL\s
%        %a =  imresize(a1/4‘bilinear‘);
%        b=double(a);
%        test_features = b * final_v;
        
%        for k=1:200
%            mdist(k)= norm(test_features - u2dproject(::k)‘fro‘);
%        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;
%            flag(1(i-1)*5 + j-5) = 1;
%        end;
%    end;
%end;
%accuracy=accu/200 %输出识别率
%toc
return;

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

     文件       2884  2007-06-09 15:07  u2dpca.m

     文件       2612  2007-05-29 21:43  u2dpca_test.m

----------- ---------  ---------- -----  ----

                 5714                    3


评论

共有 条评论