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

📄 eigenfaces.m

📁 基于SVD的主量提取的人脸识别的matlab源码
💻 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 + -