图像滤波——双边滤波(bilateral filtering)

这篇具有很好参考价值的文章主要介绍了图像滤波——双边滤波(bilateral filtering)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 定义:

同时考虑将要被滤波的像素点的空域信息(domain)值域信息(range)

(1)图像的空域信息指的是图像在像素级别上的空间分布和结构信息。空域信息包含了图像中每个像素及其周围像素的位置、灰度值等信息。通过分析和处理图像的空域信息,我们可以获得图像的边缘、纹理、形状等特征。

(2)图像的值域信息是指图像的像素灰度值的范围和分布信息。它描述了图像的灰度级别、对比度、亮度等特性。通过分析和处理图像的值域信息,我们可以调整图像的亮度和对比度,增强图像的细节,进行图像的直方图均衡化等操作。

2. 出现的原因及目的

(1)出现的原因:在其他滤波算法中(如均值滤波、中值滤波和高斯滤波等),认为图像像素在空间中变化缓慢(类似一道墙之内,认为墙内都是一样的颜色,都是很平整的),但是在一定的区域会有突变的情况出现(比如这道墙的墙角,它可能突然会遇到门框、窗户等),这时候上述的假设就不成立。如果在边缘处也用这种思路来进行滤波的话,即认为相邻相近,则得到的结果必然会模糊掉边缘。

(2)大致解决方法:进行全局滤波之后,图像中结构的边缘信息变得模糊。因此考虑再利用包含边缘信息像素点的值的大小进行补充,因为边缘两侧的点的像素值差别很大,因此会使得其加权的时候权重具有很大的差别,从而使得只考虑自己所属的一边的邻域。可以理解成先根据像素值对要用来进行滤波的邻域做一个分割或分类,再给该点所属的类别相对较高的权重,然后进行邻域加权求和,得到最终结果。

3. 实现原理

双边滤波的实现原理可以总结为以下几个步骤:

(1) 定义滤波器的参数:双边滤波器需要指定两个参数,即空间域核函数和像素值域核函数。空间域核函数定义了像素之间的空间距离权重,而像素值域核函数定义了像素值之间的相似性权重。

(2)计算滤波器的权重:对于每个像素,双边滤波器将计算其在空间域和像素值域上的权重。空间域权重衡量了像素之间的距离,而像素值域权重衡量了像素值之间的相似性。

(3)对像素进行滤波:根据计算得到的权重,对每个像素的周围像素进行加权平均,以得到滤波后的像素值。权重越大的像素对滤波结果的贡献越大,权重越小的像素对滤波结果的贡献越小。

双边滤波的公式可以表示为:

I filtered ( x , y ) = 1 W p ( x , y ) ∑ ( i , j ) ∈ Ω I ( x + i , y + j ) ⋅ F spatial ( i , j ) ⋅ F range ( I ( x , y ) , I ( x + i , y + j ) ) I_{\text{filtered}}(x, y) = \frac{1}{W_{\text{p}}(x, y)} \sum_{(i, j) \in \Omega} I(x + i, y + j) \cdot F_{\text{spatial}}(i, j) \cdot F_{\text{range}}(I(x, y), I(x + i, y + j)) Ifiltered(x,y)=Wp(x,y)1(i,j)ΩI(x+i,y+j)Fspatial(i,j)Frange(I(x,y),I(x+i,y+j))

其中:

  • I filtered ( x , y ) I_{\text{filtered}}(x, y) Ifiltered(x,y)是滤波之后的像素值。
  • I ( x , y ) I(x, y) I(x,y)是原始图像中的像素值。
  • W p ( x , y ) W_{\text{p}}(x, y) Wp(x,y)是归一化的权重,用于归一化滤波结果。
  • Ω \Omega Ω表示滤波器的邻域窗口,通常是一个固定大小的窗口。
  • F spatial ( i , j ) F_{\text{spatial}}(i, j) Fspatial(i,j) 是空间域核函数,用于计算像素之间的空间距离权重。
  • F range ( I ( x , y ) , I ( x + i , y + j ) ) F_{\text{range}}(I(x, y), I(x + i, y + j)) Frange(I(x,y),I(x+i,y+j))是像素值域核函数,用于计算像素值之间的相似性权重。

需要注意的是,空间域核函数和像素值域核函数的具体形式可以根据需求进行选择和定义。常用的核函数包括高斯核函数和指数核函数。

双边滤波通过综合考虑空间域和像素值域的信息,在平滑图像的同时保留了边缘信息,能够有效地去除噪声并保持图像的细节。然而,双边滤波的计算量较大,对于大尺寸图像可能会导致较慢的处理速度。因此,在实际应用中需要权衡滤波效果和计算效率。

4. 实际操作

(1)图片输入

双边滤波,图像处理,计算机视觉,人工智能,图像处理

