day8 - 使用不同的滤波核进行图像降噪

news2024/12/23 10:01:18

本期主要介绍用于图像平滑处理的滤波,分别是方框滤波、均值滤波、中值滤波、高斯滤波,比较不同滤波的效果;并了解自定义滤波器进行图像处理。

完成本期内容,你可以:

  • 会使用方框滤波、均值滤波、中值滤波、高斯滤波进行图像处理

  • 掌握根据不同的图像选择合适的滤波器

若要运行案例代码,你需要有:

  • 操作系统:Ubuntu 16 以上 或者 Windows10

  • 工具软件:VScode 或者其他源码编辑器

  • 硬件环境:无特殊要求

  • 核心库:python 3.6.13, opencv-contrib-python 3.4.11.39

点击下载源码


方框滤波

OpenCV将方框滤波器封装成了boxFilter()方法。

函数原型: dst = cv2. boxFilter(src, ddepth,ksize, anchor, normalize,eborderType)
dst为输出图像。

参数描述如下:

参数描述
src被处理的图像
ddepth结果图像的图像深度,可以用-1表示与原始图像相同。
ksize滤波核大小,其格式为(高度,宽度),建议使用宽高相等的奇数边长
anchor可选参数,滤波核的锚点
normalize在滤波时是否进行归一化。
borderType可选参数,边界样式,建议采用默认值

均值滤波

OpenCV将均值滤波器封装成了cv2.blur() 方法。

函数原型: dst = cv2.blur(src, ksize, anchor, borderType)

image为输出图像。

参数描述如下:

参数描述
src被处理的图像
ksize滤波核大小,其格式为(高度,宽度),建议使用宽高相等的奇数边长
anchor可选参数,滤波核的锚点
borderType可选参数,边界样式,建议采用默认值

中值滤波

OpenCV将中值滤波器封装成了cv2.medianBlur()方法。

函数原型:dst = cv2.medianBlur(src,ksize);

参数描述如下:

参数描述
src被处理的图像
ksize滤波核的边长,必须是大于1的奇数,方法会根据此边长自动创建一个正方形的滤波核。

高斯滤波

OpenCV将高斯滤波器封装成了cv2.GaussianBlur()方法。

函数原型: dst = cv2.GaussianBlur( src, ksize, sigmaX[, sigmaY[, borderType]] )
dst为返回值,表示进行高斯滤波后得到的处理结果。

参数描述如下:

参数描述
src需要处理的图像,即源图像
ksize滤波核大小,其格式为(高度,宽度),建议使用宽高相等的奇数边长
sigmaX卷积核在水平方向上(X轴方向)的标准差,其控制的是权重比例。
sigmaY卷积核在垂直方向上(Y轴方向)的标准差。
borderType可选参数,边界样式,建议采用默认值

自定义滤波

OpenCV中提供了cv2.filter2D()函数来实现自定义滤波器。

函数原型: dst = cv2.filter2D( src, ddepth, kernel, anchor, delta, borderType )
dst为输出图像。

参数描述如下:

参数描述
src被处理的图像
ddepth结果图像的图像深度,可以用-1表示与原始图像相同
kernel卷积核,是个单通道的数组
anchor可选参数,滤波核的锚点
delta可选参数,修正值
borderType可选参数,边界样式,建议采用默认值

具体步骤

1. 创建项目结构

创建项目名为使用不同的滤波进行图像降噪,项目根目录下新建code文件夹储存代码,新建dataset文件夹储存数据,项目结构如下:

使用不同的滤波进行图像降噪                 # 项目名称
├── code                               # 储存代码文件
├── dataset                            # 储存数据文件

注:如项目结构已存在,无需再创建。

2. 使用不同的滤波处理图像

将图像scenery.png添加了噪声的图像sp_noise.png进行降噪处理。

请添加图片描述

scenery.png
  1. code文件夹下创建sp_noise.py文件;
  2. 导入所需的库,OpenCV、datetime;
  3. 读取dataset文件夹下的sp_noise.png图片,并进行展示,标题为sp_noise ;
  4. 分别使用均值滤波、中值滤波、高斯滤波进行图像处理,并展示结果;

步骤一:创建文件并读取图像

代码实现

# 导入OpenCV、datetime
import cv2
import datetime

# 读取图像
o=cv2.imread("../dataset/sp_noise.png")
cv2.imshow("sp_noise",o)

请添加图片描述
请添加图片描述

添加噪声后的图像

步骤二:使用均值滤波处理图像

代码实现

