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

article/2025/10/26 3:34:15

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

6.1 原理介绍

        之前介绍的滤波处理过程单纯地考虑空间信息,造成了边界模糊和部分信息的丢失。 双边滤波在计算某一个像素点的新值时,不仅考虑距离信息(距离越远,权重越小),还考虑色彩信息(色彩差别越大,权重越小)。

        双边滤波综合考虑距离和色彩的权重结果,既能够有效地去除噪声,又能够较好地保护边缘信息。 在双边滤波中,当处在边缘时,与当前点色彩相近的像素点(颜色距离很近)会被给予较大的权重值;而与当前色彩差别较大的像素点(颜色距离很远)会被给予较小的权重值(极端情况下权重可能为0,直接忽略该点),这样就保护了边缘信息。

6.2 函数语法

        在OpenCV中,实现双边滤波的函数是cv2.bilateralFilter(),该函数的语法是:         dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace,borderType)

        式中:

        ● dst是返回值,表示进行双边滤波后得到的处理结果。

        ● src 是需要处理的图像,即原始图像。它能够有任意数量的通道,并能对各通道独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F或者CV_64F中的一 种。                        

        ● d是在滤波时选取的空间距离参数,这里表示以当前像素点为中心点的直径。如果该值为非正数,则会自动从参数 sigmaSpace 计算得到。如果滤波空间较大(d>5),则速度较慢。因此,在实时应用中,推荐d=5。对于较大噪声的离线滤波,可以选择d=9。

        ● sigmaColor是滤波处理时选取的颜色差值范围,该值决定了周围哪些像素点能够参与到滤波中来。与当前像素点的像素值差值小于 sigmaColor 的像素点,能够参与到当前的滤波中。该值越大,就说明周围有越多的像素点可以参与到运算中。该值为0时,滤波失去意义;该值为255时,指定直径内的所有点都能够参与运算。

        ● sigmaSpace是坐标空间中的sigma值。它的值越大,说明有越多的点能够参与到滤波计算中来。当d>0时,无论sigmaSpace的值如何,d都指定邻域大小;否则,d与 sigmaSpace的值成比例。

        ● borderType是边界样式,该值决定了以何种方式处理边界。一般情况下,不需要考虑该值,直接采用默认值即可。

        为了简单起见,可以将两个sigma(sigmaColor和sigmaSpace)值设置为相同的。如果它们的值比较小(例如小于10),滤波的效果将不太明显;如果它们的值较大(例如大于150),则滤波效果会比较明显,会产卡通效果。

        在函数cv2.bilateralFilter()中,参数borderType是可选参数,其余参数全部为必选参数。

6.3 程序示例

import cv2  as cvdef cv_show(name, img):cv.imshow(name, img)cv.waitKey(0)cv.destroyAllWindows()def add_peppersalt_noise(image, n=10000):result = image.copy()# 测量图片的长和宽w, h =image.shape[:2]# 生成n个椒盐噪声for i in range(n):x = np.random.randint(1, w)y=  np.random.randint(1, h)if np.random.randint(0, 2) == 0 :result[x, y] = 0else:result[x,y] = 255return resultimg = cv.imread('D:\\dlam.jpg')
if img is None:print('Failed to read the image')img1 = add_peppersalt_noise(img)
cv_show('img1', img1)img2 = cv.bilateralFilter(img1, 9, 150, 150)
cv_show('img2', img2)

原图如下:

 添加椒盐噪声后:

 双边滤波效果:

         可以看到,双边滤波对边缘信息有较好的保留,但是不能较好的消除噪声。(也试过中值滤波与双边滤波一起使用,但是边缘的像素还是会缺失,滤波效果不是很好)


http://chatgpt.dhexx.cn/article/0q4gku3L.shtml

相关文章

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

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

双边滤波的基本原理

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

双边滤波算法原理

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

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

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

双边滤波与引导滤波

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

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

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

【八】双边滤波

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

双边滤波原理和实现

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

双边滤波

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

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

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

双边滤波(Bilateral Filtering)

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

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

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

图像处理:双边滤波算法

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

Bilateral Filters(双边滤波算法)的超简单原理,学不会你打我。

摘要: 双边滤波(Bilateral Filters)是非常常用的一种滤波,它可以达到保持边缘、降噪平滑的效果。和其他滤波原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代表某个像素的强度,所用的加权平均基…

jQuery源码分析理解

1: 首先我们先来看一下jquery代码的整体结构 代码从16行开始为真正的jquery源码,我们看到Jquery源码第一个()中是定义了一个匿名function( window, undefined ) {};接着末尾有个(window),就表示执行这个匿名function,…

jQuery源码分析(一)

jQuery源码分析(一) 我们知道在jQuery中在使用选择器或者给元素绑定事件的时候都是通过$来操作的。那么基于JavaScript面向对象的思想,我们可以把jQuery看做一个函数或者对象,它里边存储了大量的方法,是一个类库。 $代…

jQuery源码阅读(一)---jQuery源码整体架构

之前用jQuery库写了两个小例子(结合Apache、PHP实现的简易聊天室以及音乐播放器),详见我的上两篇博客jQuery aJax技术以及PHP实现简单聊天室、 利用jQuery实现音乐播放器。为了更加深入了解jQuery库的架构以及巩固原生JS的基础和深度&#xf…

jquery源码解析

(function(a,b){})() JQuery源码的开头 (function(a,b){})(window)通常(function(){})()用来封装一些私有成员或者公共成员的导出。 1. 定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。确…

jQuery源码下载和编译

下载 git clone https://github.com/jquery/jquery.git编译 下载完成后,进入jquery文件夹,运行如下命令: npm run build最后全部编译完成,生成的文件在目录dist文件夹下: 有兴趣的就可以开始研究源码了。

jQuery源码阅读

1. 立即执行函数 简化后的代码就是这样 (function(global, factory) {... })(window, function () {}); Q:采用立即执行函数的好处是什么呢? A: 通过定义一个匿名函数,创建了一个新的函数作用域,相当于创建了一个私有的命名空…