积分图和boxfilter

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值