1 简介

人脸是反应人身份的最直接的,最可靠的信息资源。通过人脸我们可以很快辨识一个人,这就是所谓的人脸识别。最初的人脸研究人员是一些从事社会心理学的工作者,从20世纪50年代开始有一些文献资料陆续发布在各种学术网上,人脸识别开始了最初的发展,也渐渐的有科研人员针对人脸识别进行开发和探索,最早的是70年代后的Kanade和Kelly开始的,那时候是典型的模式识别,例如采用脸部的特定特征点之间的某种度量来进行分类识别。显然这肯定是无法满足人类时下安保的要求,并且依靠科技的快速发展,和社会发展的强烈需求,如何将身份安全化、隐性化,而且准确确定身份、根本上保证环境安全的问题越来越突出,成为很多信息系统放在首位考虑的因素。目前广泛采用人体身份验证的形式有磁卡、IC卡、表示号码等,这些技术目前已经日趋成熟,并且可以采用各种方法或者手段进行加密给以保护,虽然如此,但这些验证手段依赖的都是后天赋予的信息,而这些信息又很容易被人仿造,作假,出现了很多问题。而人脸识别是基于人固有特征的人脸来判别的,很难被仿造,具有较强的不易变性,是主流的科研方向。

自20年代90年代后,人脸识别正式进入商业运用领域。伴随这计算机技术的迅速发展,人脸识别不在只是单纯的依靠固有的人脸图像来判别,而是直接从视频中截取画面,这就要求较高的科学技术来实现。人脸识别技术具有广泛的应用领域, 在工业领域方面,各公司工厂具有严格的人员控制进出的规章制度,这时候人脸识别这样类似的门禁控制系统就非常有用了。在人工智能方面,现在机器人的研究正在如火如荼的进行着,而机器人的的眼睛需要能直接识别人的身份的这样的功能,所以需要灵活性高的识别方法,来适应这个智能的要求,这时候人脸识别的迅速发展,刚好可以与之匹配的方法,从某方面促进了人工智能的快速实现。同时,人脸识别具有无侵犯性、易安装、无人工参与等优点,有较大的研究的意义。

人脸识别中有两个很重要的步骤,就是特征提取和识别分类。好的人脸特征提取可以大大降低整个系统的计算量,提升本系统的识别速率。而好的人脸识别的测度也可以让前一个人脸特征提取的过程得到简化,在保证识别精确度的情况下,使这步骤的运算量简单,运算速率加快。由此可得必须综合考虑才能开发出较好的人脸识别系统。同时两个模块也成为了人脸识别的最主要研究方向。

   PCA人脸识别特征提取有几个过程:人脸图像获取和处理;构造人脸库并且训练形成特征子空间;提取特征值和特征向量。下面对整个PCA提取特征过程中的步骤做一个详细的描述。

1. 人脸图像获取和处理,构造人脸库

通过拍照的方式,在背景设定的环境下,拍取人脸图像,然后对人脸样本采取前期的处理,其中包括人脸图像格式的变换,是否需要灰度处理等等。这些都要根据算法需求来对图像进行前期的预处理。PCA算法运用的统计学原理中的K-L变换的原理,对图像背景要求一致,而对光线的要求也一般,前期只要保证图像像素和格式一致就可以。最后保存图像,建立人脸库。

2.训练人脸库

人脸图像获取后,要放进人脸库,把人脸库统一配置后,选取每个人若干图片参与训练,变成训练矩阵。假定格式统一的人脸图像的像素为n*m,采取变换转化为一维矩阵,然后按行相连构成N=m*n维数的的矢量,每个人脸图像都可以视为N维空间中的一点,运用K-L变换可以将这个图像转换到底维的空间当中去,这样描述更加具体。

3.计算人脸图像的生成矩阵

采用训练后的人脸图像构成样本集,产生协方差矩阵可以用以下几种方法求出来(三种等价):

【人脸识别】基于主成分分析PCA算法人脸识别门禁系统含Matlab源码_人脸识别

【人脸识别】基于主成分分析PCA算法人脸识别门禁系统含Matlab源码_特征空间_02

【人脸识别】基于主成分分析PCA算法人脸识别门禁系统含Matlab源码_特征提取_03


2 部分代码

function OutputName = Recognition(TestImage, m, A, Eigenfaces)
ProjectedImages = [];
Train_Number = size(Eigenfaces,2);
for i = 1 : Train_Number
temp = Eigenfaces'*A(:,i); %e将每个样本投影到特征空间
ProjectedImages = [ProjectedImages temp];
end
%%%%%%%%%%%%%%%%%%%%%%%% 从测试人脸库计算提取特征
InputImage = imread(TestImage);
temp = InputImage(:,:,1);
[irow icol] = size(temp);
InImage = reshape(temp',irow*icol,1);
Difference = double(InImage)-m;
ProjectedTestImage = Eigenfaces'*Difference; % 将待测样本投影到特征空间
%%%%%%%%%%%%%%%%%%%%%%%% 按照欧式距离取最小的原则得出匹配的人脸
Euc_dist = [];
for i = 1 : Train_Number
q = ProjectedImages(:,i);
temp = ( norm( ProjectedTestImage - q ) )^2;
Euc_dist = [Euc_dist temp];
end
%选取最小欧式距离的人脸
[Euc_dist_min , Recognized_index] = min(Euc_dist);
%获取该人脸的数字代号
OutputName = strcat(int2str(Recognized_index),'.jpg');

3 仿真结果

【人脸识别】基于主成分分析PCA算法人脸识别门禁系统含Matlab源码_特征提取_04

4 参考文献

[1]马晓普. 关于人脸识别系统中的PCA算法[D]. 电子科技大学.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。