双边线性滤波与Image Guided filter

滤波的作用可以进行平滑,以去除一些噪点,但是,这也同时会弱化边缘,当对边缘有较高要求时,一般的滤波方法,如高斯滤波,中值滤波等则效果不佳。故为达到此目的,产生了biliner filter与image guided filter,在对图像进行平滑时,尽可能地保持边缘信息。

至于具体的实现opencv中也都有了相应的函数接口,原理可参见一篇博文blog.csdn.net/pi9nc/article/details/26592377

在这儿主要来说说guided filter的滤波方式,因为最近的项目正好需要尝试使用这种方法。

顾名思义,引导滤波,需要涉及到引导图片,在这儿引导图片可以是原始需要滤波的图片也可以是与原始图片同大小的其他图片(根据实际需要设置相应的引导图片)。然后便是对图片进行线性化的操作,那为什么会想到要用线性化的方式来计算呢?因为所想要达到的滤波后的效果是需要尽可能地保持边缘,也就是保持相应的梯度信息(空间关系),而对线性变换求梯度可知变换前后有相似的梯度值,只是有比例关系。具体的原理表达式1如下:

guided filter
gradient

其中I表示的是引导图片,ak,bk则是以像素k为窗口中心时的线性变换系数。最后,因为同一个像素点可能会出现在多个窗口中,所以其最后的像素点输出值为其所在的所有窗口计算值取平均。即如表达式2所示:

result

好了,知道最后的结果值是如何输出的了,那么现在问题来了,如何计算得出相应的线性变换的系数呢?利用线性回归的方式来计算得出最小二乘中的系数:

calculation

此处ak前的系数(写作e)防止所求得的ak值过大,同时也可以用以控制滤波的强烈程度。在窗口大小不变的情况下,随着e的增大,滤波效果也就越明显。

最后可得:ak,bk的值为:

parameter
explanation

根据上面ak,bk的表达式,可以分析得出:

双边线性滤波与Image Guided filter_第1张图片
instruction

I指的是引导图,P为输入的待滤波图。另外需要补充的一点是,当在同样的e的情况下,若窗口越大,则模糊越明显。

于此,便可利用该线性的方式来对图片进行滤波,且保持了相应的边缘信息。

你可能感兴趣的:(双边线性滤波与Image Guided filter)