双边滤波
保边滤波
保边滤波器(Edge Preserving Filter):指在滤波过程中能够有效的保留图像中的边缘信息的一类特殊滤波器
常用保边滤波器:
- 双边滤波器(Bilateral filter)
- 引导滤波器(Guided image filter)
- 加权最小二乘法滤波器(Weighted least square filter)
双边滤波器 Bilateral filter
双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。普通的高斯滤波会将图像的边缘模糊掉,而双边滤波器具有保边特性。
一般的高斯模糊在进行采样时主要考虑了像素间的空间距离关系,但是却并没有考虑像素值之间的相似程度,因此这样我们得到的模糊结果通常是整张图片一团模糊。Bilateral blur的改进就在于在采样时不仅考虑像素在空间距离上的关系,同时加入了像素间的相似程度考虑,因而可以保持原始图像的大体分块进而保持边缘
Bilateral :双边滤波的最终结果由像素值(值域)和像素位置(空域)来共同决定。既考虑了几何邻近性(像素点之间的距离)又考虑到了光学相似性(像素值之间的距离)。需要注意的是,对于彩色的图像,我们在计算光学相似性的时候,应该将3个颜色通道同时考虑,否则,单独处理可能会导致颜色失真。
不同通道像素值的对比度不同,分开进行滤波会打破色彩平衡,引入一些人工的噪声.
主要思想 对空间距离较近,颜色&像素值相似的像素点进行平滑
- Domain Filtering:传统的滤波方法,在计算权重的时候只考虑周围像素点离中心像素点的距离。
- Range Filtering:在计算权重时只考虑图像的灰度或颜色。(单独作用可能使图像的color map失真)
Domain Filtering:B和C点的权重一样
Range Filtering:哪个点的像素值与A点相差比较小,哪个点的影响权重就比较大
下面用图简单解释一下这两种滤波方式的差异,假设左边的是原始图像,右边的是滤波后的图像。首先,我们考虑Domain Filtering,在计算滤波后图像的A点的像素值时,原图像中的各点的影响权重取决于它们到原图像中A点的几何距离。即:B和C点的权重是一样的,即使B和C点的像素值相差很大,也不会造成影响。
Range Filtering则不然,就算B和C点到A点的距离一致,哪个点的像素值与A点相差比较小,哪个点的影响权重就比较大。
将两者结合在一起考虑,就得到了Bilateral Filter。从上面可以看出,Bilateral Filter的定义很简单,只要我们分别定义好两种距离(geometric closeness, photometric similarity),就可以根据这两种距离得出相应的Bilateral Filter
Domain Filter:
\[h(x)=k_d^{-1}(x)\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}f(\xi)c(\xi,x)d\xi\]k的作用是归一化,使各权重因子的和为1。x代表中心像素点,f是像素值,c是geometric closeness的度量函数
Range Filter: $h(x)=k_r^{-1}(x)\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}f(\xi)s(f(\xi),f(x))d\xi$
k的作用同样是归一化。s的photometric similarity的度量函数
Bilateral Filter:$h(x)=k^{-1}(x)\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}f(\xi)c(\xi,x)s(f(\xi),f(x))d\xi$
下面用一幅图简单讲讲Bilateral Filter,可以看到,输入是一张黑白对分,且有很多起伏噪点的图像。将箭头所指的该点作为中心点,考虑其他像素点对它的影响权重。空间上的权重分布图Gs以及值域上的权重分布图Gr分别计算得出,将两者乘在一起就得到了Bilateral的权重(注意,目前得出的仅仅是针对当前像素点的,其他像素点对其的影响权重)。所有点都用这样的方式计算以后,我们可以看到最终的输出有不错的保边效果。
一般采用高斯函数作为两种距离的度量函数
\[h(x)=k\_d^{-1}(x)\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}f(\xi)c(\xi,x)d\xi\]\(c(\xi,x)=e^{-\frac{1}{2}(\frac{\|\xi-x\|}{\sigma_d})^2}\) \(\sigma_d\) ——geometric spread,越大越模糊,融合了更远距离的值
\(s(\xi,x)=e^{-\frac{1}{2}(\frac{\|f(\xi)-f(x)\|}{\sigma_r})^2}\) \(\sigma_r\) ——photometric spread
其中|.|表示欧式范数,即l2-norm,再简单地说就是“差的平方”
对于一张灰度图,σ__r取100或300时,对于σ__d=1的情况影响较小,此时domain filter可看作一个标准的高斯滤波器,σ_r取值较小时,整个滤波器就体现出来保边平滑性,对于σ_d=10, σ_r较大的情况,一些细节被平滑了,直方图压缩效应所致。
常见的高斯平滑滤波就是由像素位置单边决定的,表达式如下:
Domain Filter
\[g1(i,j) = \frac{\sum_{k, l}{f(k,l)*d(i,j,k,l)}}{\sum_{k,l}d(j,j,k,l)}\]其中:
\[d(i,j,k,l)=exp(-\frac{(i-k)^2+(j-l)^2}{2\sigma_{d}^2})\]Range Filter
\[g2(i,j) = \frac{\sum_{k, l}{f(k,l)*r(i,j,k,l)}}{\sum_{k,l}r(j,j,k,l)}\]其中
\[r(i,j,k,l)=exp(-\frac{\|f(i,j)-f(j,l)\|^2}{2\sigma_{r}^2})\]Bilateral Filter
\[bilateral\_filter(i,j) = \frac{\sum_{k, l}{f(k,l)*w(i,j,k,l)}}{\sum_{k,l}w(j,j,k,l)}\]其中
\[w(i,j,k,l)=exp(-\frac{(i-k)^2+(j-l)^2}{2\sigma_{d}^2}-\frac{\|f(i,j)-f(j,l)\|^2}{2\sigma_{r}^2})\]双边滤波器中的一边即为上述的高斯平滑滤波,两个像素物理距离越大则权值越小,反之则权值越大。双边滤波器中另一边由像素值值域决定,两个像素,值相差越小,越不可能是边缘,那么越应该对其进行平滑处理,也就是应该提高其在滤波器中的权值。反之,像素值相差越大则越有可能是边缘,则应该尽力保留。