📄 pca.m
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -