Python----OpenCV(图像増强——图像平滑、均值滤波、高斯滤波、中值滤波、双边滤波)

Python----计算机视觉处理(Opencv:图像噪点消除:滤波算法,噪点消除)

一、图像平滑

        图像平滑处理(Smoothing Images),也称为图像模糊处理、图像滤波(Images Filtering),就是在保留图像原有信息的情况下,过滤掉图像内部的噪声,所得到的图像称 为平滑图像。

图像处理中平滑操作就是一种预处理的手段,目的是为后续的处理工作做铺垫。

平滑的目的是什么

  • 噪声去除:图像在采集过程中可能会受到各种噪声的影响,平滑操作能够有效减小噪声对图像质量的影响。

  • 特征提取:通过平滑去除细节,有助于在后续处理(如边缘检测、形态学处理等)中更好地提取关键特征。

  • 图像压缩:某些压缩算法依赖于图像的平滑化,以降低数据冗余。

常见滤波

  • 均值滤波

  • 高斯滤波

  • 中值滤波

  • 双边滤波

二、均值滤波

        均值滤波是一种常用的线性滤波技术,主要用于平滑信号,从而减少噪声。这种方法通过将信号中某个点的值替换为其邻域内所有点的平均值,来消除噪声波动。

        但需要注意的是,由于它取的是“平均”,所以在消除噪声的同时,也会不可避免地模糊掉一些信号的细节

2.1、均值滤波核心思想

        均值滤波是一种简单的平滑技术,通过将图像中某个像素与其邻域像素的平均值替换,从而使图像变得模糊。它的核心思想是用一个固定大小的窗口(例如 3x3 或 5x5)在图像上滑动,然后将窗口内的所有像素值的平均值赋给当前像素。

1、选择窗口大小

均值滤波的第一步是选择一个滑动窗口的大小,通常为3x3、5x5等。窗口的大小决定了参与平均计算的像素点数量。一般选择奇数大小的窗口,以便有一个明确的中心点。

2、窗口移动

均值滤波的窗口需要在信号或图像上逐步移动。窗口通常从信号或图像的左上角开始,一步一步地向右移动,然后再向下移动,直到覆盖整个信号或图像。

如果步长加大,会使得计算结果的精度下降,导致滤波效果不佳。

3、计算平均值

在窗口确定的位置,将窗口中的所有数值相加,然后除以窗口中的数值个数,得到均值。这个均值将作为窗口中心点的新的数值。这就像我们做菜时,将所有食材切碎、混合,然后尝一尝,确定一个统一的“味道”。

2.2、适用场景

  • 椒盐噪声:均值滤波对随机的黑白噪声(如椒盐噪声)有较好的去除效果,因为它可以通过邻域平均将这些极端值抹去。
  • 图像处理和分析:在图像预处理阶段,均值滤波常常作为去噪步骤,用于准备更清晰的图像以供进一步处理,例如边缘检测、图像分割等。

 

import cv2 # 导入OpenCV库img = cv2.imread('./images/jiaoyan_pands.jpg')# 对图像进行均值模糊
# (5, 5) 是模糊核的大小,它决定了模糊的程度。
# 数字越大,模糊效果越明显。
res = cv2.blur(img, (5, 5))# 显示原始图像
cv2.imshow('img', img)# 显示模糊后的图像
cv2.imshow('res', res)# 等待按键
# 0 表示无限等待,直到用户按下任意按键。
# 如果设置为正整数,则表示等待的毫秒数。
cv2.waitKey(0)# 销毁所有OpenCV窗口
cv2.destroyAllWindows()

三、高斯滤波

3.1、概念

        高斯滤波(Gaussian filter) 包含许多种,包括低通、带通和高通等,我们通常图像上说的高斯滤波,指的是高斯模糊(Gaussian Blur) ,是一种高斯低通滤波 ,其过滤调图像高频成分(图像细节部分),保留图像低频成分(图像平滑区域),所以对图像进行 ‘高斯模糊’ 后,图像会变得模糊。

高斯模糊对于抑制 高斯噪声 (服从正态分布的噪声) 非常有效。

        这个矩阵的每个数字表示该位置上像素点的权重。中间的数字权重大,表示图像中心的 像素影响较大,而周围像素的影响较小。 

