【OpenCV】利用积分图像法快速计算Haar特征
由于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°矩形特征如图所示:
利用积分图计算可计算矩形区域内像素和:
所以,无论矩形r的尺寸大小,只需查找积分图像4次就可以求得任意矩形内像素值的和。
旋转积分图中,每个点存储是其左上方延伸出的45°区域范围内所有像素之和:
RSAT(x,y)也采用增量方计算得到:
初始边界:RSAT(-1,y)=RSAT(x,-1)=RSAT(x,-2)=0
RSAT(-1,-1)=RSAT(-1,-2)=0
公式具体示意如下图:
同样的方式,可推出每个矩形内像素和的计算公式: