欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

ISP 算法|双边滤波器

最编程 2024-04-07 15:05:46
...

接下来是ISP中的重量级滤波器,大名鼎鼎的双边滤波(Bilateral Filter),这个算法是 Tomasi和Manduchi在1998年提出的。双边滤波除了空域权重以外,增加了一个和图像亮度有关的值域权重,使得双边在去噪声的同时可以保留图像的边界和细节。所以,“双边”的两个边一个是“空域边”,也就是space,一个是“值域边”,即range。

一、算法原理

双边滤波器可以看成是两个二维滤波器,包含一个空域kernel和一个值域kernel,两个kernel都是高斯函数,公式如(1)所示:

前面是空域权重,后面是值域权重,值域权重由中心点和周围像素的相似程度决定。在平坦区域,由于中心点和周围像素亮度值接近,所以窗口内值域权重接近于1,此时空域权重起主导作用,滤波效果近似于高斯平滑。而在有边界的区域,由于中心点和部分周围像素差距比较大,差距大的这部分权重被抑制,只使用和边界相似部分的权重,因此滤波后边界被保留了下来。

    这里多解释一下,为什么会一直使用高斯kernel,它到底为什么要这么设计?因为在图像中,有一个空间相似性的概念,当前pixel的亮度和其周围像素的亮度值接近的概率会高一些,离当前像素位置越远,则差异越大,高斯滤波就是基于这个概念设计的。当然这个假设也不绝对正确,在图像的边缘处就不符合这个规律,所以高斯kernel会把图像边界也一起模糊掉。

    下面这幅来自论文的截图进一步解释了双边滤波的原理,(a)是输入图像,要滤波的中心点在明区的一个点上,(b)就是公式(1)的权重,是空域权重和值域权重相乘的结果,本来高斯权重是钟形的,但是值域权重增加进来之后,由于当前点落在明区上,所以暗区到当前点的值域权重被抑制为0了,明区到当前点的权重被保留为1了,与空域的高斯权重相乘后,就把一部分高斯权重给抑制成了0,另一部分保留了下来,最后获得了如(b)所示的权重,(c)是滤波后的结果,和输入的(a)相比,(c)保留了(a)的形状,但是(a)中的噪点都被滤波掉了,双边的保边效果显而易见。

    双边的效果虽然好,但是双边的复杂度也很高,为O(Nr2),而且随着窗口r增大,计算量会进一步飙升,有不少论文都提出了改进算法,比如一种3维网格的快速双边算法,这种网格的快速双边算法做RTL硬件实现代价太大,从这里也可以看出来,对实现来说,挑选算法的重要性,有可能改进后复杂度下降了,反而不能硬件实现了。

二、图像处理效果与对比

    1.值域和空域各自的贡献

为了能看的更清楚,把输入的lena图像转到yuv域,然后单独对y分量添加高斯噪声,得到的结果如图1所示(左边是输入的原图,右边是加噪后的图像):

图1  加噪后的lena图

对含噪图像使用双边滤波,19×19窗口大小,从图中挑选平坦区域(红色是中心点)和边缘区域(绿色是中心点)的权重放大图来进一步观察,从左到右的顺序依次为:当前块、空域权重、值域权重和混合权重,混合权重就是空域权重×值域权重。


图 2  局部权重放大图

从图2可以看见平坦区域的混合权重是空域范围内的所有权重,滤波效果近似于高斯平滑。边缘区域的中心点落在了暗区,其值域权重的左上部分就被抑制掉了,和空域权重相乘之后,就只保留了暗区部分的权重。

为了看出双边滤波的保边效果,用高斯滤波的结果来参考对比,窗口大小为19×19,高斯滤波使用的kernel就是双边的空域权重,得到的滤波结果如下图3所示(左边是双边滤波的结果,右边是高斯滤波的结果):

图 3  双边滤波和高斯滤波对比

   对比图3可以看出来,如果只做高斯滤波,效果会很模糊,如果用双边滤波,加上值域权重的限制,可以获得相对清晰的边界。

    2.值域和空域的配合
4  双边不同参数对比

图4分别是窗口大小为5×5、9×9和17×17的双边滤波结果,sigma_space配置为窗口半径。
图 4  双边不同参数对比

从图4可以看出,双边滤波和高斯滤波一样,也是sigma越大,图像越模糊,sigma在一定程度上也反映了高斯的截止阈值。以sigma_range为例,如果sigma_range=0.1,则代表着中心点和周围的差值diff大于0.1的都需要被抑制,此时边界和细节会被保留的更多,而sigma_range=0.4的时候值域权重被抑制情况会减少,图像就会更加模糊。

sigma和高斯函数的分子数值范围有关,空域部分计算的是距离,距离是整数,所以窗口越大,对应的sigma_space也配置的越大,值域部分计算的是亮度,输入图像的值域范围是0~1,所以sigma_range是小数。

    3.双边遇上孤立点会发生些什么?

先说结论,双边滤波对孤立点的滤波效果不好。对lena图添加高斯和椒盐两种噪声,得到的降噪效果如下:

图 5  当双边遇上椒盐噪声

图5里面的高斯噪声被平滑掉了,但是椒盐噪声仍然顽固存在,找一颗椒盐噪声放大一下看看双边都对它做了什么。

图 6  边界上的孤立点发生了什么

图6中任意选了一个边界上的孤立点,其值域权重只有中心点,周围的像素都无法给它贡献权重,所以最终混合出的权重几乎只有它自己,相当于没做滤波。

从这里可以看出,针对不同噪声选择滤波器的重要性,事实上在ISP中也是先用中值滤波把图像中的坏点给处理掉,然后再用其他滤波器降高斯噪声的。

ISP Pipeline中,在RAW域、RGB域、YUV域都可以加上一些去噪模块。在RAW域的DPC模块中,有些较弱的坏点但是又不能被RAW域去噪、DPC模块去除掉,在后续的一些亮度调节模块中,可能又会把较弱的坏点给放大,形成类似椒盐噪声的形态。此时,如果能在RGB域或者YUV域去噪模块在增加一个中值滤波的话,获得的去噪效果可能更好。


————————————————
版权声明:本文为****博主「大凝的IC进阶之路」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.****.net/OdellSwan/article/details/132612084