一、 MB-LBP特征
算法使用的特征为MB-LBP特征,以区域块像素值和为基础进行计算,因此MB-LBP特征计算窗口可为长方形。
LBP特征如下:

MB-LBP特征如下:

opencv的MB-LBP特征使用积分图来计算区域像素值的和:

特征计算代码如下:
#define CALC_SUM_(p0, p1, p2, p3, offset) \
((p0)[offset] - (p1)[offset] - (p2)[offset] + (p3)[offset])
inline int LBPEvaluator::Feature :: calc( int _offset ) const
{
int cval = CALC_SUM_( p[5], p[6], p[9], p[10], _offset );
return (CALC_SUM_( p[0], p[1], p[4], p[5], _offset ) >= cval ? 128 : 0) | // 0
(CALC_SUM_( p[1], p[2], p[5], p[6], _offset ) >= cval ? 64 : 0) | // 1
(CALC_SUM_( p[2], p[3], p[6], p[7], _offset ) >= cval ? 32 : 0) | // 2
(CALC_SUM_( p[6], p[7], p[10], p[11], _offset ) >= cval ? 16 : 0) | // 5
(CALC_SUM_( p[10], p[11], p[14], p[15], _offset ) >= cval ? 8 : 0)| // 8
(CALC_SUM_( p[9], p[10], p[13], p[14], _offset ) >= cval ? 4 : 0)| // 7
(CALC_SUM_( p[8], p[9], p[12], p[13], _offset ) >= cval ? 2 : 0)| // 6
(CALC_SUM_( p[4], p[5], p[8], p[9], _offset ) >= cval ? 1 : 0);
}
数组p可快速计算出区域像素和,p[0]指向图像数据起点,offset控制滑动窗口偏移,数组p的每个下标对应位置如下:

二、 算法步骤
算法检测人脸的流程与一般的物体检测流程类似,均是通过滑动窗口遍历整个图像。
其中,滑动窗口的大小是固定的,24x24像素。通过缩放原始输入图像来达到检测不同人脸尺寸的目的。
三、 xml文件格式分析
四、 其他
积分图生成方法:
方法一. one pass, 每一行记录一个row_sum,integral(row, col) = integral(row-1, col) + row_sum。
方法二. two pass,第一轮计算row sum, 第二轮在row sum数值上再计算col sum。