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

news2024/11/27 3:45:56

双边滤波(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.coloradmin.cn/o/847657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis简介及环境配置

文章目录 一、什么是MyBatis二、MyBatis开发环境配置1.创建数据库表2.添加MyBatis框架支持3.配置连接字符串和MyBatis4.添加业务代码流程 一、什么是MyBatis MyBatis是一种持久层框架,也是一种ORM框架(Object Relational Mapping即对象关系映射&#xf…

SSM个人博客项目

文章目录 SSM个人博客系统实现项目介绍 一、准备工作0. 创建项目添加对应依赖1. 数据库设计2. 定时实体类 二、功能实现1.统一功能处理统一返回格式统一异常处理定义登录拦截器 2. 注册登录实现生成获取验证码密码加盐实现注册功能登录功能注销功能 3.登录用户博客列表获取登录…

提取字符串标签中的文字js

DOM操作&#xff1a; const extractText (str) > {const parser new DOMParser();const doc parser.parseFromString(str, text/html);const textNodes doc.body.innerText.trim().split(\n);return textNodes; };const input <div>提取文字</div><p>…

合思动态:合思商城上新「中转联程」功能

引言&#xff1a;正如合思创始人兼 CEO马春荃强调&#xff0c;面对各个行业对财务数字化有差异化需求&#xff0c;费控企业需要深入扎根细分行业探索多元化版本和解决方案&#xff0c;并根据行业实时需求快速迭代。合思的使命就是云产品服务的创新&#xff0c;实现降本增效、合…

基于STM32设计的出租车计费系统

一、项目介绍 在城市交通中&#xff0c;出租车是一种常见的交通工具。为了方便乘客和司机之间的交易&#xff0c;出租车计费系统被广泛应用于出租车行业。系统能够自动计算乘客的费用&#xff0c;提供准确、方便的计费服务&#xff0c;并且能够记录乘客的行驶数据&#xff0c;…

IDEA 指定spring.profiles.active本地启动

spring.profiles.activedev spring.profiles.activepro

SpringBoot项目配置文件

文章目录 一、配置文件作用二、配置文件格式三、properties配置文件说明基本语法读取配置文件优缺点 四、yml配置文件说明基本语法使用yml连接数据库使用yml配置不同数据类型及nullyml配置的读取配置字符串的单双引号问题配置对象 两种格式配置文件对比properties格式配置文件示…

Keburnetes YAML配置文件管理

Kubernetes 支持 YAML 和 JSON 格式管理资源对象JSON 格式&#xff1a;主要用于 api 接口之间消息的传递YAML 格式&#xff1a;用于配置和管理&#xff0c;YAML 是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 YAML 语法格式 大小写敏感使用缩进表示层…

Linux之AWK

目录 Linux之AWK 定义 语法格式 常用选项 awk 变量 内置变量 格式 案例 &#xff08;1&#xff09;编写一个文本名字叫做awkdemo&#xff0c;里面内容如下 &#xff08;2&#xff09;FS指定输入分隔符 &#xff08;3&#xff09;OFS指定输出分隔符 &#xff08;4&#xf…

EditText设置inputType=“textPassword“后hint 英文字体不对,而且不能换行

问题如题,我先上图看下遇到的问题 ( ps: 我只想唱一句 : 你这该死的安卓~~ 让我心在痛 累在流!!!) 很明显字体偏大,字间隔很宽,关键还不会换行, 看一下我们需要的效果: 看到只要把 android:inputType"textPassword" 这一行干掉 一切就是我们想要的,但是产…

sonar 错误 提示 Synchronize on a new “Object“ instead.使用Id 作为锁

文章目录 错误分析先看sonar 给解决方案最终解决方案 public void synchronizedMethod(Integer id) {synchronized (id) {// Code to be synchronized}}错误分析 Synchronize on a new "Object" instead. 不应该在原始包装器&#xff08;即整数、长整型、布尔值等&am…

HDFS中的Trash垃圾桶回收机制

Trash垃圾桶回收机制 文件系统垃圾桶背景功能概述Trash Checkpoint Trash功能开启关闭HDFS集群修改core-site.xml删除文件到trash删除文件跳过从trash中恢复文件清空trash 文件系统垃圾桶背景 回收站&#xff08;垃圾桶&#xff09;是windows操作系统里的一个系统文件夹&#…

c#设计模式-创建型模式 之 工厂模式

前言&#xff1a; 工厂模式&#xff08;Factory Pattern&#xff09;是一种常用的对象创建型设计模式。该模式的主要思想是提供一个创建对象的接口&#xff08;也可以是抽象类、静态方法等&#xff09;&#xff0c;将实际创建对象的工作推迟到子类中进行。这样一来&#xff0c…

华为认证 | 云计算HCIE3.0改版后有什么变化?

随着技术的不断进步和行业的发展&#xff0c;云计算的HCIE作为华为公司的顶级认证&#xff0c;也进行了版本的更新。 那改版后有哪些变化呢&#xff0c;今天给大家讲讲。 01 HCIE认证简介 HCIE认证是华为公司旗下的顶级专业认证&#xff0c;面向IT领域的高级专业人士。 它涵…

华为数通题库,新一波分享来袭(有答案哟)

1、以下关于OSPF的Router ID描述不正确的是&#xff08;&#xff09;。&#xff08;多选&#xff09; A. OSPF协议正常运行的前提条件是该路由器有Router ID B. Router ID必须是路由器某接口的IP地址 C. 必须通过手工配置方式来指定Router IDD. 在同一区域内Router I D必须相同…

MobiSys 2023 | 基于毫米波振动测量的无接触材料识别

注1:本文系“无线感知论文速递”系列之一,致力于简洁清晰完整地介绍、解读无线感知领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; MobiCom, Sigcom, MobiSys, NSDI, SenSys, Ubicomp; JSAC, 雷达学报 等)。本次介绍的论文是:《MobiSys 2023 | 基于毫米波振…

高忆管理:股票低开说明什么?股价跟什么有关?

股票的开盘价和收盘价是投资者重视的重要指标&#xff0c;它反映了股票价值的变化。那么股票低开阐明什么&#xff1f;股价跟什么有关&#xff1f;高忆管理也为大家预备了相关内容&#xff0c;以供参阅。 股票低开阐明什么&#xff1f; 股票低开是指股票的开盘价低于上一个交易…

SpringCloud(31):Nacos配置管理基础应用

1 Nacos配置管理模型 对于Nacos配置管理&#xff0c;通过Namespace、group、Data ID能够定位到一个配置集。 配置集(Data ID) 在系统中&#xff0c;一个配置文件通常就是一个配置集&#xff0c;一个配置集可以包含了系统的各种配置信息&#xff0c;例如&#xff0c;一个配置集…

C 语言的转义字符

转义字符也叫转移序列&#xff0c;包含如下&#xff1a; 转移序列 \0oo 和 \xhh 是 ASCII 码的特殊表示。 八进制数示例&#xff1a; 代码&#xff1a; #include<stdio.h> int main(void) {char beep\007;printf("%c\n",beep);return 0; }结果&#xff1a; …

IntelliJ IDEA Bookmark使用

1 增加 右键行号栏 2 查看 从favorite这里查看 参考IntelliJ IDEA 小技巧&#xff1a;Bookmark(书签)的使用_bookmark idea 使用_大唐冠军侯的博客-CSDN博客