计算机视觉中的双边滤波:经典案例与Python代码解析
🌟 计算机视觉中的双边滤波:经典案例与Python代码解析 🚀
Hey小伙伴们!今天我们要聊的是计算机视觉中的一个重要技术——双边滤波。双边滤波是一种非线性滤波方法,主要用于图像去噪和平滑,同时保留图像的边缘和细节。通过双边滤波,我们可以显著改善图像的质量。让我们一起来看看如何使用Python实现双边滤波吧!🎉
📝 理论篇:双边滤波的基本原理
双边滤波是一种结合了空间距离和像素强度差异的滤波方法。它通过以下两个权重来计算新的像素值:
- 空间权重:根据像素之间的空间距离计算权重。
- 强度权重:根据像素之间的强度差异计算权重。
双边滤波的公式如下:
f ( i , j ) = ∑ ( x , y ) ∈ N ( i , j ) I ( x , y ) ⋅ w s ( i , j , x , y ) ⋅ w r ( I ( i , j ) , I ( x , y ) ) ∑ ( x , y ) ∈ N ( i , j ) w s ( i , j , x , y ) ⋅ w r ( I ( i , j ) , I ( x , y ) ) f(i, j) = \frac{\sum_{(x, y) \in N(i, j)} I(x, y) \cdot w_s(i, j, x, y) \cdot w_r(I(i, j), I(x, y))}{\sum_{(x, y) \in N(i, j)} w_s(i, j, x, y) \cdot w_r(I(i, j), I(x, y))} f(i,j)=∑(x,y)∈N(i,j)ws(i,j,x,y)⋅wr(I(i,j),I(x,y))∑(x,y)∈N(i,j)I(x,y)⋅ws(i,j,x,y)⋅wr(I(i,j),I(x,y))
其中:
- f(i, j) 是新像素值。
- I(i, j) 是原图像中的像素值。
- N(i, j) 是邻域窗口。
- w_s(i, j, x, y) 是空间权重。
- w_r(I(i, j), I(x, y)) 是强度权重。
1. 空间权重
w s ( i , j , x , y ) = exp ( − ( i − x ) 2 + ( j − y ) 2 2 σ d 2 ) w_s(i, j, x, y) = \exp\left(-\frac{(i - x)^2 + (j - y)^2}{2\sigma_d^2}\right) ws(i,j,x,y)=exp(−2σd2(i−x)2+(j−y)2)
2. 强度权重
w r ( I ( i , j ) , I ( x , y ) ) = exp ( − ( I ( i , j ) − I ( x , y ) ) 2 2 σ r 2 ) w_r(I(i, j), I(x, y)) = \exp\left(-\frac{(I(i, j) - I(x, y))^2}{2\sigma_r^2}\right) wr(I(i,j),I(x,y))=exp(−2σr2(I(i,j)−I(x,y))2)
📑 实战篇:使用Python实现双边滤波
接下来,我们通过一个具体的Python示例来实现双边滤波。我们将使用OpenCV库来处理图像,并使用NumPy进行矩阵运算。
1. 安装必要的库
首先,确保你已经安装了OpenCV和NumPy:
pip install opencv-python numpy
2. 读取和显示图像
我们先读取一张图像并显示它:
import cv2
import numpy as np# 读取图像
image = cv2.imread('path_to_your_image.jpg')# 显示原始图像
cv2.imshow('Original Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 双边滤波
使用OpenCV的 bilateralFilter 函数进行双边滤波:
def bilateral_filter(image, d, sigma_color, sigma_space):# 使用OpenCV的bilateralFilter函数进行双边滤波filtered_image = cv2.bilateralFilter(image, d, sigma_color, sigma_space)return filtered_image# 应用双边滤波
filtered_image = bilateral_filter(image, d=9, sigma_color=75, sigma_space=75)# 显示滤波后的图像
cv2.imshow('Bilateral Filtered Image', filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. 完整代码
将上述步骤整合在一起,完整的代码如下:
import cv2
import numpy as np# 读取图像
image = cv2.imread('path_to_your_image.jpg')# 显示原始图像
cv2.imshow('Original Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()# 双边滤波
def bilateral_filter(image, d, sigma_color, sigma_space):# 使用OpenCV的bilateralFilter函数进行双边滤波filtered_image = cv2.bilateralFilter(image, d, sigma_color, sigma_space)return filtered_image# 应用双边滤波
filtered_image = bilateral_filter(image, d=9, sigma_color=75, sigma_space=75)# 显示滤波后的图像
cv2.imshow('Bilateral Filtered Image', filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
🌟 成功案例
当你运行这段代码时,你会看到原始图像和双边滤波后的图像。双边滤波有效地去除了图像中的噪声,同时保留了图像的边缘和细节。
运行效果


🌟 小贴士
-
参数选择:
d:滤波器的空间直径。值越大,滤波效果越强。sigma_color:颜色空间的标准差。值越大,颜色差异的影响越小。sigma_space:空间域的标准差。值越大,空间距离的影响越小。
-
多尺度处理:结合不同参数的双边滤波器,可以在多尺度上进行图像处理,提高效果。
🚀 结语
通过今天的实战演练,大家已经掌握了如何使用Python和OpenCV实现双边滤波。双边滤波是计算机视觉中非常基础但重要的技术,可以应用于图像去噪、增强和分析等多个领域。如果你有任何问题或想法,欢迎留言交流。我们下次再见!👋
标签:#计算机视觉 #Python编程 #双边滤波 #图像处理 #OpenCV #NumPy
相关文章:
计算机视觉中的双边滤波:经典案例与Python代码解析
🌟 计算机视觉中的双边滤波:经典案例与Python代码解析 🚀 Hey小伙伴们!今天我们要聊的是计算机视觉中的一个重要技术——双边滤波。双边滤波是一种非线性滤波方法,主要用于图像去噪和平滑,同时保留图像的边…...
【AI日记】24.11.17 看 GraphRAG 论文,了解月之暗面
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 核心工作 内容:看 GraphRAG 论文时间:4 小时评估:不错,继续 非核心工作 内容:了解国内大模型方向,重点了解了创业独角兽-月之暗面&…...
Front Panel Window Bounds 与 Front Panel Window Bounds 的区别与应用
在LabVIEW中,Front Panel Window Bounds 和 Front Panel WindowBounds 是两个不同的属性节点,用于描述前面板窗口的位置和大小。它们的区别主要体现在它们表示的是窗口的不同部分,具体如下: 1 Window Bounds:调整整个…...
比较TCP/IP和OSI/RM的区别
一、结构不同 1、OSI:OSI划分为7层结构:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 2、TCP/IP:TCP/IP划分为4层结构:应用层、传输层、互联网络层和主机-网络层。 二、性质不同 1、OSI:OSI是制定…...
【Java项目】基于SpringBoot的【招聘信息管理系统】
技术简介:系统软件架构选择B/S模式、SpringBoot框架、java技术和MySQL数据库等,总体功能模块运用自顶向下的分层思想。 系统简介:招聘信息管理系统的功能分为管理员,用户和企业三个部分,系统的主要功能包括首页、个人中…...
【论文笔记】LLaMA-VID: An Image is Worth 2 Tokens in Large Language Models
🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: LLaMA-VID: An Image is W…...
使用Web Storage API实现客户端数据持久化
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Web Storage API实现客户端数据持久化 使用Web Storage API实现客户端数据持久化 使用Web Storage API实现客户端数据持久化…...
基于STM32F103的秒表设计-液晶显示
基于STM32F103的秒表设计-液晶显示 仿真软件: Proteus 8.17 编程软件: Keil 5 仿真实现: 在液晶1602上进行秒表显示,每100ms改变一次数值,一共三个按键,分为启动按键、暂停按键、复位按键。 电路介绍: 前面章节里已经和大家介绍了使用数码管设计的秒表,本次仿真将数…...
ReentrantLock的具体实现细节是什么
在 JDK 1.5 之前共享对象的协调机制只有 synchronized 和 volatile,在 JDK 1.5 中增加了新的机制 ReentrantLock,该机制的诞生并不是为了替代 synchronized,而是在 synchronized 不适用的情况下,提供一种可以选择的高级功能。 在 Java 中每个对象都隐式包含一个 monitor(监…...
【JavaScript】this 指向
1、this 指向谁 多数情况下,this 指向调用它所在方法的那个对象。即谁调的函数,this 就归谁。 当调用方法没有明确对象时,this 就指向全局对象。在浏览器中,指向 window;在 Node 中,指向 Global。&#x…...
DB Type
P位 p 1时段描述符有效,p 0时段描述符无效 Base Base被分成了三个部分,按照实际拼接即可 G位 如果G 0 说明描述符中Limit的单位是字节,如果是G 1 ,那么limit的描述的单位是页也就是4kb S位 S 1 表示代码段或者数据段描…...
python-返回函数
Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数! 例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写: def f()ÿ…...
python语言基础-5 进阶语法-5.2 装饰器-5.2.1 闭包
声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。 5.2 装饰器 python中的装饰器相当于java中的注解。装饰器用于为函数添加某些修饰性、…...
用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转(跨文件跳转)这些功能
(一)方法一:安装插件SystemVerilog - Language Support 安装一个vscode插件即可,插件叫SystemVerilog - Language Support。虽然说另一个插件“Verilog-HDL/SystemVerilog/Bluespec SystemVerilog”也有信号提示及定义跳转功能&am…...
MQTT+Springboot整合
1.mqttconfig配置(配置参数是从数据库查出来的) package com.terminal.dc3.api.center.manager.config;import com.collection.common.utils.StringUtils; import com.collection.system.mapper.MqttConfigMapper; import lombok.Data; import org.springframework.beans.fact…...
ERROR TypeError: AutoImport is not a function
TypeError: AutoImport is not a function 原因:unplugin-auto-import 插件版本问题 Vue3基于Webpack,在vue.config.js中配置 当unplugin-vue-components版本小于0.26.0时,使用以下写法 const { defineConfig } require("vue/cli-se…...
软考教材重点内容 信息安全工程师 第 3 章 密码学基本理论
(本章相对老版本极大的简化,所有与算法相关的计算全部删除,因此考试需要了解各个常 用算法的基本参数以及考试中可能存在的古典密码算法的计算,典型的例子是 2021 和 2022 年分别考了 DES 算法中的 S 盒计算,RSA 中的已…...
微信小程序 https://thirdwx.qlogo.cn 不在以下 downloadFile 合法域名列表中
授权登录后,拿到用户头像进行加载,但报错提示: https://thirdwx.qlogo.cn 不在以下 downloadFile 合法域名列表中 解决方法一(未完全解决,临时处理):在微信开发者工具将不校验...勾上就可以访问…...
Linux性能优化之火焰图的起源
Linux火焰图的起源与性能优化专家 Brendan Gregg 密切相关,他在 2011 年首次提出这一工具,用于解决性能分析过程中可视化和数据解读的难题。 1. 背景:性能优化的需求 在现代计算中,性能优化往往需要对程序执行中的热点和瓶颈进行…...
《Markdown语法入门》
文章目录 《Markdown语法入门》1.标题2.段落2.1 换行2.2分割线 3.文字显示3.1 字体3.2 上下标 4. 列表4.1无序列表4.2 有序列表4.3 任务列表 5. 区块显示6. 代码显示6.1 行内代码6.2 代码块 7.插入超链接8.插入图片9. 插入表格 《Markdown语法入门》 【Typora 教程】手把手教你…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
