参考博客:https://www.cnblogs.com/magic-428/p/9149868.html
1、积分图原理
积分图的每一点(x, y)的值是原图中对应位置的左上角区域的所有值得和:[6] [7]
而且,积分图可以只遍历一次图像即可有效的计算出来,因为积分图每一点的(x, y)值是:
一旦积分图计算完毕,对任意矩形区域的和的计算就可以在常数时间内完成。如上图中,阴影矩形区域的值:
-
2、积分图应用
2.1 Haar-like特征值计算
以如下一种 Haar-like 边缘特征为例
假设需要计算的这种 Haar-like 特征在图中的位置如下所示:
那么,A,B区域所构成的 Haar-like 边缘特征是:
HarrA−B=Sum(A)−Sum(B)=[SAT4+SAT1−SAT2−SAT3]−[SAT6+SAT3−SAT4−SAT5](4)(4)HarrA−B=Sum(A)−Sum(B)=[SAT4+SAT1−SAT2−SAT3]−[SAT6+SAT3−SAT4−SAT5]显然,对一个灰度图而言,事先将其积分图构建好,当需要计算灰度图某个区域内所有像素点的像素值之和的时候,利用积分图,通过查表运算,可以迅速得到结果。
2.2 使用积分图像实现自适应阈值化
自适应阈值是一种局部方法。它的原理是根据每个像素的邻域(如 5x5)计算阈值,如将每个像素的值与指定的邻域的平均值进行比较,如果某像素的值与它的局部平均值差别很大,就会被当作异常值在阈值化过程中被分离。
如若不采用积分图像,则每个像素比较时,都需要进行 5 x 5 次加法运算;而采用积分图像,运算复杂度不随邻域大小而改变,每次只需计算 2 次加法和 2 次减法。
2.3 Boxfilter 快速计算
积分图可以使复杂度为O(MN)的求和, 求方差等运算降低到O(1)或近似于O(1)的复杂度,但它的缺点是不支持多尺度。
Boxfilter 的原理有点类似 Integral Image,而且比它还要快,但是实现步骤比较复杂。在计算矩形特征之前,Boxfilter 与 Integral Image 都需要对图像进行初始化(即对数组A赋值), 不同于 Integral Image, Boxfilter 的数组 A 中的每个元素的值是该像素邻域内的像素和(或像素平方和), 在需要求某个矩形内像素和的时候,直接访问数组中对应的位置就可以了。因此可以看出它的复杂度是O(1)。
Boxfilter 的细节可以移步这里.
2.4 滑动窗口
其实就是上面的 Boxfilter 中使用的方法.
在车牌字符分割时,设计了一个动态模板在车牌图像上滑动,并且每次滑动都计算一次模板内包含的非零像素点个数,使用积分图来计算每次滑动后区域内的非零像素点个数,效率非常高。