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

相关文章
|
存储 vr&ar 图形学
法线贴图的视线原理
使用法线贴图可以大大提高渲染效果,使低多边形数的模型看起来具有高多边形数模型的细节和真实感。在游戏开发、电影制作和虚拟现实等领域,法线贴图被广泛应用于增强场景和物体的视觉效果。
160 2
|
3月前
|
前端开发
盒子的宽与高
盒子的宽与高。
40 4
|
4月前
|
编解码 定位技术
航摄比例尺、成图比例尺、地面分辨率与航摄设计用图比例尺
航摄比例尺、成图比例尺、地面分辨率与航摄设计用图比例尺
321 0
圆角三角形,二次方贝塞尔曲线
圆角三角形,二次方贝塞尔曲线
|
6月前
|
前端开发
canvas图形操作(缩放、旋转、位移)
canvas图形操作(缩放、旋转、位移)
|
7月前
|
前端开发
3D立体盒子练习
3D立体盒子练习
39 0
|
前端开发 JavaScript
神奇的滤镜!巧妙实现内凹的平滑圆角
神奇的滤镜!巧妙实现内凹的平滑圆角
292 0
神奇的滤镜!巧妙实现内凹的平滑圆角
|
存储 数据可视化 开发者
位移贴图和法线贴图的区别
位移贴图和法线贴图在原理、使用范围、精度和复杂度、生成方式以及存储方式等方面存在差异,开发者可以根据具体需求选择适合的贴图技术。
181 0
|
前端开发
css3 效果全(旋转,放大,倾斜,平移)
css3 效果全(旋转,放大,倾斜,平移)
112 0
|
图形学
Unity 之 获取物体的旋转角正确数值
不管父物体如何设置,都能获取到物体本身旋转角度的正确数值
1074 0

热门文章

最新文章