pca_2d.m

来自「MATLAB自已编的二维DLA」· M 代码 · 共 76 行

M
76
字号
person=40;
number=1;
dd=5;
for i=1:person
    for j=1:number
        [T{i,j},map]=imread(strcat('e:\orl\',num2str(i),'\',num2str(j),'.bmp')); 
        a=size(T{i,j});
    end
end
%以下得到全部训练样本平均值
TOTAL=size(a(1),a(2));
for i=1:person
   for j=1:number
        TOTAL=double(TOTAL)+double(T{i,j});
    end
end
TOTAL=TOTAL/(person*number);
a=size(TOTAL);
%求协方差矩阵
R=zeros(a(2),a(2));
for i=1:person
    TEMP=zeros(a(2),a(2));
    for j=1:number
        N2{i,j}=double(T{i,j})-double(TOTAL);
        TEMP=TEMP+(N2{i,j})'*N2{i,j};
    end
    R=R+TEMP;
end
R=R/(person*number);
[pc,latent,explained]=pcacov(R);%pc为特征值 latent为对应的特征矢量
U=pc(:,1:dd);
M=U;
for i=1:person
    for j=1:number
     T2{i,j}=(double(T{i,j})-double(TOTAL))*M;
    end
end
total1=0;
total2=0;
for i=1:person
    for j=number+1:10
        [T1,map]=imread(strcat('e:\orl\',num2str(i),'\',num2str(j),'.bmp'));
        f=(double(T1)-double(TOTAL))*M;
       %求到各个样本的距离
        for x=1:person
            for y=1:number
               distance(x,y)=0.0;
               dd1=0;
               TEMP1=f-T2{x,y};
               for m=1:a(1)
                   for n=1:dd
                     dd1=dd1+TEMP1(m,n).^2;
                  end
               end
               dd1=sqrt(dd1);
               distance(x,y)=dd1;
            end
        end
       %计算识别率
        minnum=distance(1,1);
        flag=1;
        for k=1:person
            for j=1:number
                if(minnum>=distance(k,j))
                    minnum=distance(k,j);
                    flag=k;
                end
            end
        end
        if(flag==i)
        total2=total2+1;
        end
       total1=total1+1;
    end
end
rate=(total2)/(total1);

⌨️ 快捷键说明

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