(2)代码编写

在Python中,可以使用OpenCV库来实现双边滤波。以下是一个使用OpenCV实现双边滤波的示例代码:

# 双边滤波参数设置
d = 7  # 邻域直径,控制像素之间的空间距离
sigma_color = [0.0001, 1, 10, 100]  # 像素值域标准差,控制像素值之间的相似性权重
sigma_space = [0.0001, 1, 10, 100]  # 空间域标准差,控制像素之间的空间距离权重

for i in range(len(sigma_color)):
# 进行双边滤波
    filtered_image = cv2.bilateralFilter(img, d, sigma_color[0], sigma_space[i])
    cv2.imwrite(f'sigmaS_{i}.jpg',filtered_image)

for i in range(len(sigma_color)):
# 进行双边滤波
    filtered_image = cv2.bilateralFilter(img, d, sigma_color[i], sigma_space[0])
    cv2.imwrite(f'sigmaC_{i}.jpg',filtered_image)

1. 定义:

同时考虑将要被滤波的像素点的空域信息(domain)值域信息(range)

(1)图像的空域信息指的是图像在像素级别上的空间分布和结构信息。空域信息包含了图像中每个像素及其周围像素的位置、灰度值等信息。通过分析和处理图像的空域信息,我们可以获得图像的边缘、纹理、形状等特征。

(2)图像的值域信息是指图像的像素灰度值的范围和分布信息。它描述了图像的灰度级别、对比度、亮度等特性。通过分析和处理图像的值域信息,我们可以调整图像的亮度和对比度,增强图像的细节,进行图像的直方图均衡化等操作。

2. 出现的原因及目的

(1)出现的原因:在其他滤波算法中(如均值滤波、中值滤波和高斯滤波等),认为图像像素在空间中变化缓慢(类似一道墙之内,认为墙内都是一样的颜色,都是很平整的),但是在一定的区域会有突变的情况出现(比如这道墙的墙角,它可能突然会遇到门框、窗户等),这时候上述的假设就不成立。如果在边缘处也用这种思路来进行滤波的话,即认为相邻相近,则得到的结果必然会模糊掉边缘。

(2)大致解决方法:进行全局滤波之后,图像中结构的边缘信息变得模糊。因此考虑再利用包含边缘信息像素点的值的大小进行补充,因为边缘两侧的点的像素值差别很大,因此会使得其加权的时候权重具有很大的差别,从而使得只考虑自己所属的一边的邻域。可以理解成先根据像素值对要用来进行滤波的邻域做一个分割或分类,再给该点所属的类别相对较高的权重,然后进行邻域加权求和,得到最终结果。

3. 实现原理

双边滤波的实现原理可以总结为以下几个步骤:

(1) 定义滤波器的参数:双边滤波器需要指定两个参数,即空间域核函数和像素值域核函数。空间域核函数定义了像素之间的空间距离权重,而像素值域核函数定义了像素值之间的相似性权重。

(2)计算滤波器的权重:对于每个像素,双边滤波器将计算其在空间域和像素值域上的权重。空间域权重衡量了像素之间的距离,而像素值域权重衡量了像素值之间的相似性。

(3)对像素进行滤波:根据计算得到的权重,对每个像素的周围像素进行加权平均,以得到滤波后的像素值。权重越大的像素对滤波结果的贡献越大,权重越小的像素对滤波结果的贡献越小。

双边滤波的公式可以表示为:

I filtered ( x , y ) = 1 W p ( x , y ) ∑ ( i , j ) ∈ Ω I ( x + i , y + j ) ⋅ F spatial ( i , j ) ⋅ F range ( I ( x , y ) , I ( x + i , y + j ) ) I_{\text{filtered}}(x, y) = \frac{1}{W_{\text{p}}(x, y)} \sum_{(i, j) \in \Omega} I(x + i, y + j) \cdot F_{\text{spatial}}(i, j) \cdot F_{\text{range}}(I(x, y), I(x + i, y + j)) Ifiltered(x,y)=Wp(x,y)1(i,j)ΩI(x+i,y+j)Fspatial(i,j)Frange(I(x,y),I(x+i,y+j))

其中:

  • I filtered ( x , y ) I_{\text{filtered}}(x, y) Ifiltered(x,y)是滤波之后的像素值。
  • I ( x , y ) I(x, y) I(x,y)是原始图像中的像素值。
  • W p ( x , y ) W_{\text{p}}(x, y) Wp(x,y)是归一化的权重,用于归一化滤波结果。
  • Ω \Omega Ω表示滤波器的邻域窗口,通常是一个固定大小的窗口。
  • F spatial ( i , j ) F_{\text{spatial}}(i, j) Fspatial(i,j) 是空间域核函数,用于计算像素之间的空间距离权重。
  • F range ( I ( x , y ) , I ( x + i , y + j ) ) F_{\text{range}}(I(x, y), I(x + i, y + j)) Frange(I(x,y),I(x+i,y+j))是像素值域核函数,用于计算像素值之间的相似性权重。

