pca.m

来自「基于matlab的PCA人脸识别完成程序」· M 代码 · 共 54 行

M
54
字号
allsamples=[];
for i=1:40
    for j=1:5
        a=imread(strcat('e:\orl\s',num2str(i),'\',num2str(j),'.pgm'));
        %imshow(a);
        b=a(1:112*92);
        b=double(b);
        allsamples=[allsamples;b];
    end
end
samplemean=mean(allsamples);
for i=1:200
    xmean(i,:)=allsamples(i,:)-samplemean;
end
sigma=xmean*xmean';
[v d]=eig(sigma);
d1=diag(d);
dsort=flipud(d1);
vsort=fliplr(v);
dsum=sum(dsort);
dsum_extract=0;
p=0;
while(dsum_extract/dsum<0.9)
    p=p+1;
    dsum_extract=sum(dsort(1:p));
end
p=199;
while(i<=p&&dsort(i)>0)
    base(:,i)=dsort(i)^(-1/2)*xmean'*vsort(:,i);
    i=i+1;
end
base=xmean'*vsort(:,1:p)*diag(dsort(1:p).^(-1/2));
allcoor=xmean*base;
for(k=1:p)
    temp=reshape(base(:,k),112,92);
    newpath=strcat('e:\test\',int2str(k),'.jpg');
    imwrite(mat2gray(temp),newpath);
end
avg=reshape(samplemean,112,92);
imwrite(mat2gray(avg),'e:\test\average.jpg');
save('e:\orl\model.mat','base','samplemean')
load e:\orl\model.mat
c=[];
for i=1:40
    for j=6:10
        a=imread(strcat('e:\orl\s',num2str(i),'\',num2str(j),'.pgm'));
        %imshow(a);
        b=a(1:112*92);
        b=double(b);
        b=b-samplemean;
        c=[c;b*base];
    end
end

⌨️ 快捷键说明

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