# 使用 5*5的滤波核进行均值滤波处理
strat_t = datetime.datetime.now() # 获取当前时间
blur_img=cv2.blur(o,(5,5))
end_t = datetime.datetime.now()
t = end_t - strat_t #计算均值滤波处理所用时间
print('均值滤波处理耗时:',t)
cv2.imshow("blur_img",blur_img)

均值滤波处理耗时: 0:00:00.003000

请添加图片描述

均值滤波处理后的效果

步骤三:使用中值滤波处理图像

代码实现

# 使用 3*3的滤波核进行中值滤波处理
strat_t = datetime.datetime.now()
median_img=cv2.medianBlur(o,3)
end_t = datetime.datetime.now()
t = end_t - strat_t
print('中值滤波处理耗时:',t)
cv2.imshow("median_img",median_img)

中值滤波处理耗时: 0:00:00.000999

请添加图片描述

中值滤波处理后的效果

步骤四:使用高斯滤波处理图像

代码实现

# 使用 3*3标准差为0的滤波核进行高斯滤波处理
strat_t = datetime.datetime.now()
gaussian_img = cv2.GaussianBlur(o,(3,3),0,0)
end_t = datetime.datetime.now()
t = end_t - strat_t
print('高斯滤波处理耗时:',t)
cv2.imshow("gaussian_img",gaussian_img)

高斯滤波处理耗时:0:00:00.002001

请添加图片描述

高斯滤波处理后的效果

步骤五:关闭窗口

代码实现

cv2.waitKey()
cv2.destroyAllWindows()

5.3 结果比较

请添加图片描述

通过三种不同滤波方法对图像进行处理,中值滤波对图像的处理耗时较短,均值滤波耗时较长;但是从滤波效果来看,中值滤波效果优于其他两者;均值滤波对于噪声的处理效果略好于高斯滤波,但是对于图像的模糊更多;从综合效果出发,对于这张图像,使用中值滤波处理的效果最好。

点击下载源码

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

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

相关文章

实时聊天组合功能,你了解吗?

你有兴趣安装实时聊天组合功能吗?如果您选择了SaleSmartly(ss客服),您的实时聊天插件可以不仅仅只是聊天通道,还可以有各种各样的功能,你不需要包含每一个功能,正所谓「宁缺勿滥」,功…

Windows主机中构建适用于K8S Operator开发环境

基于 win 10 打造K8S应用开发环境 一、wsl子系统安装 在cmd命令行终端或powershell中操作 1.1 确认windows操作系统版本 1.2 开启wsl功能 1.3 wsl配置 PS C:\Users\cpf> wsl提示:适用于 Linux 的 Windows 子系统没有已安装的分发版。可以通过访问 Microsoft St…

使用canvas给图片添加水印

上接文章“图片处理” canvas元素其实就是一个画布,我们可以很方便地绘制一些文字、线条、图形等,它也可以将一个img标签里渲染的图片画在画布上。 我们在上传文件到后端的时候,使用input标签读取用户本地文件后得到的其实是一个Blob对象&a…

Redis7实战加面试题-基础篇(Redis持久化,Redis事务,Redis管道,Redis发布订阅)