高斯模糊本质上就是利用高斯函数生成的高斯核(高斯模板)对图像进行卷积操作。

应用场景

  1. 噪声去除:在图像预处理阶段,常用于去除高斯噪声。
  2. 边缘检测前处理:在边缘检测算法(如Canny算法)之前,通常会先应用高斯滤波来去除噪声,提高边缘检测的效果。

import cv2 # 导入OpenCV库img = cv2.imread('./images/jiaoyan_pands.jpg')# 对图像进行高斯模糊
# (5, 5) 是高斯核的大小,它决定了模糊的程度。
# sigmaX=0 表示OpenCV会根据核的大小自动计算X方向的标准差。
# 高斯模糊相比均值模糊,在平滑图像的同时更能保留图像的边缘信息。
gres = cv2.GaussianBlur(img, (5, 5), sigmaX=0)# 显示原始图像
cv2.imshow('img', img)# 显示高斯模糊后的图像
cv2.imshow('gres', gres)# 等待按键
# 0 表示无限等待,直到用户按下任意按键。
cv2.waitKey(0)# 销毁所有OpenCV窗口
cv2.destroyAllWindows()

四、中值滤波

        中值滤波是一种常用的图像处理技术,特别用于去除图像中的噪声。其基本原理是通过替换每个像素的值为其邻域内像素的中值来平滑图像,减少噪声。

中值滤波的步骤

  1. 对于图像中的每个像素点,选取一个邻域窗口(通常是3x3、5x5或7x7的窗口)。
  2. 将窗口内的所有像素值排序。
  3. 用排序后的中间值替代当前像素的值。

这种滤波方法尤其对椒盐噪声(即图像中有白点和黑点)效果显著,因为它能有效去除这些异常值,而不影响图像的整体结构。

中值滤波的优缺点

  • 优点:能有效去除椒盐噪声,保留图像边缘信息。
  • 缺点:处理速度较慢,尤其在窗口较大时,计算量会增加。

import cv2 # 导入OpenCV库img = cv2.imread('./images/jiaoyan_pands.jpg')# 对图像进行中值模糊
# 5 是模糊核的大小(必须是奇数)。
# 中值模糊对于去除椒盐噪声(salt-and-pepper noise)特别有效,
# 因为它用像素邻域内的中值来替代中心像素的值,
# 从而有效地消除离群的噪声点,同时又能较好地保留图像边缘。
medres = cv2.medianBlur(img, 5)# 显示原始图像
cv2.imshow('img', img)# 显示中值模糊后的图像
cv2.imshow('medres', medres)# 等待按键
# 0 表示无限等待,直到用户按下任意按键。
cv2.waitKey(0)# 销毁所有OpenCV窗口
cv2.destroyAllWindows()

五、双边滤波

        双边滤波(Bilateral Filtering)是一种在保持边缘的同时去除噪声的图像平滑技术。与传统的高斯滤波不同,双边滤波在空间上进行平滑的同时,也考虑像素值的差异,从而有效地保护边缘信息。        

        双边滤波的核心思想是:在滤波时,不仅考虑像素之间的空间距离,还考虑像素值的相似性。具体来说,双边滤波的权重由两部分组成

双边滤波主要用于以下几个领域:

  1. 去噪:适用于去除图像中的噪声,特别是图像中包含大量高频噪声时。

  2. 图像平滑:在保持边缘的同时平滑图像,常用于图像美化。

  3. 图像增强:增强图像中的特征,突出重要部分,尤其是在边缘部分。

cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)
参数描述
src输入图像,可以是灰度图或彩色图。
d邻域直径。若为负值,函数会根据 sigmaSpace 自动计算。
sigmaColor颜色空间的标准差,控制颜色相似度的影响。较大的值意味着更多的像素会被平滑处理。
sigmaSpace空间坐标的标准差,控制像素的空间邻域影响。较大的值意味着滤波效果覆盖更大范围。

