opencv基础-34 图像平滑处理-双边滤波cv2.bilateralFilter()

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

双边滤波的核心思想是使用一个滑动窗口(卷积核)在图像上移动,并计算窗口中像素的加权平均值来替代中心像素的值。这里的权重包括两个部分:一个是空间权重,根据像素之间的空间距离计算;另一个是灰度值权重,根据像素之间的灰度值相似性计算。空间权重用于保持边缘信息,而灰度值权重用于平滑图像。

在双边滤波中,窗口的大小和两个权重的参数是需要设置的超参数,它们会影响滤波效果。较大的窗口大小和权重参数可以保留更多的图像细节,但也会导致计算复杂度增加。

基本原理

前述滤波方式基本都只考虑了空间的权重信息,这种情况计算起来比较方便,但是在边缘信息的处理上存在较大的问题。

例如,在图 7-30 中,图像左侧是黑色,右侧是白色,中间是很明显的边缘。

在这里插入图片描述
在均值滤波、方框滤波、高斯滤波中,都会计算边缘上各个像素点的加权平均值,从而模糊边缘信息。

如图 7-31 所示是高斯滤波处理的结果图像。

在这里插入图片描述
从图 7-31 可以看到,经过高斯滤波处理后,边缘信息变得很模糊,均值滤波处理也会造成类似的问题。边界模糊是滤波处理过程中对邻域像素取均值所造成的结果,上述滤波处理过程单纯地考虑空间信息,造成了边界模糊和部分信息的丢失。

双边滤波在计算某一个像素点的新值时,不仅考虑距离信息(距离越远,权重越小),还考虑色彩信息(色彩差别越大,权重越小)。双边滤波综合考虑距离和色彩的权重结果,既能够有效地去除噪声,又能够较好地保护边缘信息。

在双边滤波中,当处在边缘时,与当前点色彩相近的像素点(颜色距离很近)会被给予较大的权重值;而与当前色彩差别较大的像素点(颜色距离很远)会被给予较小的权重值(极端情况下权重可能为 0,直接忽略该点),这样就保护了边缘信息。

例如,在图 7-32 中:

  1. 图(a)是原始图像,左侧区域是白色(像素值为 255),右侧区域是黑色(像素值为 0)。
  2. 图(b)是进行均值滤波的可能结果。在进行均值滤波时,仅仅考虑空间信息,此时左右两侧的像素的处理结果是综合考虑周边元素像素值,并对它们取均值得到的。
  3. 图©是进行双边滤波的可能结果。在进行双边滤波时,不仅考虑空间信息,还考虑色彩差别信息

在这里插入图片描述
在双边滤波中,在计算左侧白色区域边缘点的滤波结果时:

  1. 对于白色的点,给予的权重较大。

  2. 对于黑色的点,由于色彩差异较大,颜色距离很远(注意,不是像素点之间的物理距离,而是颜色值的距离。像素点的值分别是 0 和 255,差别很大,所以说它们颜色距离很远),因此可以将它们的权重设置为 0。

这样,在计算左侧白色边缘滤波结果时,得到的仍然是白色。因此,双边滤波后,左侧边缘得到保留。

在计算右侧黑色区域边缘点的滤波结果时:

  1. 对于黑色的点,给予的权重较大。

  2. 对于白色的点,由于色彩差异较大,颜色距离很远,因此可以将它们的权重设置为 0。

这样,在计算右侧黑色边缘滤波结果时,得到的仍然是黑色。因此,双边滤波后,左侧边缘得到保留。

cv2.bilateralFilter() 函数说明

在 OpenCV 中,实现双边滤波的函数是 cv2.bilateralFilter(),该函数的语法是:

dst = cv2.bilateralFilter( src, d, sigmaColor, sigmaSpace, borderType )

式中:

  1. dst 是返回值,表示进行双边滤波后得到的处理结果。
  2. src 是需要处理的图像,即原始图像。它能够有任意数量的通道,并能对各个通道独立
    处理。图像深度应该是 CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F 中的一种。
  3. d 是在滤波时选取的空间距离参数,这里表示以当前像素点为中心点的直径。如果该值为非正数,则会自动从参数 sigmaSpace 计算得到。如果滤波空间较大(d>5),则速度较慢。因此,在实时应用中,推荐 d=5。对于较大噪声的离线滤波,可以选择 d=9。
  4. sigmaColor 是滤波处理时选取的颜色差值范围,该值决定了周围哪些像素点能够参与到滤波中来。与当前像素点的像素值差值小于 sigmaColor 的像素点,能够参与到当前的滤波中。该值越大,就说明周围有越多的像素点可以参与到运算中。该值为 0 时,滤波失去意义;该值为 255 时,指定直径内的所有点都能够参与运算。
  5. sigmaSpace 是坐标空间中的 sigma 值。它的值越大,说明有越多的点能够参与到滤波计算中来。当 d>0 时,无论 sigmaSpace 的值如何,d 都指定邻域大小;否则,d 与 sigmaSpace的值成比例。
  6. borderType 是边界样式,该值决定了以何种方式处理边界。一般情况下,不需要考虑该值,直接采用默认值即可。