需要注意的是,空间域核函数和像素值域核函数的具体形式可以根据需求进行选择和定义。常用的核函数包括高斯核函数和指数核函数。

双边滤波通过综合考虑空间域和像素值域的信息,在平滑图像的同时保留了边缘信息,能够有效地去除噪声并保持图像的细节。然而,双边滤波的计算量较大,对于大尺寸图像可能会导致较慢的处理速度。因此,在实际应用中需要权衡滤波效果和计算效率。

4. 实际操作

(1)图片输入
双边滤波,图像处理,计算机视觉,人工智能,图像处理

(2)代码编写

在Python中,可以使用OpenCV库来实现双边滤波。以下是一个使用OpenCV实现双边滤波的示例代码:

# 双边滤波参数设置
d = 7  # 邻域直径,控制像素之间的空间距离
sigma_color = [0.0001, 1, 10, 100]  # 像素值域标准差,控制像素值之间的相似性权重
sigma_space = [0.0001, 1, 10, 100]  # 空间域标准差,控制像素之间的空间距离权重

for i in range(len(sigma_color)):
# 进行双边滤波
    filtered_image = cv2.bilateralFilter(img, d, sigma_color[0], sigma_space[i])
    cv2.imwrite(f'sigmaS_{i}.jpg',filtered_image)

for i in range(len(sigma_color)):
# 进行双边滤波
    filtered_image = cv2.bilateralFilter(img, d, sigma_color[i], sigma_space[0])
    cv2.imwrite(f'sigmaC_{i}.jpg',filtered_image)

···
● d是在滤波时选取的空间距离参数,这里表示以当前像素点为中心点的直径。如果该值为非正数,则会自动从参数 sigma_space 计算得到。如果滤波空间较大(d>5),则速度较慢。因此,在实时应用中,推荐d=5。对于较大噪声的离线滤波,可以选择d=9。
● sigma_color是滤波处理时选取的颜色差值范围,该值决定了周围哪些像素点能够参与到滤波中来。与当前像素点的像素值差值小于 sigma_color 的像素点,能够参与到当前的滤波中。该值越大,就说明周围有越多的像素点可以参与到运算中。该值为0时,滤波失去意义;该值为255时,指定直径内的所有点都能够参与运算。
● sigma_space是坐标空间中的sigma值。它的值越大,说明有越多的点能够参与到滤波计算中来。当d>0时,无论sigma_space的值如何,d都指定邻域大小;否则,d与 sigma_space的值成比例。

(3)在值域参数都为0.0001的情况下,不同的空域参数

① sigma_space=0.0001

双边滤波,图像处理,计算机视觉,人工智能,图像处理

② sigma_space=1

双边滤波,图像处理,计算机视觉,人工智能,图像处理

③ sigma_space=10

双边滤波,图像处理,计算机视觉,人工智能,图像处理

④ sigma_space=100

双边滤波,图像处理,计算机视觉,人工智能,图像处理

(4)在空域参数都为0.0001的情况下,不同的值域参数

① sigma_color=0.0001

双边滤波,图像处理,计算机视觉,人工智能,图像处理

② sigma_color=1
双边滤波,图像处理,计算机视觉,人工智能,图像处理
③ sigma_color=10
双边滤波,图像处理,计算机视觉,人工智能,图像处理
④ sigma_color=100
双边滤波,图像处理,计算机视觉,人工智能,图像处理
(5)结论

上述的结果并不明显,可以通过观察以下对比实验结果加深理解。

双边滤波,图像处理,计算机视觉,人工智能,图像处理

首先,两个 sigma 值为 kernel 的方差,方差越大,说明权重差别越小,因此表示不强调这一因素的影响,反之,则表示更强调这一因素导致的权重的不均衡。因此:

  • 两个方面的某个的 sigma 相对变小 表示这一方面相对较重要,得到强调。如 sigma_space 变小,表示更多采用近邻的值作平滑,说明图像的空间信息更重要,即相近相似。如 sigma_color变小,表示和自己同一类的条件变得苛刻,从而强调值域的相似性。

其次,sigma_space 表示的是空域的平滑,因此对于没有边缘的,变化慢的部分更适合;sigma_color表示值域的差别,因此强调这一差别,即减小 sigma_color可以突出边缘。文章来源地址https://www.toymoban.com/news/detail-740867.html

  • sigma_space 变大,图像每个区域的权重基本都源于值域滤波的权重,因此对于空间邻域信息不是很敏感;sigma_color变大,则不太考虑值域,权重多来自于空间距离,因此近似于普通的高斯滤波,图像的保边性能下降。因此如果像更多的去除平滑区域的噪声,应该提高 sigma_space ,如果像保持边缘,则应该减小 sigma_color 。
  • 极端情况,如果 sigma_space无穷大,相当于值域滤波;sigma_color 无穷大,相当于空域高斯滤波。

