opencv lbp人脸检测算法


一、 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文件格式分析

点击打开链接





你可能感兴趣的:(opencv源码剖析)