为了简单起见,可以将两个 sigma(sigmaColor 和 sigmaSpace)值设置为相同的。如果它们的值比较小(例如小于
10),滤波的效果将不太明显;如果它们的值较大(例如大于 150),则滤波效果会比较明显,会产生卡通效果。在函数
cv2.bilateralFilter()中,参数 borderType 是可选参数,其余参数全部为必选参数。

实验:针对噪声图像,对其进行双边滤波,显示滤波的结果。

代码如下:

import cv2
o=cv2.imread("lenaNoise.png")
r=cv2.bilateralFilter(o,25,100,100)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
其中左图是原始图像,右图是双边滤波的结果图像。从
图中可以看出,双边滤波去除噪声的效果并不好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/57743.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ发送消息超时异常

说明:在使用RocketMQ发送消息时,出现下面这个异常(org.springframework.messging.MessgingException:sendDefaultImpl call timeout……); 解决:修改RocketMQ中broke.conf配置,添加下…

【图像去噪】基于混合自适应(EM 自适应)实现自适应图像去噪研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

线性代数(二) 矩阵及其运算

前言 行列式det(A) 其实表示的只是一个值 ∣ a b c d ∣ a d − b c \begin{vmatrix} a & b\\ c & d\end{vmatrix} ad -bc ​ac​bd​ ​ad−bc,其基本变化是基于这个值是不变。而矩阵表示的是一个数表。 定义 矩阵与线性变换的关系 即得 ( a 11 a 12…

【代码解读】RRNet: A Hybrid Detector for Object Detection in Drone-captured Images

文章目录 1. train.py2. DistributedWrapper类2.1 init函数2.2 train函数2.3 dist_training_process函数 3. RRNetOperator类3.1 init函数3.1.1 make_dataloader函数 3.2 training_process函数3.2.1 criterion函数 4. RRNet类(网络模型类)4.1 init函数4.…

【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解

系列文章传送门: 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS:本要求基于…

实际工作中通过python+go-cqhttp+selenium实现自动检测维护升级并发送QQ通知消息(程序内测)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 首先,今年比较忙没有多余时间去实操创作分享文章给大家,那就给大家分享下博主在实际工作中的一点点内容吧,就当交…

网络安全 Day30-运维安全项目-堡垒机部署

运维安全项目-堡垒机部署 1. 运维安全项目-架构概述2. 运维安全项目之堡垒机2.1 堡垒机概述2.2 堡垒机选型2.3 环境准备2.4 部署Teleport堡垒机2.4.1 下载与部署2.4.2 启动2.4.3 浏览器访问teleport2.4.4 进行配置2.4.5 安装teleport客户端 2.5 teleport连接服务器 1. 运维安全…

opencv基础-34 图像平滑处理-2D 卷积 cv2.filter2D()

2D卷积是一种图像处理和计算机视觉中常用的操作,用于在图像上应用滤波器或卷积核,从而对图像进行特征提取、平滑处理或边缘检测等操作。 在2D卷积中,图像和卷积核都是二维的矩阵或数组。卷积操作将卷积核在图像上滑动,对每个局部区…

Grafana V10 告警推送 邮件

最近项目建设完成,一个城域网项目,相关zabbix和grafana展示已经完,想了想,不想天天看平台去盯网络监控平台,索性对告警进行分类调整,增加告警的推送,和相关部门的提醒,其他部门看不懂…

yaml文件详解

目录 一、yaml的简介 二、yaml示例 1.编写yaml文件创建pod资源 2. 创建资源对象 3.查看创建的pod资源 4.创建service服务对外提供访问并测试 5.创建资源对象 6.查看创建的service 7.在浏览器输入 nodeIP:nodePort 即可访问 三、 获取yaml配置资源 四、将现有资源生成模…

Xcode升级导致关联库报错

想办法找到对应的库 然后到 Build Phases -- LinkBinary With Libraries中点击,选择对应的framework即可,就像我工程的报错 Undefined symbol: _OBJC_CLASS_$_ADClient _OBJC_CLASS_$_ASIdentifierManager 缺失的库是AdSupport.framework 添加后再次编…

在钡铼技术ARM嵌入式控制器上安装Node-RED的详细步骤

嵌入式ARM控制器BL301/BL302系列是工业级坚固型工业控制器,采用NXP的高性能处理器I.MX6ULL,搭配先进的ARM Cortex-A7构架,运行速度高达800MHz,具有高度的稳定性。本产品最高可提供4路RS485/RS232,1路CAN口,…