系统结构

LBP是一种常规的人脸识别使用的特征,系统架构如上图所示,主要分为三个部分:
- 滑动框:滑动框在图片上滑动,产生不同的子图
- LBP特征提取器:针对滑动框产生的子图,计算LBP特征
- 分类器:根据LBP特征,判断当前图片是否是人脸
LBP特征
原始LBP特征
原始LBP特征是一个3X3区域的区域特征。考虑一个像素的特征值,该特征值与周围的8个像素(3X3区域)有关,对于像素值大于该像素的周围像素赋值1,其他赋值0,如下图所示:

如图中红框的中心像素,像素值为134,使用134和红框的其他像素(周围像素)比较,若大于134为1,否则为0,最后周围的8个像素的值依次为00101010,将其视为二进制数,转化为十进制就是42。
圆形LBP特征
圆形LBP特征与原始LBP特征类似,只是周围像素为一个圆形环绕的,如下图所示:

LBP使用如图所示8个实心点位置的像素计算,其中四个红色实心点不落在像素上,使用双线性插值的方法计算对应的值,最后带入原始LBP的计算方法中计算中间像素的值。该LBP使用(P,R)表示,P表示带入计算的像素点数,R表示半径,如上图即为(8,2)
系统使用的LBP
系统使用的LBP表示为$LBP^{u2}_{P,R}$,其中u2表示统一LBP特征,即像素点的特征值的二进制最多有两次0到1或1到0跳变,如00001111为统一LBP,而10101010不为统一LBP,非统一LBP会被统一复位到一个特定值;P,R即为圆形LBP的(P,R)。
最终计算出所有统计的特征值后可统计出直方图特征,使用以下公式:
例如P=8时,最终获得256个数据,以上方法抛弃了空间特性,因此除了整体的直方图特征,还计算区域的直方图特征,将整个图片划分为m个方形区域,依次统计直方图特征:
此时获得最终LBP特征,包括像素级别的特征和区域级别的特征。
分类器
原论文中使用近邻分类器分类,提出了以下几种计算距离的方法:
根据以上距离公式结合近邻分类器可以完成是否是物品的分类。
代码实践
OpenCV中自带LBP+级联分类器的人脸识别模型,同时也提供了训练的相应工具
使用默认模型测试
该代码与使用Harr+级联分类器完全相同,唯一需要改变的是调用的模型文件改为LBP特征模型lbpcascade_frontalface_improved.xml
1 | import cv2 |
训练
训练部分也与Harr+级联分类器完全相同,唯一需要改变的是使用opencv_traincascade.exe
时,添加命令行参数-featureType LBP
,含义为指定是利用LBP特征训练。