⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 二维pca程序.m

📁 这个是容易看懂的2dpca MATLAB程序
💻 M
字号:
tic
clear
ORLPath= ['D:\ORLface\s01';'D:\ORLface\s02';'D:\ORLface\s03';'D:\ORLface\s04';'D:\ORLface\s05';
       'D:\ORLface\s06';'D:\ORLface\s07';'D:\ORLface\s08';'D:\ORLface\s09';'D:\ORLface\s10';
       'D:\ORLface\s11';'D:\ORLface\s12';'D:\ORLface\s13';'D:\ORLface\s14';'D:\ORLface\s15';
       'D:\ORLface\s16';'D:\ORLface\s17';'D:\ORLface\s18';'D:\ORLface\s19';'D:\ORLface\s20';
       'D:\ORLface\s21';'D:\ORLface\s22';'D:\ORLface\s23';'D:\ORLface\s24';'D:\ORLface\s25';
       'D:\ORLface\s26';'D:\ORLface\s27';'D:\ORLface\s28';'D:\ORLface\s29';'D:\ORLface\s30';
       'D:\ORLface\s31';'D:\ORLface\s32';'D:\ORLface\s33';'D:\ORLface\s34';'D:\ORLface\s35';
       'D:\ORLface\s36';'D:\ORLface\s37';'D:\ORLface\s38';'D:\ORLface\s39';'D:\ORLface\s40';];
BMPPath = ['\01.bmp';'\02.bmp';'\03.bmp';'\04.bmp';'\05.bmp';];
% 装载训练样本A(:,:,i) 
for i = 1:40
    for j = 1:5
        w =[ORLPath(i,:), BMPPath(j,:)];
        a =double(imread(w));              % 读入图像并转换为双精度以便计算
       A (:,:,(i-1)*5 +j) = a;
    end
end
% 计算平均脸 ef 及训练样本规范化 
ef=zeros(112,92);
for i=1:200
    ef=ef+A(:,:,i);
end
ef=ef/200;
for i=i:200
    A(:,:,i)=A(:,:,i)-ef 
for i=1:200
     Gt= Gt + A(:,:,i)'*A(:,:,i);    % 计算矩阵Gt
end
Gt=Gt/200;
% 计算特征值 D ,特征向量 V 
[V,D]=eig(G);           
    landa=ld(end:-1:1);          % 从大到小排序
    Ind=ind(end:-1:1);          % 把对应的序号排序
    for i=1:10
        X(:,i)=V(:,Ind(i));      % 由大到小排前 10 个特征值的特征向量
    end

    for i=1:200    
        Y(:,:,i)=A(:,:,i)*X; 
    end
ORLPath= ['D:\ORLface\s01';'D:\ORLface\s02';'D:\ORLface\s03';'D:\ORLface\s04';'D:\ORLface\s05';
       'D:\ORLface\s06';'D:\ORLface\s07';'D:\ORLface\s08';'D:\ORLface\s09';'D:\ORLface\s10';
       'D:\ORLface\s11';'D:\ORLface\s12';'D:\ORLface\s13';'D:\ORLface\s14';'D:\ORLface\s15';
       'D:\ORLface\s16';'D:\ORLface\s17';'D:\ORLface\s18';'D:\ORLface\s19';'D:\ORLface\s20';
       'D:\ORLface\s21';'D:\ORLface\s22';'D:\ORLface\s23';'D:\ORLface\s24';'D:\ORLface\s25';
       'D:\ORLface\s26';'D:\ORLface\s27';'D:\ORLface\s28';'D:\ORLface\s29';'D:\ORLface\s30';
       'D:\ORLface\s31';'D:\ORLface\s32';'D:\ORLface\s33';'D:\ORLface\s34';'D:\ORLface\s35';
       'D:\ORLface\s36';'D:\ORLface\s37';'D:\ORLface\s38';'D:\ORLface\s39';'D:\ORLface\s40';];
BMPPath = ['\06.bmp';'\07.bmp';'\08.bmp';'\09.bmp';'\10.bmp';];

for i = 1:40
   for j = 1:5
       w = [ORLPath(i,:), BMPPath(j,:)];
       b = double(imread(w));
       B(:,:,5*(i-1)+j)=b;
   end
end
for i=1:200
    B(:,:,i)=B(:,:,i)-ef;
for i=1:200
      YT(:,:,i)=B(:,:,i)*X;       % YT 为 B 在坐标系 {X1,X2,...,Xd} 上的坐标
    end
err=0;                                      % 错判计数器
    Aclass=zeros(200,1);                  % 训练样本的分类
    Bclass=zeros(200,1);                   % 测试样本的本应属于的类别
    Bresult=zeros(200,1);                 % 测试样本被判别属于的类别
   for ac=1:200
    Aclass(ac)=ceil(ac/5);                % 训练样本的分类
  end
   for bc=1:200
    Bclass(bc)=ceil(bc/5);                % 测试样本的本应类别
  end
    for i=1:200
    Dij=zeros(200,1);    % 第 i 个测试样本到所有训练样本的距离
            for j=1:200
        YD=YT(:,:,i)-Y(:,:,j);              
                          % 第 i 个测试样本与第 j 个训练样本的各个投影特征向量的差
        for k=1:d
            Dij(j)=Dij(j)+norm(YD(:,k));    
                                       % 差的二范数累加即为两者的欧氏距离,YD(:,k) 为 ( row x d ) 矩阵
        end
    end
    [Min,IND]=sort(Dij);      % 从小到大索引,取最小的那个类别即为结果
    Bresult(i)=Aclass(IND(1));
    if Bresult(i)~=Bclass(i)                % 判别错误率
        err=err+1;
    end
end
    recognize=['正确识别率:',num2str((1-err/test)*100),'%'];  
    toc

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -