函数功能:全像素存储,将图像所有像素存储在矩阵里。将人脸图像转换为向量形式,组成样本矩阵,便于后面做降维处理。
首先利用ReadFaces函数读入样本图像
然后将imgRow像素*imgCol像素的图像按列存储为一个imgRow*imgCol维的行向量作为样本矩阵FaceContainer中的一行(一个样本)
最后将样本保存在FaceMat.mat文件中
function [imgRow,imgCol,FaceContainer,faceLabel]=ReadFaces(nFacesPerPerson, nPerson, bTest)
% 读入ORL人脸库的指定数目的人脸前前五张(训练)
%
% 输入:nFacesPerPerson --- 每个人需要读入的样本数,默认值为 5
% nPerson --- 需要读入的人数,默认为全部 40 个人
% bTest --- bool型的参数。默认为0,表示读入训练样本(前5张);如果为1,表示读入测试样本(后5张)
%
% 输出:FaceContainer --- 向量化人脸容器,nPerson * 10304 的 2 维矩阵,每行对应一个人脸向量
%nargin是用来判断输入变量个数的函数,这样就可以针对不同的情况执行不同的功能。通常可以用它来设定一些默认值。
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的对应行中
% img(:)将读入的二维图像转换成一维列向量, img(:)'将列向量转置成行向量存储在FaceContainer中
FaceContainer((i-1)*nFacesPerPerson+j, :) = img(:)';
faceLabel((i-1)*nFacesPerPerson+j) = i;
end % j
end % i
% 保存人脸样本矩阵
save('Mat/FaceMat.mat', 'FaceContainer')
版权声明:本文为cheyanxin2009原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。