1.积分图原理
图像是由一系列的离散像素点组成,因此图像的积分其实就是求像素点的和。积分图,又称为Summed Area Table,积分图中每个点的值是原图像中该点左上角的所有像素值之和。
首先建立一个数组A作为积分图像,其宽和高与原图像相等。然后对这个数组赋值,每个点存储的是该点与图像原点所构成的矩形中所有像素点的和。
积分图数组初始化之后, 我们就得到了一张积分图:
点1的积分 SAT1=Sum(Ra),
点2的积分 SAT2=Sum(Ra)+Sum(Rb),
点3的积分 SAT3=Sum(Ra)+Sum(Rc),
点4的积分 SAT4=Sum(Ra)+Sum(Rb)+Sum(Rc)+Sum(Rd)
那么为了计算某个矩形像素和,比如区域 Rd 内所有点的像素值之和(积分)可以表示为:Sum(Rd)=SAT1+SAT4−SAT2−SAT3
所以无论矩形的尺寸大小,只需查找积分图像 4 次就可以快速计算任意矩形内像素值的和, 即算法复杂度为 O(4)。积分图使得图像的局部矩形求和运算的复杂度从O(MN)下降到了O(4)。积分图的数据需要使用int来存储,在嵌入式中使用,会增加带宽量。
来自 <https://www.cnblogs.com/magic-428/p/9149868.html>
2.积分图的应用
积分图可以用来计算均值滤波,通过查窗口4个顶点的积分值,快速计算出窗口内(ksize*ksize)的所有像素点之和,再除以ksize*ksize,即可得到对应点的均值,以此实现均值滤波的效果。
3.boxfilter
boxfilter的原理和积分图的有点类似,速度比积分图要快,相比较积分图而言,它的缺点是不支持多尺度(即任意矩形框之和),而且实现步骤比较复杂。
boxfilter 的初始化过程如下:
1、给定一张图像,宽高为(M,N),确定待求矩形模板的宽高(m,n),如图紫色矩形。图中每个黑色方块代表一个像素,红色方块是假想像素。
2、开辟一段大小为 M 的数组,记为 buff, 用来存储计算过程的中间变量,用红色方块表示.
3、将矩形模板(紫色)从左上角(0,0)开始,逐像素向右滑动,到达行末时,矩形移动到下一行的开头(0,1),如此反复,每移动到一个新位置时,计算矩形内的像素和,保存在数组 A ( buff 只是用来缓存中间变量的)中。以 (0,0) 位置为例进行说明:首先将绿色矩形内的每一列像素求和,结果放在 buff 内(红色方块),再对蓝色矩形内的像素求和,结果即为紫色特征矩形内的像素和,把它存放到数组A中,如此便完成了第一次求和运算。
4、每次紫色矩形向右移动时,实际上就是求对应的蓝色矩形的像素和,此时只要把上一次的求和结果减去蓝色矩形内的第一个红色块,再加上它右面的一个红色块,就是当前位置的和了,用公式表示 sum[i] = sum[i-1] - buff[j] + buff[j+m].
5、当紫色矩形移动到行末时,需要对 buff 进行更新。因为整个绿色矩形下移了一个像素,所以对于每个buff[i], 需要加上一个新进来的像素,再减去一个出去的像素,然后便开始新的一行的计算了。
Boxfilter 的初始化过程非常快速。从初始化的计算速度上来说,Boxfilter 比 Integral Image 要快一些,大约 25%。在具体求某个矩形特征时,Boxfilter 比 Integral Image 快 4 倍,所谓的 4 倍其实就是从 4 次加减运算降低到 1 次,虽然这个优化非常渺小,但是把它放到几层大循环里面,还是能节省一些时间的。对于那些实时跟踪检测算法,一帧的处理时间要严格在 40ms 以下,正是这些细小的优化决定了程序的效率,积少成多,聚沙成塔。
来自 <https://www.cnblogs.com/magic-428/p/9150410.html>
boxfilter滤波(盒子滤波、方框滤波),是一种线性滤波,即对邻域中的像素的计算为线性运算。boxfilter的原理,是用一个内核和图像进行卷积。
内核为:
从以上公式可以看出,当盒子滤波的内核进行归一化(每个权重/ksize.width/ksize.height,即使卷积核所有的元素之和等于1)的时候,就是均值滤波。均值滤波处理即将当前像素点及其相邻像素点(窗口中所有像素点)之和的均值作为当前像素点的目标值。
一切需要求取某个邻域内像素之和的应用,都可以使用boxfilter进行处理,比如均值滤波,引导滤波,计算Haar特征等。
4.引导滤波通过boxfilter来实现的原理
引导滤波的原理就是:通过一张引导图G(导向图),对目标图像P(输入图像)进行滤波处理,使得最后的输出图像大体上与目标图像P相似,但是纹理部分与引导图G相似。其典型应用有两个:保边图像平滑(保边降噪)和抠图。
引导滤波的原理如下(有很多需要求均值的过程,因此可以使用boxfilter来处理):
源码:https://www.csdn.net/tags/NtzaEg3sMDI4NDYtYmxvZwO0O0OO0O0O.html