【图像处理】-022 双边滤波
之前工作中为了进行人脸美颜的磨皮工作,对双边滤波进行了研究,这里重新整理记录一下。
无论是在频域滤波还是空域滤波中,都讲到了高斯滤波,高斯滤波可以平滑图像、降低噪声的效果。在图像降噪有应用,但高斯滤波的平滑效果是对整个滤波区域一致的,也就是说对整个图像中,无论是边缘还是平坦区域,滤波强度都一致。而实际图像中,图像的边缘信息通常比平坦区域的信息更重要,所以,需要一种滤波,既能够对平坦区域进行滤波,同时对边缘信息能够很好的保持。由此引出了双边滤波。
1 双边滤波
1.1 基本推导
双边滤波(Bilateral Filter)是一种非线性滤波器,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑了空域信息和灰度相似性,从而力求在保持图像中边缘信息的同时,又实现降噪的效果。具有简单、非迭代以及局部性的特点。
在空域中,考虑一种移不变的低通局部滤波器:
(1)
h
(
x
)
=
k
d
−
1
∫
∞
∞
∫
∞
∞
f
(
ξ
)
c
(
ξ
−
x
)
d
ξ
\bold{h}(\bold{x})=k_{d}^{-1}\int_{\infty}^{\infty}\int_{\infty}^{\infty}\bold{f}(\xi)c(\xi - \bold{x})d\xi \tag{1}
h(x)=kd−1∫∞∞∫∞∞f(ξ)c(ξ−x)dξ(1)
其中,
h
\bold{h}
h和
f
\bold{f}
f分别表示滤波器的输出和输入图像。为了保持图像的直流分量,
(2)
k
d
=
∫
∞
∞
∫
∞
∞
c
(
ξ
)
d
ξ
k_d=\int_{\infty}^{\infty}\int_{\infty}^{\infty}c(\xi )d\xi \tag{2}
kd=∫∞∞∫∞∞c(ξ)dξ(2)
与空域中的滤波器类似,在值域中也可以考虑一种类似的滤波器:
(3)
h
(
x
)
=
k
r
−
1
∫
∞
∞
∫
∞
∞
f
(
ξ
)
s
(
f
(
ξ
)
−
f
(
x
)
)
d
ξ
\bold{h}(\bold{x})=k_{r}^{-1}\int_{\infty}^{\infty}\int_{\infty}^{\infty}\bold{f}(\xi)s(\bold{f}(\xi) - \bold{f}(\bold{x}))d\xi \tag{3}
h(x)=kr−1∫∞∞∫∞∞f(ξ)s(f(ξ)−f(x))dξ(3)
在这种情况下,滤波器核函数衡量的是像素之间在值域内的相似度,所以,归一化的常数是:
(4)
k
r
=
∫
∞
∞
∫
∞
∞
s
(
f
(
ξ
)
−
f
(
x
)
)
d
ξ
k_r=\int_{\infty}^{\infty}\int_{\infty}^{\infty}s(\bold{f}(\xi) - \bold{f}(\bold{x}))d\xi \tag{4}
kr=∫∞∞∫∞∞s(f(ξ)−f(x))dξ(4)
在值域滤波中,空域滤波并不起作用。值域滤波器只是改变了图像的颜色映射表,对于滤波并没有太多的作用。合适的做法,是组合空域滤波和值域滤波,对图像的空域和值域同时施加影响。组合的滤波器如下:
(5)
h
(
x
)
=
k
−
1
∫
∞
∞
∫
∞
∞
f
(
ξ
)
c
(
ξ
−
x
)
s
(
f
(
ξ
)
−
f
(
x
)
)
d
ξ
\bold{h}(\bold{x})=k^{-1}\int_{\infty}^{\infty}\int_{\infty}^{\infty}\bold{f}(\xi)c(\xi - \bold{x})s(\bold{f}(\xi) - \bold{f}(\bold{x}))d\xi \tag{5}
h(x)=k−1∫∞∞∫∞∞f(ξ)c(ξ−x)s(f(ξ)−f(x))dξ(5)
其归一化常数:
(6)
k
(
x
)
=
∫
∞
∞
∫
∞
∞
c
(
ξ
−
x
)
s
(
f
(
ξ
)
−
f
(
x
)
)
d
ξ
k(\bold{x})=\int_{\infty}^{\infty}\int_{\infty}^{\infty}c(\xi - \bold{x})s(\bold{f}(\xi) - \bold{f}(\bold{x}))d\xi \tag{6}
k(x)=∫∞∞∫∞∞c(ξ−x)s(f(ξ)−f(x))dξ(6)
这种组合滤波器称为双边滤波器,它使用与
x
\bold{x}
x相关的相似度和邻近距离替换该像素的值。在平滑区域,邻域内的像素的像素值彼此接近,双边滤波器与普通的空域滤波器工作结果相似,滤除由噪声引起的小的、与邻域内其它像素低相似度的像素。
当双边滤波器的中心被放在亮的一边时,相似度函数 s s s假设值接近1的像素的亮的一侧,值接近0的像素的暗的一侧。此时,23x23的滤波器的相似度函数如图(b)所示,对于图(a)所示的输入,产生图c所示的输出。由于归一化系数k的存在,保证了邻域内所有像素的权值加起来等于1.通俗的说,此时,滤波器会忽略暗侧的像素,对亮侧的像素进行空域滤波。当双边滤波器中心被放到暗侧时,输入的亮侧会被忽略,只对暗侧进行空域滤波。由此,图像的滤波效果有空域滤波器保证,图像边缘信息的保留由值域滤波器保证。
1.2 高斯形式的双边滤波
在上面的推导过程中,空域滤波和值域滤波都可以是高斯形式。此时,距离相近函数
c
c
c和相似度函数
s
s
s都是关于参数的欧几里得距离的高斯函数。
(7)
c
(
ξ
−
x
)
=
e
−
1
2
(
d
(
ξ
−
x
)
σ
d
)
2
c(\xi - \bold{x})=e^{-\frac{1}{2}(\frac{d(\xi - \bold{x})}{\sigma_d})^2} \tag{7}
c(ξ−x)=e−21(σdd(ξ−x))2(7)
其中,
(8)
d
(
ξ
−
x
)
=
∣
∣
ξ
−
x
∣
∣
d(\xi - \bold{x})=||\xi - \bold{x}|| \tag{8}
d(ξ−x)=∣∣ξ−x∣∣(8)
d
d
d是欧几里得距离。相似度函数
s
s
s与
c
c
c相似:
(9)
s
(
ξ
−
x
)
=
e
−
1
2
(
δ
(
f
(
ξ
)
−
f
(
x
)
)
σ
r
)
2
s(\xi - \bold{x})=e^{-\frac{1}{2}(\frac{\delta(\bold{f}(\xi)-\bold{f}(\bold{x}))}{\sigma _r})^2} \tag{9}
s(ξ−x)=e−21(σrδ(f(ξ)−f(x)))2(9)
其中
(10)
δ
(
f
(
ξ
)
−
f
(
x
)
)
=
∣
f
(
ξ
)
−
f
(
x
)
∣
\delta(\bold{f}(\xi)-\bold{f}(\bold{x}))=|\bold{f}(\xi)-\bold{f}(\bold{x})| \tag{10}
δ(f(ξ)−f(x))=∣f(ξ)−f(x)∣(10)
是一种合适的衡量亮度空间中的距离的计算方式。在标量空间中,可以简单地视为像素值的差的绝对值,或者是一种亮度相关的形式。
1.3 个人理解
双边滤波实际上可以看成两个高斯滤波的组合形式,其中空域中的高斯滤波决定滤波的效果,也就是普通的高斯滤波中的强度。值域中的高斯滤波决定双边滤波器的边缘保持能力。 σ d \sigma _d σd和 σ r \sigma _r σr分别决定双边滤波的平滑能力与保边能力。