import cv2 # 导入OpenCV库img = cv2.imread('./images/nezha.png')# 对图像进行双边滤波
# 双边滤波是一种非线性的平滑滤波方法,它在平滑图像的同时能够很好地保留边缘。
# 参数解释:
# 1. img: 输入图像。
# 2. 15: 滤波器核的直径。该值越大,参与计算的像素越多,去噪效果越明显,但计算量也越大。
# 3. 30: 颜色空间标准差 (sigmaColor)。该值越大,在颜色相差较大的像素之间进行模糊的可能性越大。
#        较大的值意味着更多的颜色会被混合在一起。
# 4. 75: 坐标空间标准差 (sigmaSpace)。该值越大,越远的像素会相互影响,模糊效果越明显。
#        它决定了在多大的空间范围内进行模糊。
# 双边滤波的优点在于它结合了空间距离和像素颜色相似度来决定像素的权重,
# 从而实现了在去除噪声的同时保留图像的边缘细节。
biltblur = cv2.bilateralFilter(img, 15, 30, 75) # 修正了sigmaSpace参数为75,使其更常见且避免过大的模糊# 显示原始图像
cv2.imshow('img', img)# 显示双边滤波后的图像
cv2.imshow('biltblur', biltblur)# 等待按键
# 0 表示无限等待,直到用户按下任意按键。
cv2.waitKey(0)# 销毁所有OpenCV窗口
cv2.destroyAllWindows()

Python----计算机视觉处理(Opencv:图像噪点消除:滤波算法,噪点消除) 

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

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

相关文章

笔记:使用EasyExcel导入csv文件出现编码问题,导致导入数据全为null的解决方法

笔记:使用EasyExcel导入csv文件出现编码问题,导致导入数据全为null的解决方法 通常情况下,我们使用excel导入,但是部分情况下或者领导要求,我们需要使用csv导入文件,但是csv文件模板下载之后会变成系统当前…

NL2SQL(Natural Language to SQL)优化之道:提升准确率与复杂查询能力

