opencv lbp人臉檢測演算法
阿新 • • 發佈:2019-02-20
一、 MB-LBP特徵
演算法使用的特徵為MB-LBP特徵,以區域塊畫素值和為基礎進行計算,因此MB-LBP特徵計算視窗可為長方形。 LBP特徵如下: MB-LBP特徵如下: opencv的MB-LBP特徵使用積分圖來計算區域畫素值的和: 特徵計算程式碼如下:陣列p可快速計算出區域畫素和,p[0]指向影象資料起點,offset控制滑動視窗偏移,陣列p的每個下標對應位置如下:#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); }
二、 演算法步驟
演算法檢測人臉的流程與一般的物體檢測流程類似,均是通過滑動視窗遍歷整個影象。
其中,滑動視窗的大小是固定的,24x24畫素。通過縮放原始輸入影象來達到檢測不同人臉尺寸的目的。