基于PCA的人脸特征提取1
2014-12-04 13:46
411 查看
应用PCA技术来抽取人脸特征,在降低维数的同时,在一定程度上去除原始特征各维之间的相关性。
一 、生成样本矩阵
ORL人脸库共有400幅人脸图像(40人,每人10幅图像,像素为112*92),选用每个人的前5张图片作为实验的数据集,这样共有200幅样本图像。
首先要做的是将这200幅人脸图像转换为向量形式,组成样本矩阵。函数ReadFaces()用于完成这一任务
ReadFaces()依次读入样本图像(假定40个人的样本图像位于“..../ORL/”路径下,如第18人的10幅图像位于..../ORL/S18中,然后将112×92的像素按列存储为10304维的行向量作为样本矩阵FaceContainer的一个样本(一行),最后将样本矩阵保存至Mat目录下的FaceMat.mat文件。
函数具体实现如下:
function [imgRow,imgCol,FaceContainer,faceLabel]=ReadFaces(nFacesPerPerson,nPerson,bTest)
%读入ORL人脸库指定书目的人脸前五张训练
%
%输入:nFacesPerPerson*nPerson--每个人需要读入的样本数,默认值为5
% nPerson--需要读入的人数,默认为全部40人
% bTest--bool型的参数。默认为0,表示读入训练样本(前五张);如果为1,表示
% 读入测试样本(后五张)
%输出:FaceContainer--向量化人脸容器,nPerson*10304的2维矩阵,每行对应一个人脸
% 向量
if nargin==0
nFacesPerPerson=5;%前五张用于训练
nPerson=40; %要读入的人数
bTest=0;
elseif nargin<3
bTest=0;
end
img=imread('E:\表情数据库\ORL\s1_1.bmp');%为计算尺寸先读入一张
[imgRow,imgCol]=size(img);
FaceContainer=zeros(nFacesPerPerson.*nPerson,imgRow.*imgCol);
faceLabel=zeros(nFacesPerPerson,1);
%读入训练数据
for i=1:nPerson
strPath='E:\表情数据库\ORL\s';
strPath=strcat(strPath,num2str(i),'_');
tempStrPath=strPath;
for j=1:nFacesPerPerson
strPath=tempStrPath;
if bTest==0 %读入训练数据
strPath=strcat(strPath,num2str(j));
else
strPath=strcat(strPath,num2str(5+j));
end
strPath=strcat(strPath,'.bmp');
img=imread(strPath);
%把读入的图像按列存储为行向量放入向量化人脸容器对应的行中
FaceContainer((i-1)*nFacesPerPerson+j,:)=img(:)';
faceLabel((i-1)*nFacesPerPerson+j)=i;
end
end
%保存人脸样本矩阵
save('../FaceMat.mat','FaceContainer')
一 、生成样本矩阵
ORL人脸库共有400幅人脸图像(40人,每人10幅图像,像素为112*92),选用每个人的前5张图片作为实验的数据集,这样共有200幅样本图像。
首先要做的是将这200幅人脸图像转换为向量形式,组成样本矩阵。函数ReadFaces()用于完成这一任务
ReadFaces()依次读入样本图像(假定40个人的样本图像位于“..../ORL/”路径下,如第18人的10幅图像位于..../ORL/S18中,然后将112×92的像素按列存储为10304维的行向量作为样本矩阵FaceContainer的一个样本(一行),最后将样本矩阵保存至Mat目录下的FaceMat.mat文件。
函数具体实现如下:
function [imgRow,imgCol,FaceContainer,faceLabel]=ReadFaces(nFacesPerPerson,nPerson,bTest)
%读入ORL人脸库指定书目的人脸前五张训练
%
%输入:nFacesPerPerson*nPerson--每个人需要读入的样本数,默认值为5
% nPerson--需要读入的人数,默认为全部40人
% bTest--bool型的参数。默认为0,表示读入训练样本(前五张);如果为1,表示
% 读入测试样本(后五张)
%输出:FaceContainer--向量化人脸容器,nPerson*10304的2维矩阵,每行对应一个人脸
% 向量
if nargin==0
nFacesPerPerson=5;%前五张用于训练
nPerson=40; %要读入的人数
bTest=0;
elseif nargin<3
bTest=0;
end
img=imread('E:\表情数据库\ORL\s1_1.bmp');%为计算尺寸先读入一张
[imgRow,imgCol]=size(img);
FaceContainer=zeros(nFacesPerPerson.*nPerson,imgRow.*imgCol);
faceLabel=zeros(nFacesPerPerson,1);
%读入训练数据
for i=1:nPerson
strPath='E:\表情数据库\ORL\s';
strPath=strcat(strPath,num2str(i),'_');
tempStrPath=strPath;
for j=1:nFacesPerPerson
strPath=tempStrPath;
if bTest==0 %读入训练数据
strPath=strcat(strPath,num2str(j));
else
strPath=strcat(strPath,num2str(5+j));
end
strPath=strcat(strPath,'.bmp');
img=imread(strPath);
%把读入的图像按列存储为行向量放入向量化人脸容器对应的行中
FaceContainer((i-1)*nFacesPerPerson+j,:)=img(:)';
faceLabel((i-1)*nFacesPerPerson+j)=i;
end
end
%保存人脸样本矩阵
save('../FaceMat.mat','FaceContainer')
相关文章推荐
- 基于PCA的人脸特征提取及人脸重建
- 基于ORL人脸库PCA特征提取之“基于主分量人脸重建”
- 基于PCA的ORL人脸库特征抽取
- 人脸识别特征脸提取PCA算法
- 数据挖掘—LDA,PCA特征提取降维与SVM多分类在人脸识别中的应用-数据集ORL
- 基于PCA的特征提取
- 人脸识别特征脸提取PCA算法
- 【分享】基于Gabor特征提取和人工智能神经网络的人脸检测matlab代码
- 基于MATLAB,运用PCA+SVM的特征脸方法人脸识别
- 基于MATLAB,运用PCA+SVM的特征脸方法人脸识别
- 基于PCA的特征提取
- 基于 vs2013 + caffe 的 人脸图像 vgg 特征提取
- 基于Gabor特征提取和人工智能神经网络的人脸检测matlab代码
- 基于PCA的人脸特征抽取
- 自动人脸识别基本原理 --基于静态图像的识别算法(一)特征脸补充知识 PCA
- 基于PCA和SVM的人脸识别系统-error修改
- 深度学习(十七)基于改进Coarse-to-fine CNN网络的人脸特征点定位-ICCV 2013
- 基于颜色特征提取
- 基于PCA的改进人脸识别算法—2DPCA(上篇)
- 4、dlib学习笔记--提取人脸特征点(68点,opencv画图)