什么是双边滤波
双边滤波是一种局部的、非线性的、非迭代的滤波技术,它将经典的低通滤波器与边缘停止函数相结合,当像素之间的强度差较大时,边缘停止函数会衰减滤波器的核心。由于同时考虑了相邻像素的灰度相似度和几何贴近度,滤波器的权值不仅依赖于欧氏距离,而且还依赖于灰度/颜色空间中的距离。该滤波器的优点是,它平滑图像的同时保留边缘。
使用双边滤波原因
高斯滤波去降噪,会较明显地模糊边缘,对于高频细节的保护效果并不明显。
双边滤波引入像素之间的欧氏距离作为加权,使其能够在保持平滑去噪的同时表现出良好的保边性。
双边滤波的数学推导
我们都知道,对图像进行空间域滤波的方法是使用一个结构元素(核)来对原图像进行卷积。比如说高斯核像是这样的:
而这个结构会对原图像进行卷积操作。从而得到一个新的图像,即输出图像。在高斯滤波过程中,这个卷积核是不会变的,但是在双边滤波过程中,卷积核是会根据被积像素的邻域进行观察而改变。为了使图像的边缘得到保留,就要根据当前被卷积像素的邻域进行观察,“推断”是否是边缘点和接近边缘的点。因此,卷积核会发生改变,从而保留边缘点。
下面的一组图中,图a是原图像,图c是输出。而中间的图像是什么呢?显然,这是原图中根据某个点的邻域生成的,专属于这个点的结构元素。
可以看到,原图中显然有一个灰度的突变,这就表示是边缘。灰度值高的地方不应该和灰度低的区域进行混合,所以,图像中接近边缘的一个点就会生成图b这样的结构元素。那么这个接近边缘的点在哪里呢?大概就在我标出的这个区域。
而生成这样的结构元素的方法,是将我们原本的高斯核,与一个能“推断”出是否在边缘点的结构元素相乘,如下图中间的结构元素。
双边滤波的原理图
双边滤波计算公式
双边滤波器的输出像素依赖于当前被卷积像素的邻域。𝑖和𝑗是当前被卷积像素的坐标点,𝑘和𝑙是邻域像素的坐标点
几何贴近度函数:
Gi,j,k,l=exp(−(𝑖−𝑘)2+ (𝑗−𝑙)22𝜎2)
灰度相似/边缘停止函数:
可以看到,它 取决于被卷积像素的灰度值和邻域像素的灰度值的差。我们知道,边缘会有较大的灰度变化,而这个公式就会使边缘和边缘另一边的区域生成比较小的权值,与被卷积像素的灰度值类似的区域会生成比较大的权值,就像之前图中的一个“断崖”。
相乘就得到加权系数w(这里的加权系数是位于领域点的权重值) :
以此类推,算完点邻域内所有点的权重值,将点
所有的邻域像素乘以对应的权重系数再归一化就能得到点
的像素值。
交叉双边滤波
与双边滤波相同,同时考虑相邻像素的灰度相似度和几何贴近度:
但是与双边滤波不同的是:交叉双边滤波是在A图像上考虑像素灰度相似度和几何贴近度来生成滤波核,在B图像上进行滤波。
中根据某个点的邻域生成的,专属于这个点的结构元素。
可以看到,原图中显然有一个灰度的突变,这就表示是边缘。灰度值高的地方不应该和灰度低的区域进行混合,所以,图像中接近边缘的一个点就会生成图b这样的结构元素。那么这个接近边缘的点在哪里呢?大概就在我标出的这个区域。
而生成这样的结构元素的方法,是将我们原本的高斯核,与一个能“推断”出是否在边缘点的结构元素相乘,如下图中间的结构元素。
下图是双边滤波的原理示意图:
双边滤波函数在计算的时候同时考虑了相邻像素的灰度相似度和几何贴近度
双边滤波器的输出像素依赖于当前被卷积像素的邻域。𝑖和𝑗是当前被卷积像素的坐标点,𝑘和𝑙是邻域像素的坐标点
几何贴近度函数:
Gi,j,k,l=exp(−(𝑖−𝑘)2+ (𝑗−𝑙)22𝜎2)
灰度相似/边缘停止函数:
可以看到,它 取决于被卷积像素的灰度值和邻域像素的灰度值的差。我们知道,边缘会有较大的灰度变化,而这个公式就会使边缘和边缘另一边的区域生成比较小的权值,与被卷积像素的灰度值类似的区域会生成比较大的权值,就像之前图中的一个“断崖”。
相乘就得到加权系数w :
将p点所有的邻域像素乘以权重系数再归一化就能得到p点的像素值
交叉双边滤波:与双边滤波相同,同时考虑相邻像素的灰度相似度和几何贴近度,
但是与双边滤波不同的是:交叉双边滤波是在A图像上考虑像素灰度相似度和几何贴近度来生成滤波核,在B图像上进行滤波。
然后我们可以进行其他处理:
比如在做光线追踪的时候,可以先渲染出物体(对物体图生成双边滤波),再渲染出没有物体的光照量再对光照量进行滤波,再乘到物体本来的颜色上,生成考虑光照的物体图像。