📄 eigenfaces.m
字号:
% read all training images
trainSamples=[];
imageNum=6;
filepath='D:\picture\pgm\';
filebase='Female';
for i=1:imageNum
fileno=int2str(i);
filename=[filepath filebase fileno '.pgm'];
image=imread(strcat(filename));
[nx,ny]=size(image);
rate1=(18000/(nx*ny))^(1/2);
imageA=imresize(image,rate1);
[Nx,Ny]=size(imageA);
rate2=120/Nx;
imageB=imresize(imageA,rate2);
imageC=imageB(1:119,1:64);
trainSamples(:,:,i)=imageC;
end
clear nx ny Nx Ny
% find the eigVecs and eigVals
NX=119;
NY=64;
[NX NY imageNum] = size(trainSamples);
X=double(reshape(trainSamples,[NX*NY imageNum]))./256;
imagemean = zeros(NX,NY);
for i=1:imageNum
imd(:,:,i) = double(trainSamples(:,:,i));
imagemean = imagemean+imd(:,:,i)/imageNum;
end
for i=1:imageNum
differenceImages(:,:,i) = imd(:,:,i) - imagemean;
end
A = zeros(NX*NY,imageNum);
for i=1:imageNum
A(:,i) = reshape(differenceImages(:,:,i),NX*NY,1);
end
[u,d,v] = svd(A,0); % u is eigVecs and d si eigVals
eigenimage(:,:,i) = reshape(u(:,i),NX,NY);
displayd=128+eigenimage*256;
colormap(gray(256));
subplot(7, imageNum+1,1);
imagesc(imagemean); % output meanface
for i=1:imageNum
subplot(7,imageNum+1,i+1);
imagesc(displayd(:,:,i),[0,256]); % output Eigen-vector from no.1
end
offset = 0;
for m=1:6
imf = imagemean;
subplot(7,imageNum+1,1+m*(imageNum+1));
imagesc(imd(:,:,m+offset),[0,256]);
for i=1:imageNum
inpro = 0;
for j=1:NX
for k=1:NY
inpro = inpro+imd(j,k,m+offset)*eigenimage(j,k,i);
%inpro -- inner product,
end
end
imf=imf+inpro*eigenimage(:,:,i);
subplot(7,imageNum+1,1+m*(imageNum+1)+i);
imagesc(imf,[0,256]);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -