bilateral filter双边滤波器的通俗理解

article/2025/10/26 3:35:26

bilateral filter双边滤波器的通俗理解


    图像去噪的方法很多,如中值滤波,高斯滤波,维纳滤波等等。但这些降噪方法容易模糊图片的边缘细节,对于高频细节的保护效果并不明显。相比较而言,bilateral filter双边滤波器可以很好的边缘保护,即可以在去噪的同时,保护图像的边缘特性。双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度像素值相似度的一种折衷处理,同时考虑空域信息灰度相似性,达到保边去噪的目的(不理解这几个概念没关系,后面会慢慢解释)。


1. 双边滤波(Bilateral filter)的原理

     双边滤波器之所以能够做到在平滑去噪的同时还能够很好的保存边缘(Edge Preserve),是由于其滤波器的核由两个函数生成:空间域核和值域核

  • (1)空间域核:由像素位置欧式距离决定的模板权值w_d

                                                 w_d(i,j,k,l) = exp(-\frac{(i-k)^2 + (j -l)^2}{2\sigma_d^2})

    q(i,j)为模板窗口的其他系数的坐标;其中p(k,l)为模板窗口的中心坐标点;\sigma_dσ_d为高斯函数的标准差。 使用该公式生成的滤波器模板和高斯滤波器使用的模板是没有区别的。

    在一些博客和教程里,这个权值w_d称为定义域核,也称为空间系数,或空间域(spatial domain S)。显示由w_d的计算公式可知,它是计算临近点q到中心点p临近程度,因此定义域核w_d是用于衡量空间临近的程度。

  • (2)值域核:由像素值的差值决定的模板权值w_r

                                                w_r(i,j,k,l) = exp(-\frac{\left \| f(i,j)- f(k,l)\right \|^2}{2\sigma_r^2})

    其中,q(i,j)为模板窗口的其他系数的坐标,f(i,j)表示图像在点q(i,j)处的像素值;p(k,l)为模板窗口的中心坐标点,对应的像素值为f(k,l)\sigma_rσ_d为高斯函数的标准差。

    一般将权值w_r称为值域核,像素值域(range domain R),不管是值域核w_r还是空间域核w_d,其大小都在[0 1]之间

  • (3)将上述两个模板相乘就得到了双边滤波器的模板权值:

                                                w(i,j,k,l) = w_d(i,j,k,l) * w_r(i,j,k,l) = exp(-\frac{(i-k)^2 + (j -l)^2}{2\sigma_d^2}-\frac{||f(i,j)-f(k,l)||^2}{2\sigma_r^2})

    因此,双边滤波器的数据公式可以表示如下:

                                               g(i,j)=\frac{\sum_k_l f(k,l)w(i,j,k,l)))}{\sum_k_l w(i,j,k,l)}


2. 双边滤波(Bilateral filter)理解

     双边滤波(Bilateral filter)其综合了高斯滤波器(Gaussian Filter)和α-截尾均值滤波器(Alpha-Trimmed mean Filter)的特点,同时考虑了空间域与值域的差别,而Gaussian Filter和α均值滤波分别只考虑了空间域和值域差别。高斯滤波器只考虑像素间的欧式距离,其使用的模板系数随着和窗口中心的距离增大而减小;α-截尾均值滤波器则只考虑了像素灰度值之间的差值,去掉α%的最小值和最大值后再计算均值。

2.1 空域权重w_d和值域权重w_r的意义:

  • 空域权重w_d衡量的是 p,q 两点之间的距离,距离越远权重越低;
  • 值域权重w_r衡量的是 p,q两点之间的像素值相似程度,越相似权重越大

这里从图像的平坦区域边缘区域定性分析双边滤波的降噪效果

  • 在平坦区域,临近像素的像素值的差值较小,对应值域权重w_r接近于1,此时空域权重w_d起主要作用,相当于直接对此区域进行高斯模糊。因此,平坦区域相当于进行高斯模糊。
  • 在边缘区域,临近像素的像素值的差值较大,对应值域权重w_r接近于0,导致此处核函数下降(因w=w_r*w_d),当前像素受到的影响就越小,从而保持了原始图像的边缘的细节信息。

3. Opencv双边滤波函数:

    opencv中提供了bilateralFilter()函数来实现双边滤波操作,其原型如下:

void cv::bilateralFilter(InputArray src,
OutputArray 	dst,
int 	d,
double 	sigmaColor,
double 	sigmaSpace,
int 	borderType = BORDER_DEFAULT 
)		
  • InputArray src: 输入图像,可以是Mat类型,图像必须是8位或浮点型单通道、三通道的图像。 
  • OutputArray dst: 输出图像,和原图像有相同的尺寸和类型。 
  • int d: 表示在过滤过程中每个像素邻域的直径范围。如果这个值是非正数,则函数会从第五个参数sigmaSpace计算该值。 
  • double sigmaColor: 颜色空间过滤器的sigma值,这个参数的值月大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域。 (这个参数可以理解为值域核w_r\sigma_r
  • double sigmaSpace: 坐标空间中滤波器的sigma值,如果该值较大,则意味着越远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当d>0时,d指定了邻域大小且与sigmaSpace无关,否则d正比于sigmaSpace. (这个参数可以理解为空间域核w_d\sigma_d
  • int borderType=BORDER_DEFAULT: 用于推断图像外部像素的某种边界模式,有默认值BORDER_DEFAULT.

     双边滤波器可以很好的保存图像边缘细节而滤除掉低频分量的噪音,但是双边滤波器的效率不是太高,花费的时间相较于其他滤波器而言也比较长。 
     对于简单的滤波而言,可以将两个sigma值设置成相同的值,如果值<10,则对滤波器影响很小,如果值>150则会对滤波器产生较大的影响,会使图片看起来像卡通。 

 示例代码:

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>using namespace std;
using namespace cv;//定义全局变量
const int g_ndMaxValue = 100;
const int g_nsigmaColorMaxValue = 200;
const int g_nsigmaSpaceMaxValue = 200;
int g_ndValue;
int g_nsigmaColorValue;
int g_nsigmaSpaceValue;Mat g_srcImage;
Mat g_dstImage;//定义回调函数
void on_bilateralFilterTrackbar(int, void*);int main()
{g_srcImage = imread("lena.jpg");//判断图像是否加载成功if(g_srcImage.empty()){cout << "图像加载失败!" << endl;return -1;}elsecout << "图像加载成功!" << endl << endl;namedWindow("原图像", WINDOW_AUTOSIZE);imshow("原图像", g_srcImage);//定义输出图像窗口属性和轨迹条属性namedWindow("双边滤波图像", WINDOW_AUTOSIZE);g_ndValue = 10;g_nsigmaColorValue = 10;g_nsigmaSpaceValue = 10;char dName[20];sprintf(dName, "邻域直径 %d", g_ndMaxValue);char sigmaColorName[20];sprintf(sigmaColorName, "sigmaColor %d", g_nsigmaColorMaxValue);char sigmaSpaceName[20];sprintf(sigmaSpaceName, "sigmaSpace %d", g_nsigmaSpaceMaxValue);//创建轨迹条createTrackbar(dName, "双边滤波图像", &g_ndValue, g_ndMaxValue, on_bilateralFilterTrackbar);on_bilateralFilterTrackbar(g_ndValue, 0);createTrackbar(sigmaColorName, "双边滤波图像", &g_nsigmaColorValue,g_nsigmaColorMaxValue, on_bilateralFilterTrackbar);on_bilateralFilterTrackbar(g_nsigmaColorValue, 0);createTrackbar(sigmaSpaceName, "双边滤波图像", &g_nsigmaSpaceValue,g_nsigmaSpaceMaxValue, on_bilateralFilterTrackbar);on_bilateralFilterTrackbar(g_nsigmaSpaceValue, 0);waitKey(0);return 0;
}void on_bilateralFilterTrackbar(int, void*)
{bilateralFilter(g_srcImage, g_dstImage, g_ndValue, g_nsigmaColorValue, g_nsigmaSpaceValue);imshow("双边滤波图像", g_dstImage);
}

【尊重原创,转载请注明出处】:https://blog.csdn.net/guyuealian/article/details/82660826


参考资料:

【1】https://www.cnblogs.com/wangguchangqing/p/6416401.html

【2】https://blog.csdn.net/MoFMan/article/details/77482794

 

 

 


http://chatgpt.dhexx.cn/article/oN2C8x0h.shtml

相关文章

Bilateral Filtering(双边滤波) for SSAO

1. 简介 图像平滑是一个重要的操作&#xff0c;而且有多种成熟的算法。这里主要简单介绍一下Bilateral方法&#xff08;双边滤波&#xff09;&#xff0c;这主要是由于前段时间做了SSAO&#xff0c;需要用bilateral blur 算法进行降噪。Bilateral blur相对于传统的高斯blur来说…

双边滤波与高斯滤波

高斯滤波原理 在数字图像中的高斯噪声主要来源出现在采集期间。由于不良照明或高温引起的传感器噪声。如果一个噪声&#xff0c;它的幅度分布服从高斯分布&#xff0c;而它的功率谱密度又是均匀分布的&#xff0c;则称它为高斯白噪声。高斯滤波器是一种线性滤波器&#xff0c;…

双边滤波(bilateral filter)以及联合双边滤波(joint bilateral filter)

文章目录 双边滤波理论公式代码&#xff08;C&#xff09;数学辅助理解 联合双边滤波&#xff08;joint bilateral filter&#xff09;参考链接 写在最后 双边滤波 自用备忘&#xff0c;若侵则删。 理论公式 利用二维高斯函数生成空间域核&#xff0c;一维高斯函数生成颜色域…

双边滤波(Bilateral filter)

双边滤波器&#xff08;Bilateral filter&#xff09;是一种可以保边去噪的滤波器。可以滤除图像数据中的噪声&#xff0c;且还会保留住图像的边缘、纹理等&#xff08;因噪声是高频信号&#xff0c;边缘、纹理也是高频信息&#xff0c;高斯滤波会在滤除噪声的同时使得边缘模糊…

双边滤波器cv2.bilateralFilter

双边滤波器cv2.bilateralFilter 双边滤波是综合考虑空间信息和色彩信息的滤波方式&#xff0c;在滤波过程中能够有效地保护图像内的边缘信息&#xff0c;双边滤波在计算某一个像素点的新值时&#xff0c;不仅考虑距离信息&#xff08;距离越远&#xff0c;权重越小&#xff09…

opencv-双边滤波

一、双边滤波原理 双边滤波&#xff08;Bilateral Filter&#xff09;是非线性滤波中的一种。这是一种结合图像的空间邻近度与像素值相似度的处理办法。在滤波时&#xff0c;该滤波方法同时考虑空间临近信息与颜色相似信息&#xff0c;在滤除噪声、平滑图像的同时&#xff0c;…

Opencv之图像滤波:6.双边滤波(cv2.bilateralFilter)

前面我们介绍的滤波方法都会对图像造成模糊&#xff0c;使得边缘信息变弱或者消失&#xff0c;因此需要一种能够对图像边缘信息进行保留的滤波算法&#xff0c;双边滤波是综合考虑空间信息和色彩信息的滤波方式&#xff0c;在滤波过程中能够有效地保护 图像内的边缘信息。 6.1…

Bilateral Filters(双边滤波算法)原理及实现

双边滤波算法原理&#xff1a; 双边滤波是一种非线性滤波器&#xff0c;它可以达到保持边缘、降噪平滑的效果。和其他滤波原理一样&#xff0c;双边滤波也是采用加权平均的方法&#xff0c;用周边像素亮度值的加权平均代表某个像素的强度&#xff0c;所用的加权平均基于高斯分…

双边滤波的基本原理

双边滤波&#xff08;Bilateral filter&#xff09;是一种非线性的滤波方法&#xff0c;本质是基于高斯滤波&#xff0c;目的是解决高斯滤波造成的边缘模糊。结合图像的空间邻近度和像素值相似度的一种折处理&#xff0c;同时考虑空域信息和灰度相似性&#xff0c;达到保边去噪…

双边滤波算法原理

1. 简介 图像平滑是一个重要的操作&#xff0c;而且有多种成熟的算法。这里主要简单介绍一下Bilateral方法&#xff08;双边滤波&#xff09;&#xff0c;这主要是由于前段时间做了SSAO&#xff0c;需要用bilateral blur 算法进行降噪。Bilateral blur相对于传统的高斯blur来说…

Bilateral Filters(双边滤波算法)原理及实现(一)

双边滤波算法原理 双边滤波是一种非线性滤波器&#xff0c;它可以达到保持边缘、降噪平滑的效果。和其他滤波原理一样&#xff0c;双边滤波也是采用加权平均的方法&#xff0c;用周边像素亮度值的加权平均代表某个像素的强度&#xff0c;所用的加权平均基于高斯分布[1]。最重要…

双边滤波与引导滤波

双边滤波与引导滤波 分类&#xff1a; AI and Computer Vision 2014-03-07 17:04 344人阅读 评论(0) 收藏 举报 图像处理 滤波 双边滤波 双边滤波很有名&#xff0c;使用广泛&#xff0c;简单的说就是一种同时考虑了像素空间差异与强度差异的滤波器&#xff0c;因此具有保持图…

【图像处理】——双边滤波

【fishing-pan&#xff1a;https://blog.csdn.net/u013921430 转载请注明出处】 双边滤波 高斯滤波是最常用的图像去噪方法之一&#xff0c;它能很好地滤除掉图像中随机出现的高斯噪声&#xff0c;但是在之前的博客中提到过&#xff0c;高斯滤波是一种低通滤波&#xff08;有兴…

【八】双边滤波

1.高斯滤波 高斯滤波的定义如下&#xff1a; 其中高斯函数为&#xff1a; 高斯滤波是领域内相邻像素的加权平均&#xff0c;权重值为G(||p-q||)&#xff0c;和均值滤波&#xff0c;中值滤波一样&#xff0c;都是将噪声&#xff08;高频信息&#xff09;滤除&#xff0c;但是边…

双边滤波原理和实现

双边滤波原理 双边滤波&#xff08;Bilateral filter&#xff09;是一种非线性的滤波方法&#xff0c;是结合图像的空间邻近度和像素值相似度的一种折衷处理&#xff0c;同时考虑空域信息和灰度相似性&#xff0c;达到保边去噪的目的。 双边滤波器之所以能够做到在平滑去噪的同…

双边滤波

1 双边滤波简介 双边滤波&#xff08;Bilateral filter&#xff09;是一种非线性的滤波方法&#xff0c;是结合图像的空间邻近度和像素值相似度的一种折衷处理&#xff0c;同时考虑空域信息和灰度相似性&#xff0c;达到保边去噪的目的。具有简单、非迭代、局部的特点。 双边滤…

数字图像处理(九)双边滤波

文章目录 一、何为双边滤波&#xff1f;二、为什么要使用双边滤波&#xff1f;三、双边滤波原理1.空间域核2.值域核3.模板相乘 四、 w d w_d wd​和 w r w_r wr​和 σ \sigma σ的理解五、C代码实现1.opencv中Mat的一点小知识2.关于边界的处理3.双边滤波代码 一、何为双边滤波…

双边滤波(Bilateral Filtering)

双边滤波&#xff08;Bilateral Filtering&#xff09; 1、基本思路 双边滤波&#xff08;Bilateral Filtering&#xff09;的基本思路是同时考虑像素点的空域信息和值域信息。即先根据像素值对要用来进行滤波的邻域做一个分割或分类&#xff0c;再给该点所属的类别相对较高的…

三种经典图像滤波方法介绍——双边滤波(Bilateral filter)、导向滤波(Guided Fliter)、滚动导向滤波(RollingGuidedFilter)

文章目录 一、前言二、双边滤波(Bilateral filter)2.1 双边滤波的理论介绍及公式推导2.2 双边滤波的matlab程序实现 三、导向滤波(Guided Fliter)3.1 导向滤波的理论介绍及公式推导3.2 导向滤波matlab代码实现 四、滚动导向滤波(RollingGuidedFilter)4.1 滚动导向滤波的理论介绍…

图像处理:双边滤波算法

今天主要是回顾一下双边滤波&#xff0c;我曾经在这篇——图像处理&#xff1a;推导五种滤波算法中推导过它&#xff0c;其中包含了我自己写的草稿图。 目录 双边滤波算法原理 &#xff08;1&#xff09;空间域核 &#xff08;2&#xff09;值域核 理解双边滤波 空域权重​…