Redis持久化 RDB (Redis DataBase) RDB(Redis 数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照。实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。这样一来即使…

HCIA-ARP、MAC、交换机工作原理

目录 万能数据转发模型 ARP协议:地址解析协议 以太网帧的交换 IP地址和Mac地址的区别: 以太网交换机介绍: 交换机的工作原理: ​编辑交换机处理数据的三种方式: Mac表和ARP表的区别: 万能数据转发模…

自定义注解和@Target、@Retention注解的使用

说明:注解可以理解为另一种形式的配置,可用于在类上、方法上等,标志是“”,如重写方法上的“Override”就是一种注解。这里我通过一个实例,来介绍自定义注解和java元注解(Target、Retention)的使…

案例20:Java物流管理系统设计与实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

ChatGPT全球最大开源平替OpenAssistant:基于Pythia和LLaMA微调而来

论文地址:https://drive.google.com/file/d/10iR5hKwFqAKhL3umx8muOWSRm7hs5FqX/view 项目地址:https://github.com/LAION-AI/Open-Assistant 数据集地址:https://huggingface.co/datasets/OpenAssistant/oasst1 体验地址:http…

Hiredis的基本使用

目录 前言 一.hiredis的安装 二.同步API 2.1.连接Redis数据库 2.1.1 无超时时间,阻塞等待连接 2.1.2 设置超时时间,阻塞等待连接。 2.1.3 非阻塞,不管连接与否,立即返回。 2.2.执行命令 2.2.1 返回执行上下文 2.2.2 没有返回执…

伪类元素的用法总结

1:自闭标签不适用伪类元素 自闭合标签 1. 一般标签   由于有开始符号和结束符号&#xff0c;因此可以在内部插入其他标签或文字。 <p>“绿叶&#xff0c;给你初恋般的感觉。”</p> 2. 自闭合标签   由于只有开始符号而没有结束符号&#xff0c;因此不可以在内…

2023-05-24:为什么要使用Redis做缓存?

2023-05-24&#xff1a;为什么要使用Redis做缓存&#xff1f; 答案2023-05-24&#xff1a; 缓存的好处 买啤酒和喝啤酒的例子可以帮助我们理解缓存的好处。 假设你在超市里买了一箱啤酒&#xff0c;如果你需要每次想喝啤酒就去超市购买&#xff0c;无疑会浪费很多时间和精力…

vue+element纯手工完美模拟实现小米有品网站

一、预览 小米有品官网&#xff1a;小米有品 本作品demo预览地址&#xff1a;点击预览 二、效果图对比 1.官方效果截图&#xff1a; 2.作者实现的demo效果图&#xff1a; 首页&#xff1a; 上新精选&#xff1a; 商品详情&#xff1a; 购物车&#xff1a; 登录&#xff1a; …

【论文阅读】23_SIGIR_Disentangled Contrastive Collaborative Filtering(分离对比协同过滤)

【论文阅读】23_SIGIR_Disentangled Contrastive Collaborative Filtering&#xff08;分离对比协同过滤&#xff09; 文章目录 【论文阅读】23_SIGIR_Disentangled Contrastive Collaborative Filtering&#xff08;分离对比协同过滤&#xff09;1. 来源2. 介绍3. 模型方法3.1…

最小生成树 Prim算法实现(c语言代码)

【问题描述】 城市之间的公路交通可以用一个无向图表示。如下图所示&#xff1a; 顶点表示城市、边表示城市之间有公路相连&#xff0c;边上的权值表示城市之间的公路长度。 编程解决以下问题&#xff1a; &#xff08;1&#xff09;输入城市信息和城市之间公路的信息&…

2023最新SRC漏洞挖掘快速上手攻略!

前言 随着网络安全的快速发展&#xff0c;黑客攻击的手段也越来越多样化&#xff0c;因此SRC漏洞挖掘作为一种新的网络安全技术&#xff0c;也在不断发展和完善。那么&#xff0c;作为一个网安小白如果想要入门SRC漏洞挖掘&#xff0c;需要掌握哪些知识呢&#xff1f;以下是本…

Vue3入门

前言 在Vue 3提供的丰富的基础配置和插件生态系统之下&#xff0c;它是一种适用于多场景开发的前端框架&#xff0c;包括web应用程序、移动应用和桌面应用。使用Vue 3&#xff0c;您可以快速高效构建出具有优秀用户体验的应用程序。 准备工作 首先&#xff0c;我们需要安装V…

运营-15.涉及促销活动的计算原则

1.是否 参与促销活动 如果商品参加促销活动&#xff0c;则在订单结算的时候显示已经参加的活动&#xff0c;否 则不显示&#xff1b; 2.是否 满足促销条件 如果有参加某个活动&#xff0c;则还要判断是否满足活动的条件&#xff0c;比如满200减 10&#xff0c;但是商品价格不足…

spring-cloud-alibaba-seata分布式事务实例

第一步: 首先访问: https://seata.io/zh-cn/blog/download.html 下载我们需要使用的seata1.6.0服务 第二步: 1.在你的参与全局事务的数据库中加入undo_log这张表 -- for AT mode you must to init this sql for you business database. the seata server not need it. CRE…

关于档案室十防环境监控的一些关键内容

档案库房十防监控系统 智慧档案平台/温湿度/空气质量/漏水/视频/门禁/一体化管控平台 HONSOR多维空间可视化智慧档案库房建设一体化平台分享 三维可视化智慧档案馆库房一体化环境安全管控系统平台【相关项目经验图片/相关系统拓展图】【鉴赏】 1、智慧档案馆 2、智慧档案库房…

从零开始之电机FOC控制

我们将撕开FOC神秘而虚伪的面纱&#xff0c;以说人话的方式讲述它。真正的做到从零开始&#xff0c;小白一看就会&#xff0c;一学就废。 如果觉得有用的话&#xff0c;就点个赞呗&#xff0c;纯手码。 一、什么是FOC&#xff1f; FOC是Field Orientation Control的缩写&#…