gusucode.com > 精通Matlab数字图像处理与识别源码程序 > 精通Matlab数字图像处理与识别源码程序/chapter15/code/FaceRec/ReadFaces.m
function [imgRow,imgCol,FaceContainer,faceLabel]=ReadFaces(nFacesPerPerson, nPerson, bTest) % 读入ORL人脸库的指定数目的人脸前前五张(训练) % % 输入:nFacesPerPerson --- 每个人需要读入的样本数,默认值为 5 % nPerson --- 需要读入的人数,默认为全部 40 个人 % bTest --- bool型的参数。默认为0,表示读入训练样本(前5张);如果为1,表示读入测试样本(后5张) % % 输出:FaceContainer --- 向量化人脸容器,nPerson * 10304 的 2 维矩阵,每行对应一个人脸向量 if nargin==0 %default value nFacesPerPerson=5;%前5张用于训练 nPerson=40;%要读入的人数(每人共10张,前5张用于训练) bTest = 0; elseif nargin < 3 bTest = 0; end img=imread('Data/ORL/S1/1.pgm');%为计算尺寸先读入一张 [imgRow,imgCol]=size(img); FaceContainer = zeros(nFacesPerPerson*nPerson, imgRow*imgCol); faceLabel = zeros(nFacesPerPerson*nPerson, 1); % 读入训练数据 for i=1:nPerson i1=mod(i,10); % 个位 i0=char(i/10); strPath='Data/ORL/S'; if( i0~=0 ) strPath=strcat(strPath,'0'+i0); end strPath=strcat(strPath,'0'+i1); strPath=strcat(strPath,'/'); tempStrPath=strPath; for j=1:nFacesPerPerson strPath=tempStrPath; if bTest == 0 % 读入训练数据 strPath = strcat(strPath, '0'+j); else strPath = strcat(strPath, num2str(5+j)); end strPath=strcat(strPath,'.pgm'); img=imread(strPath); %把读入的图像按列存储为行向量放入向量化人脸容器faceContainer的对应行中 FaceContainer((i-1)*nFacesPerPerson+j, :) = img(:)'; faceLabel((i-1)*nFacesPerPerson+j) = i; end % j end % i % 保存人脸样本矩阵 save('Mat/FaceMat.mat', 'FaceContainer')