这个高速发展的时代,一切事物都将与“快”相联系。人脸识别技术的发展成熟保证了人们的信息安全,二维码的飞速发展成为了现如今信息传递的新媒介。“慢”就会被淘汰,因此减少现如今人脸识别过程的时间仍是目前研究的一个课题。本文将现今两项比较前沿的领域——人脸识别和二维码,融合在一起,以达到快速识别人脸信息的目的。
其中,人脸识别技术的优点在于:①图像采集方式灵活、方便,通过手机、相机等设备就能完成;②图像的采集过程简单;③人脸图像信息易于处理;④人脸面部特征易于提取和识别。QR 二维码的优点在于:①QR码的可存储信息量大;②技术简单便于实现。将这两项前沿技术相结合,有望为人脸识别技术未来的发展提供一个新的思路。
主成分分析(Principal Component Analysis)是一种应用非常广泛的基础数学分析方法。其内在思想是K-L变换或者霍特林变换,通过分析变量找出一组最优正交基,使得变换后的变量与原来变量之间的均方误差最小。通过K-L变换后,将原来的自变量变换成另一组变量,变换后的变量便是“主成分”。从“主成分”中提取一部分重要成分作为新的自变量,最后用最小二乘法对选取主成分后的模型参数进行估计。
PCA 原理[1]是将一个高维向量通过一个特征变换矩阵将变换后的变量投影到一个低维向量空间中形成一个低维向量,并且几乎不损失主要信息。本文的人脸识别过程中,将每一个特征脸处理成了一个特征脸。
本文运用PCA 算法将ORL人脸库的数据信息进行降维处理,得到的特征脸信息再与QR二维码技术结合,设计出基于主成分分析的人脸二维码识别系统。
本文的训练集以及测试集采用的是 ORL 人脸库。基于 ORL 人脸库的信息多样和标准灰度图像的优点,我们将直接对选取的人脸样本集进行训练。从ORL人脸库中选取380张人脸图像,每张图像的像素为112×92,为了方便数据处理我们将每张图像放缩成像素为 64 × 64 的图像。
图 1 所示的图像为放缩后的图像,可以看出经过放缩后的图像仍然可以完全识别,而且没有损失主要的特征信息。
通过放缩后的人脸图像矩阵为 ,其中每个图像矩阵按照 64 × 64 的列向量进行重新排列,构成一个样本训练集 ϕ =[φ1,φ2,⋯,φ380], φi 表示长度为64 × 64 的列向量。
样本训练集构成后我们将获取平均脸,平均脸在数学意义中表示为样本训练集的平均值,为 ,同时平均值 也为样本集所有人脸图像共有的特征成分。
将得到的平均脸放缩成像素为64×64的人脸图像,如图 3 所示。
因为我们需要训练集样本中图像彼此不同的部分,因此需要将训练集中的共有成分去掉,即
,其中 。
接着通过PCA算法求出协方差矩阵的特征值 和对应的特征向量 。
将协方差矩阵的特征值进行降序排列,即:
经过多次测试,我们取 n=350 时得到的测试相对误差最小,即大于 的特征值对应的特征向量构成主成分,因此主成分构成的变换矩阵为:
这样每一幅人脸都可投影到 构成的特征脸子空间中,任何一幅人脸图像都可以向其作投影 ,得到一组经变换后的变量,即低维向量 y,此低维向量可作为人脸识别的依据。
计算出特征脸子空间后,我们便可以将被识别人脸图像向其投影。首先将被识别人脸图像压缩成向量,然后将其共有的成分剔除。即:
其中 为被识别人脸图像的特有成分, 为被识别人脸图像的全部信息, 为训练集样本平均值或者平均脸信息。
将被识别的人脸图像的特有成分经过特征变换矩阵投影后,便得到了降维后的向量 ,此向量也称为被识别人脸图像的“主成分”。即:
降维后我们需要再对主成分进行人脸图像重构,因为 K-L 变换是正交对称性的,因此 ,即:
其中E为单位矩阵,因此 ,再将得到的被识别人脸图像的特有成分加上平均脸,即 ,重构出被识别的人脸图像。
QR 码(Quick Response)是一种矩阵式二维码符号。QR 码有制作成本低、存储容量大、应用和储存范围广、可靠性高等特点。
QR 码可以同时在水平和垂直方向的二维空间储存信息,在表示信息方面也可以记载更复杂的数据,除了字母和数字外还可以录入汉字、图片、指纹、网址等信息,相当一个可移动的数据库。而相比其他二维码而言,QR 二维码具有识读速度快、数据密度大、占用空间小的优势。结合 QR 二维码以上优势,它能够储存大量人脸信息,制作成本低,并且能够快速识别,所以本文采用 QR 二维码来对人脸信息进行储存。
MATLAB 本身不具备生成和识别二维码的函数,所以需要借助 Java 的 ZXing 开源库,之后再使用 MATLAB 提供的用于和 Java 模块通信的各种函数。为了生成二维码。首先创建一个 ZXing.MultiFormatWriter的实例,从而把抽象的 Java 类实例出个体,实例对象才能直接进行交互。接下来,使用 MultiFormatWriter 的encode 方法,对之前导入的人脸数据信息进行编码。至此,编码就已经完成。下一步要做的,是从我们创建的 BitMatrix 实例中提取图像数据,用它的 ToBitmap 将其转化为一个 dotNET 的 Bitmap 对象,然后再将其转化成 MATLAB 矩阵。在这过程中需要将像素之间空格和换行符删除,从而将字符串转换为 MATLAB 可以接受的图像矩阵。最终生成的包含人脸数据信息的二维码示例如图 5。
识别 QR 二维码,需要用到的类主要是 BinaryBit⁃map,识别过程关键类是 QRCodeReader。通过指令查阅类可知,所用到的函数输入变量类型是 BinaryBit⁃map,所以就要求解码之前要进行类型转换,即将普通格式的二维码图片转化为 Java 类型图像格式,之后就可以调用函数对 Java 类型图像灰度化、降噪、边缘检测、轮廓提取、矫正畸变,最终得到二维码中的人脸信息(向量数据)。
将二维码主要信息提取后,我们再利用 K-L 变换是正交对称性: ,即:,其中 E 为单位矩阵,U 为特征脸子空间。因此我们再将从二维码中提取的信息乘以特征脸子空间,即 ,得到被识别人脸图像的特有成分后,我们再将得到的被识别人脸图像的特有成分加上平均脸,即 ,重构出被识别的人脸图像。
人脸识别系统如下图所示:
[1] 张超群. 基于主成分分析法的人脸识别算法研究[J]. 电脑编程技巧与维护,2020(7):111-115. DOI:10.3969/j.issn.1006-4052.2020.07.041.
Matlab代码获取,可私信博主。
博主简介:研究方向涉及智能图像处理、深度学习等领域,先后发表过多篇SCI论文,在科研方面经验丰富。任何与算法、程序、科研方面的问题,均可私信交流讨论。