由於Haar特徵是矩形中黑色區域所有像素值的和減去白色區域所有像素值的和。在之前(《計算Haar特徵個數》)我們看到,24*24的圖片中,有115984個特徵,遠遠大於其像素個數。如果計算每個特徵的像素和,計算量會非常大,而且很多次運算是重複的。
Paul Viola提出一種利用積分圖像法快速計算Haar特徵的方法(《Rapid object detection using a boosted cascade of simple features》)。簡單說來,就是先構造一張“積分圖”(Integral image),也叫Summed Area Table,之後任何一個Haar矩形特徵都可以通過查表的方法(Look Up Table)和有限次簡單運算得到,大大減少了運算次數。
將矩形表示爲:
其中,x,y表示起點座標,w,h表示寬,高,a表示角度。
矩形內像素值之和表示爲:
0°矩形特徵
45°Rotated矩形特徵
構造旋轉積分圖像Rotated SummedArea Table
旋轉積分圖中,每個點存儲是其左上方延伸出的45°區域範圍內所有像素之和:
RSAT(x,y)也採用增量方計算得到:
初始邊界:RSAT(-1,y)=RSAT(x,-1)=RSAT(x,-2)=0
RSAT(-1,-1)=RSAT(-1,-2)=0
公式具體示意如下圖:
計算Haar矩形特徵
同樣的方式,可推出每個矩形內像素和的計算公式:
同樣的,無論旋轉矩形r的尺寸大小,只需要查找積分圖像4次就可以求得任意矩形內像素值得和。