您好, 访客   登录/注册

基于OpenCV的人脸识别算法研究与实现

来源:用户上传      作者:冯婧 顾梅花

  摘要:基于OpenCV的人脸识别算法,具体为局部二值模式直方图(LBPH),特征脸(Eigenface)以及Fisherface算法。介绍了各个算法的核心思想、具体实现步骤、应用场景以及优缺点,并在OpenCV平台上采用Python语言对三种算法进行仿真调试。实验结果显示,LBPH、Eigenface、Fisherface三种算法的正确率分别可达98.56%、81.16%和89.13%。
  关键词:人脸识别;OpenCV;LBPH;Eigenface;Fisherface
  中图分类号:TP391 文献标识码:A
  文章编号:1009-3044(2020)14-0003-03
  1引言
  人脸识别作为一种主流的生物识别方法,被广泛应用于众多身份鉴别场景,是当下计算机视觉与模式识别领域的研究热点。但是,当面临不同的采集环境,人脸的多姿态问题,即光照问题,表情变化问题,遮挡干扰问题等都给人脸识别带来了挑战,因此人脸识别算法的研究仍有重大意义。本文介绍了基于OpenCV的三种经典人脸识别算法,即局部二值模式直方图(LBPH)算法,特征脸(Eigenface)算法以及Fisherface算法,并给出了相关实验结果与分析。
  2基于openCV的三种经典人脸识别算法
  2.1局部二值模式直方图(LBPH)算法
  2.1.1原理
  局部二值模式(Local Binary Patterns,LBP)在1996年由Timo Ojala等人提出。算法的核心原理是先将人脸灰度图像分成若干小的区域,通过对这些小的区域采用相应的LBP算子进行处理,获得相应的LBP值后,再绘制体现人脸特征信息的LBP统计直方图,并将测试统计直方图与训练统计直方图进行相似度比较,与测试样本最为相似的训练样本即为识别结果。
  2.1.2方法步骤
  第一步:将人脸灰度图像划分为若干相同大小的圆形子区域。
  第二步:利用公式(1)进行LBP圆形算子处理。LBP圆形算子的主要思想是在子区域内,用圆周上的某个像素点灰度值与中心像素点的灰度值相比较,大于或等于的情况下,该位置像素用l替换,反之,该位置像素用0替换。
  第三步:利用公式(2)获得LBP值。即将第二步的结果按一定顺序排列成二进制码序列,再将其转换为十进制数,即得LBP值。在公式(2)中,P代表圆形子区域的圆周上采样像素点个数,R代表圆形子区域的区域半径。
  第四步:分别绘制训练集和测试集的LBP统计直方图。
  第五步:将测试样本的每个圆形子区域的直方图与训练集中的所有圆形子区域的直方图作比较,与测试样本相似度最高的训练样本即为识别结果。
  局部二值模式直方图(LBPH)算法的流程图如图1。
  2.2特征脸(Eigenface)算法
  2.2.1原理
  特征脸(Eigenface)算法最早在1987年由Sirovich.L和Kirby.M提出,在1991年由Turk.M和Pentland.A进一步完。应用特征脸算法的前提是待识别图像人脸尺寸与特征脸尺寸一致,且为正面。算法的基本原理是使用主成分分析(PrincipalComponent Analysis,PCA)方法对人脸灰度图像进行降维处理,去除不必要的信息,保留最能体现人脸特征的向量。再先后求得训练集和测试集相应的特征向量。遍历所有训练集的特征向量后,与测试样本最为接近的训练样本即为识别结果,其中,接近程度可采用欧式距离来衡量。
  2.2.2方法步骤
  2.3 Fisherface算法
  2.3.1原理
  线性判别分析(Linear Discriminant Analysis,LDA)在1996年由Belhumeur等人首次应用到人工智能和模式识别领域。算法的核心思想是先对原始数据集进行PCA降维,目的是去除冗余信息,找到最能代表人脸特征的向量表达,紧接着再使用LDA线性判别分析,用Fisher特征向量来体现样本的分类特征,再通过求取欧式距离等方法进行人脸相似性判断,以实现人脸识别。
  2.3.2方法步骤
  第一步:对原始数据集进行PCA降维。
  第二步:利用LDA方法对第一步提取到的特征进行分类。目的是要让不同人的图像之间的距离变大,与此同时,同一个体的不同图像间的距离变小。不同人多图像之间的距离Sh用类间离散度矩阵来衡量,如公式(9)。
  第四步:用Fisher特征向量重新描述训练样本和测试样本。
  第五步:比较两者的Fisher特征向量相似度,给出识别结果。
  Fisherface算法流程图如图3。
  3实验结果与分析
  实验选取The CNBC Face Database人脸数据集Caucasian部分中的70人,共计采用560幅人脸图像进行实验。所选取实验数据集特点为光照影响较为明显,拍摄角度略有偏转,表情变化明显。
  人脸检测采用OpenCV中的AdaBoost算法进行人脸框定,检测效果如图4。
  然后,采用LBPH,Eigenface和Fisherface三种算法模型对经过归一化的训练集进行训练,再用剩余的部分作为测试集进行测试,得到相应的识别正确率。
  由表1可知,在光照影響较明显,有一定拍摄角度偏差的条件下,可认为Eigenface和Fisherface算法的识别正确率偏低,选择LBPH算法为最佳。另外,分析表1数据可知,当训练样本规模增加时,三种算法的正确率均有所提升,且Fisherface的提升效果最为明显,可见,增加训练样本集规模是一种提升算法识别正确率的途径。
  相应地,对每种算法模型各执行10次,取其识别时间的平均值,可得Eigenface算法所花时间为1.32毫秒,Fisherface算法用时2.43毫秒,而LBPH需花费2.69毫秒。不难看出,在上述条件下,虽然Eigenface识别正确率偏低,但其识别速度更快。
  4小结
  在进行人脸识别时,LBPH算法适合于应用在光照影响较明显的场景;Eigenface算法对人脸的正面图像识别效果较好,但是,当人脸的拍摄角度有一定偏转时,识别率仍有待提高;Fisherface算法在降维的基础上利用LDA来选择出人脸样本的最优分类特征,分类效果较好。
转载注明来源:https://www.xzbu.com/8/view-15267062.htm