自然语言 → SQL 的转译(NL2SQL)技术,是让非技术用户与数据库“对话”的桥梁。而在实际应用中,我们不仅需要“能转”,更要“转得准、转得全、转得快”。 一、什么是 NL2SQL? NL2SQL(Natural La…

java中map的循环方式

什么是Map集合? Map是Java中的一个接口,它用于存储键-值对,并且键和值都可以是任意对象。它是Java集合框架中的一部分,并提供了一些方法来操作和访问Map中的元素。 Map中的每个键都是唯一的,这意味着不能使用相同的键…

python学习笔记(深度学习)

文章目录 1、概述2、学习内容2.1、pytorch 常见语法2.1.1、sum2.1.2、广播机制2.1.3、张量2.1.4、DataLoader 2.2、普通语法2.2.1、迭代器 1、概述 本篇博客用来记录,在深度学习过程中,常用的 python 语法内容 2、学习内容 2.1、pytorch 常见语法 2.…

力扣网C语言编程题:搜索二维矩阵(右上角->左下角解法)

一. 简介 上一篇文章关于"在二维数组中查找某个元素"的问题,提供了两种解题思路,文章如下: 力扣网C语言编程题:搜索二维矩阵的普通解法与二分查找法-CSDN博客 本文提供第三种解题思路:从左下角->右上角…

AI大模型流式输出,OkHttp Log拦截打印方案

背景: 使用okhttp框架进行网络访问时,一般会使用 HttpLoggingInterceptor 打印请求和响应的log。在使用okhttp访问AI大模型时,如果选择流式输出,那么响应的body数据使用的SSE技术,服务异步发送大模型生成的增量token&…

看数据世界的历史:全面梳理从关系库、大数据到AI时代的数据发展及展望

序章 在数据库不断发展的时代里,我们看到了关系型数据库(RDB)在一次次的数据演变过程中的占据王位,捍卫了胜利,像一个王朝更替下的“王权”的故事,精彩有趣。 本篇就来探讨下数据库的发展兴衰史&#xff0…

元宇宙与人工智能的融合:从虚拟世界到智能生态的IT新革命

文章目录 引言:前沿技术重塑数字交互体验一、元宇宙与AI融合的本质:虚拟空间与智能交互的交汇元宇宙赋能AI:AI赋能元宇宙: 二、元宇宙与AI融合的演进:从概念到产业热潮三、核心技术:元宇宙与AI融合的基石与…

问卷调查[mqtt dht]

任务 this code uses esp32-wroom-32 and dht11 to read the humidty and temperature, besieds, it will send the meassage to the cloud platform. All communication is conducted through MQTT. 打分标准 您应该对以下代码进行评级,并且必须遵守如…

swift 对象转Json

在 Swift 中将对象转换为 JSON 可以通过以下方法实现: 使用 Codable 协议 Swift 的 Codable 协议(Encodable 和 Decodable 的组合)是处理 JSON 编码和解码的推荐方式。 struct Person: Codable {var name: Stringvar age: Int }let person…

Python学习Day43

学习来源:浙大疏锦行 import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as transforms import numpy as np import matplotlib.pyplot as plt from PIL import Image import os # 设置随机…

了解一下Unity AssetBundle 的几种加载方式

Unity 的 AssetBundle 系统提供了多种加载方式,以满足不同场景下的资源管理和性能需求。 同步加载(LoadFromFile) 同步加载使用 AssetBundle.LoadFromFile 方法从文件系统中直接加载 AssetBundle。这种方式会阻塞主线程,直到加载…

鸿蒙边缘智能计算架构实战:多线程图像采集与高可靠缓冲设计

目录 一、技术背景与挑战二、鸿蒙边缘计算架构的核心特性1. 分布式软总线:打破设备孤岛2. 轻量化多线程模型 三、多线程图像采集的稳定性设计1. 分层缓冲队列架构2. 线程优先级策略 四、边缘侧高可靠缓冲机制1. 基于分布式数据管理的容错设计2. 动态带宽调节 五、实…

excel中vba开发工具

1、支持单元格点击出现弹框进行选择 支持模多次模糊查询 Private Sub CommandButton1_Click() Call vehicle_查询 End SubPrivate Sub Worksheet_Activate()Call vehicle_取出车架号和公司名称 取出不重复的车架号Sheet13.ComboBox1.Visible False 车架号显示Sheet13.ComboB…

CatBoost:征服类别型特征的梯度提升王者

基于有序提升与对称树的下一代GBDT框架,重塑高维分类数据处理范式 一、CatBoost的诞生:解决类别特征的终极挑战 2017年由俄罗斯Yandex团队开源,CatBoost(Categorical Boosting)直指机器学习中的核心痛点:类…

使用 WSL 启动ubuntu.tar文件

使用 WSL 启动ubuntu.tar文件,可按以下步骤进行3: 检查 WSL 版本:确保你的 WSL 版本为 2.4.8 或更高版本。可以在命令行中输入wsl --update来更新 WSL 到最新版本。 设置默认 WSL 版本:如果还没有将 WSL 2 设置为默认版本&#x…

vue-23(创建用于逻辑提取的可重用组合组件)

创建用于逻辑提取的可重用组合组件 可重用的组合式是 Vue 组合式 API 的基石,它使你能够在多个组件中提取和重用有状态逻辑。这有助于编写更清晰的代码,减少冗余,并提高可维护性。通过将特定功能封装到组合式中,你可以轻松地共享…

数据透视表学习笔记

学习视频:Excel数据透视表大全,3小时从小白到大神!_哔哩哔哩_bilibili 合并行标签 初始数据透视表 不显示分类汇总 以大纲形式显示 在组的底部显示所有分类汇总 以表格形式显示 合并单元格-右键-数据透视表选项 选中-合并并剧中排列带…

吃透 Golang 基础:测试

文章目录 go test测试函数随机测试测试一个命令白盒测试外部测试包 测试覆盖率基准测试剖析示例函数 go test go test命令是一个按照一定的约定和组织来测试代码的程序。在包目录内,所有以xxx_test.go为后缀名的源文件在执行go build时不会被构建为包的一部分&#…

酒店服务配置无门槛优惠券

1.查看酒店绑定的是那个仓库; 凯里亚德酒店(深圳北站壹城中心店),绑定的是“龙华民治仓(睿嘀购” 2.“门店列表”选择“龙华民治仓(睿嘀购””中的“绑定场所” 3.通过酒店名字查找绑定的商品模板; 凯里亚德酒店(深圳…