Posts 使用OpenCV进行人脸识别的三种算法
Post
Cancel

使用OpenCV进行人脸识别的三种算法

一、 前言

今天在Github上看到一个使用OpenCV实现人脸识别的repository, 在这里我把他在文中提到的三种算法简要总结一下

这里是原文链接, 想获取详细信息请访问原文

二、 正篇

2.1 EigenFaces Face Recognizer

第一种算法的名字是EigenFaces Face Recognizer, 这种算法的要点如下

  • 提取人脸特征部位, 如: 五官, 额头, 脸型等
  • 被提取的部位被称为principal components, 下图展示了一些这样的部位

principal components

  • 优点: 只保留特征部位, 节省了不必要的数据
  • 缺点: 对光照等外部条件敏感, 容易受到干扰

2.2 FisherFaces Face Recognizer

之所以成为”FisherFaces”, 是因为用这个算法提取的数据, 渲染出来的照片很容易让人这么联想:

fisher faces

要点:

  • 对比EigenFaces更进一步, 提取的数据除了限定在有用的特征之外, 还限定在了”可以进行区分的特征”, 意思就是剔除那些共性的特征
  • 仍然会受到光线等外部环境的干扰,可靠性不足

2.3 Local Binary Patterns Histograms (LBPH) Face Recognizer

这个名字有点长:

  • Local: 本地, 可以理解为相邻
  • Binary Patterns: 二进制模式的
  • Histograms: 直方图

为什么是这个名字呢? 下面我们看它的实现思路就可以大体了解了, 如果想详细了解, 原文中作者也有放链接, 感兴趣就去看看吧

2.3.1 Local & Binary 的解释

如下图, 这个算法在图片中选取一个像素与周围八个像素, 根据它们的强度值与中间强度值的大小关系, 在相应位置生成0/1值, 在按照一定顺序将其序列化, 最后转化成十进制的值

lbp-labeling

2.3.2 Histogram 的解释

在一张图片中除边缘像素外的所有像素进行这种操作, 最后会得到一系列的十进制数值, 我们利用平面直方图进行统计:

sample-histogram

每一张图片都有一个直方图(统计数据), 可以用来当做人脸的特征数据

2.3.3 不受光线干扰

因为这种算法将图像根据相对强度做了二值化的处理, 在其他条件相同, 且不过亮/过暗的情况下, 得到的结果是十分可靠的

将得到的数据进行渲染

lbph-faces

This post is licensed under CC BY 4.0 by the author.

Python创建目录的相关方法

位图的色彩模式与通道