到了这里,关于图像滤波——双边滤波(bilateral filtering)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【图像处理OpenCV(C++版)】——5.5 图像平滑之双边滤波

    前言 : 😊😊😊 欢迎来到本博客 😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。 😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–搜索你要查询的算子

    2024年02月13日
    浏览(46)
  • 图像处理:推导五种滤波算法(均值、中值、高斯、双边、引导)

    目录 概论 算法原理 1、均值滤波 2、中值滤波 3、高斯滤波 4、双边滤波 5、引导滤波  手写代码 Opencv代码实现  最后的总结 参考文章         本来打算是分开推导的,但我觉得还是整个合集吧,避免有水文的嫌疑,那么因为学习的需要,会涉及到图像的滤波处理,我汇总

    2024年02月07日
    浏览(48)
  • opencv-34 图像平滑处理-双边滤波cv2.bilateralFilter()

    双边滤波(BilateralFiltering)是一种图像处理滤波技术,用于平滑图像并同时保留边缘信息。与其他传统的线性滤波方法不同,双边滤波在考虑像素之间的空间距离之外,还考虑了像素之间的灰度值相似性。这使得双边滤波能够有效地去除噪声,同时保持图像的细节和边缘。

    2024年02月14日
    浏览(44)
  • Opencv-C++笔记 (13) : opencv-图像卷积一(均值、中值、高斯、双边滤波)与 边缘处理

    头文件 quick_opencv.h:声明类与公共函数 主函数调用 src:输入图像 。 dst:输出图像 。 ksize:内核大小 ,一般用 Size(w,h),w 为宽度,h 为深度。 anchor:被平滑的点,表示取 内核中心 ,默认值 Point(-1,-1)。 boderType:推断图像外部像素的某种边界模式。默认值 BORDER_DEFAULT 目的:

    2024年02月16日
    浏览(154)
  • 图像平滑处理-卷积函数filter2D详解及均值滤波案例

    图像平滑处理-卷积函数filter2D详解及均值滤波案例 图像处理是计算机视觉中的重要分支。在图像处理中,平滑滤波是一项基本任务。平滑滤波可以消除图像中的噪声和细节,使其更加平滑和清晰。OpenCV-Python是一个常用的图像处理库,它提供了各种图像处理函数和算法。这里

    2024年02月05日
    浏览(42)
  • 【计算机视觉】图像处理算法(形态学滤波篇)

    来源:《OpenCV3编程入门》,怀念毛星云大佬🕯️ 说明: 本系列重点关注各种图像处理算法的原理、作用和对比 数学形态学的概念: 数学形态学(Mathematical morphology)是立在格论和拓扑学基础之上的图像分析学科,足数学形态学阁像处现的基本理论。其基本的运算包括:二值腐

    2024年03月10日
    浏览(56)
  • 图像处理与计算机视觉--第四章-图像滤波与增强-第二部分

    目录 1.图像噪声化处理与卷积平滑 2.图像傅里叶快速变换处理 3.图像腐蚀和膨胀处理 4 图像灰度调整处理 5.图像抖动处理算法    

    2024年02月07日
    浏览(44)
  • 图像处理与计算机视觉--第四章-图像滤波与增强-第一部分

    目录 1.灰度图亮度调整 2.图像模板匹配 3.图像裁剪处理 4.图像旋转处理 5.图像邻域与数据块处理

    2024年02月07日
    浏览(71)
  • 【计算机视觉:算法和应用】第三章:图像处理——3.2线性滤波

    【计算机视觉:算法和应用】第二章:图像形成——2.1 几何图元与变换_Lu.马夋的博客-CSDN博客 【计算机视觉:算法和应用】第二章:图像形成——2.2相机辐射成像-CSDN博客 【计算机视觉:算法和应用】第二章:图像形成——2.3数码相机-CSDN博客 【计算机视觉:算法和应用】

    2024年02月03日
    浏览(51)
  • 图像处理---逆滤波和维纳滤波

    本文主要介绍退化图像复原的两种方法:逆滤波和维纳滤波。 图像退化的表达式: g ( x , y ) = h ( x , y ) ⊙ f ( x , y ) + η ( x , y ) begin{aligned} g(x,y)=h(x,y)odot f(x,y)+eta(x,y) end{aligned} g ( x , y ) = h ( x , y ) ⊙ f ( x , y ) + η ( x , y ) ​ f ( x , y ) : f(x,y): f ( x , y ) : 输入图像 h ( x , y ) : h(x

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包