boxfilter盒子滤波

简介: **Boxfilter** 是图像处理中的优化技术,通过积分图实现,将O(MN)复杂度的像素和、方差运算降至O(1)。不同于均值滤波,Boxfilter不计算像素均值,而是直接累加邻域像素值。该方法适用于快速计算局部特征,但不支持多尺度。通过滑动矩形模板并更新中间变量缓冲区,高效地完成滤波操作。

boxfilter盒子滤波

   在模式识别领域,Haar特征是大家非常熟悉的一种图像特征了,它可以应用于许多目标检测的算法中。与Haar相似,图像的局部矩形内像素的和、平方和、均值、方差等特征也可以用类似Haar特征的计算方法来计算。这些特征有时会频繁的在某些算法中使用,因此对它的优化势在必行。Boxfilter就是这样一种优化方法,它可以使复杂度为O(MN)的求和,求方差等运算降低到O(1)或近似于O(1)的复杂度,它的缺点是不支持多尺度

1.基本原理

    与均值滤波不同的是,方框滤波不会计算像素的均值。在均值滤波中,滤波结果的像素值是任意一个点的邻域平均值,等于各邻域像素值之和除以邻域面积。而在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和。


积分图实现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], 需要加上一个新进来的像素,再减去一个出去的像素,然后便开始新的一行的计算了。

Image.png

相关文章
|
3月前
|
机器学习/深度学习
第5章-着色基础-5.2-光源
第5章-着色基础-5.2-光源
26 0
|
3月前
|
图形学
球体投影到像素空间的大小
球体投影到像素空间的大小
31 0
圆角三角形,二次方贝塞尔曲线
圆角三角形,二次方贝塞尔曲线
|
5月前
|
算法 Python
扭曲图像 鼻子拉伸
【6月更文挑战第28天】
28 0
|
6月前
|
前端开发
3D立体盒子练习
3D立体盒子练习
38 0
|
前端开发 JavaScript
神奇的滤镜!巧妙实现内凹的平滑圆角
神奇的滤镜!巧妙实现内凹的平滑圆角
275 0
神奇的滤镜!巧妙实现内凹的平滑圆角
方波、矩形波发生电路仿真
方波、矩形波发生电路仿真
152 0
|
算法 C语言
红外热成像仪 阵列插值-由 32*24 像素到 512*384 像素
MLX90640 的 32*24=768 像素虽然比以往的 8*8 或者 16*8 像素提高了很多,但若直接用这些像素还是不能很好的形成热像图,为了使用这些像素点平滑成像就需要对其进行插值,使用更多的像素来绘制图像。 看了一些别人的算法,感觉主要就是多项式插值,仅是插值方法的组合方式不同。
红外热成像仪  阵列插值-由 32*24 像素到 512*384 像素
效果处理(内阴影、外阴影、外发光、内发光、投影)
效果处理(内阴影、外阴影、外发光、内发光、投影)
效果处理(内阴影、外阴影、外发光、内发光、投影)