1. 程式人生 > >opencv lbp人臉檢測演算法

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檔案格式分析