第三章-OpenCV基础-6-滤波处理

news2024/9/24 5:42:01

前置内容

在尽量保留图片原有信息的情况下,过滤掉图像内部的噪声的过程成为对图像的平滑处理(又称滤波处理),所得到的图像成为平滑图像(把图像中的噪点过滤掉,生成一个相对平滑的图像)。

举个栗子:

一个图像有个噪点,加载发现有个点的像素值和周边像素值差异太大格格不入,使用周边像素点平均生成一个新的值,重新显示,噪点不见,页面平滑。

图像平滑处理的基本原理是将噪声所在像素点的像素值根据一定方式处理为周边临近像素点的近似值,书中介绍均值滤波、高斯滤波、中值滤波等方法。

另外,图像平滑处理通常伴随图像的模糊操作,所以平滑处理有时也称为图像模糊处理。

均值滤波

基本原理: 均值滤波是指用当前像素点周边N*N个像素值的均值代替当前像素值。需要遍历处理图像内的每一个像素点。

以像素点为中心时,可以计算3x3范围内9个像素点的平均数,也可以计算5x5范围内的25个像素点的平均数。对图像的边界点,可以只取图像内存在的周围领域点的像素平均值。

对于5x5的范围,计算如下图:

也就是每个像素点的滤波都是视为与一个内部值均为1/25的5x5的矩阵相乘得到均值滤波的计算结果。

简化后可以变成如下所示结果:

在OpenCV中,将上图右侧的矩阵称为卷积核(这个卷积核太重要了,只要一个个图分析下来)。一般形式如下:

其中,M和N分别对应矩阵的高度和宽度,一般情况下,M和N相等。M和N的值越大,参与运算的像素点越多,当前像素点的计算结果受到越多的周围的点影响。

函数语法: dst = cv2.blur( src , ksize , anchor , borderType )

  • dst : 进行均值滤波后得到的处理结果
  • src : 原始图片
  • ksize : 滤波核的大小,也就是上面所说的M和N的值
  • anchor : 锚点,默认值为(-1,-1),表示当前计算均值的像素点位于滤波核的中心位置,默认即可。
  • borderType : 边界样式,决定以何种方式处理边界,根据填充值的不同边界样式也不同,填充值可以为0/255/边缘值/特定值,直接采用默认即可。

所以均值滤波函数可以简化为 dst = cv2.blur( src ,ksize )

举栗说明:

import cv2 as cv

lena_noise = cv.imread("lenaNoise.png")
lena_3x3 = cv.blur(lena_noise, (3, 3))  # 滤波核越小,图像噪点越清晰,但图片越清晰
lena_7x7 = cv.blur(lena_noise, (17, 17))  # 滤波核越大,图像越模糊
cv.imshow("lena noise", lena_noise)
cv.imshow("lena 3x3", lena_3x3)
cv.imshow("lena 7x7", lena_7x7)

cv.waitKey()
cv.destroyAllWindows()

效果如下(依次为原图、3x3、7x7):

高斯滤波

原理:在均值滤波中,计算矩阵中的每个像素的权重都是相等的,在高斯滤波中,会将临近的像素点的权重加大,远离中心位置的像素点的权重减少。

根据滤波核的大小一般有3x3、5x5、7x7,权重分布如下:

这里以3x3的卷积核为例。

实际计算为:

矩阵范围内的各个点乘以各个点的权重比例之和就是高斯滤波后的新值。

另外,大小一样的滤波核内部相同位置的比重可以不一样,无论滤波核的权重数为整数或者小数,体现的都是比重。

函数语法: dst = cv2.GaussianBlur( src , ksize , sigmaX , sigmaY , borderType )

  • dst和src分别是输出图像和原始输入图像
  • ksize : 滤波核大小,宽高必须是奇数
  • sigmaX : 滤波核在水平方向上的标准差,控制的是权重比,此参数为必选项
  • sigmaY : 滤波核在垂直方向上的标准差,若该值为0,则只采用sigmaX。
  • borderType : 边界样式,以何种方式处理边界,默认值即可

sigma越大,权重值分布越平缓。邻域点对输出值的影响越大,图像越模糊。sigma越小,权重值分布越突变。邻域点对输出值的影响越小,图像变化就更小。

官方文档建议显示指定ksize、sigmaX、sigmaY,可以指定sigmaX和sigmaY为默认值0,所以常用形式为:

dst = cv2.GaussianBlur( src , ksize ,0 , 0 )

举栗说明:

import cv2 as cv

lena_noise = cv.imread("lenaNoise.png")
ksize = 3 #滤波核长宽
lena_0 = cv.GaussianBlur(lena_noise, (ksize, ksize), 0, 0)  # sigmaY=sigmaY=0
lena_05 = cv.GaussianBlur(lena_noise, (ksize, ksize), 0.5, 0.5)  # sigmaY=sigmaY=0.5
lena_1 = cv.GaussianBlur(lena_noise, (ksize, ksize), 1, 1)  # sigmaY=sigmaY=1
cv.imshow("lena noise", lena_noise)
cv.imshow("lena_0", lena_0)
cv.imshow("lena_05", lena_05)
cv.imshow("lena_1", lena_1)

cv.waitKey()
cv.destroyAllWindows()

中值滤波

基本原理:中值滤波取当前像素点及周边像素点的像素值,并做排序处理,然后取中间值作为像素点的像素值。

像素点及周边像素点排序后为[ 66 , 78 , 90 , 91 , 93 , 94 , 95 , 97 , 101],取中间值93替换为当前像素点的78。

函数语法: dst = cv2.medianBlur( src , ksize)

ksize:滤波核的宽高必须是比1大的基数

举栗说明:

import cv2 as cv

lena_noise = cv.imread("lenaNoise.png")
lena_0 = cv.medianBlur(lena_noise, 3)  # 滤波核的长宽为3
cv.imshow("lena noise", lena_noise)
cv.imshow("lena_medianBlur", lena_0)

cv.waitKey()
cv.destroyAllWindows()

小结:综合多种平滑操作的计算算法和实际效果,还是中值滤波的效果比较好,但涉及排序运算上会多一些。

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

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

相关文章

[C++]多态

🥁作者: 华丞臧 📕​​​​专栏:【C】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉LeetCode 文章目录一、多态…

【Opencv项目实战】背景替换:帮你的证件照换个背景色

文章目录方法一、基于removebg的背景替换1.1、removebg介绍1.2、环境配置1.3、算法详解1.4、实战:单张图片背景替换1.5、实战:多张图片背景替换1.6、实战:UI自选择图片进行背景替换方法二、基于backgroundremover的背景替换2.1、backgroundre…

创建对象的方式和对属性的操作

javaScript支持多种编程范式,包括函数式编程和面向对象编程,javaScript的对象被设计成一组属性的无序集合,由key和value组成。 创建对象的两种方式 早期使用创建对象方式最多的是使用Object类,使用new关键字来创建一个对象&…

应用篇|网络安全知识培训考试,答题小程序操作指引

网络安全知识培训考试,答题小程序操作指引关于全民防诈反诈宣传或者网络安全知识学习,如何进行组织一场微信线上答题考试?可以在小程序“护网专题信息安全知识竞答”,先创建一个学习单位/小组,再邀请成员加入单位/小组…

如何构造个人 AI 策略:从 AI 绘画的演进与 ChatGPT 现状出发?

持续关注 AI 相关探索:https://github.com/phodal/ai-researchPS:就本文的结论而言,我相信你已经或多或少的有所体会了。也因此,本文更多的是展现一个思考的过程,而不是一个纯粹的结论。AIGC 是什么?它是指…

pyenv安装python虚拟环境

文章目录pyenv介绍准备工作安装pyenv设置虚拟环境pyenv介绍 pyenv是一个forked自ruby社区的简单、低调、遵循UNIX哲学的Python环境管理工具, 它可以轻松切换全局解释器版本, 同时结合vitualenv插件可以方便的管理对应的包源。 为什么我们需要pyenv呢 Python解释器版本混乱, 2…

怎么关闭win10自动更新?我们可以这么做!

Win10自动更新可以使系统保持最新状态,但也可能导致一些问题,例如占用大量网络流量,导致系统速度减慢等。如果你希望关闭win10自动更新,不要电脑自动更新,我们可以跟着这篇文章这么做! 操作环境&#xff1a…

测试行业干了5年,从只会点点点到了现在的测试开发,总算是证明了自己

测试不止是点点点 我感觉我是一个比较有发言权的人吧,我在测试行业摸爬滚打5年,以前经常听到开发对我说,天天的点点点有意思没? 和IT圈外的同学、朋友聊起自己的工作,往往一说自己是测试,无形中也会被大家…

Jmeter 连接 JDBC 报错Communications link failure解决办法(云服务器搭建了LNMP环境必看)

换jar包、加?useSSLfalse,3306加防火墙,都不能解决我的问题。最终我发现是我的LNMP环境导致 错误提示 Response message:java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failureThe last packet sent successf…

【跨尺度学习:迭代残差:超分:泛锐化】

Pansharpening via Super-Resolution Iterative Residual Network With a Cross-Scale Learning Strategy (基于跨尺度学习策略的超分辨率迭代残差网络泛锐化) 全色锐化是利用高空间分辨率全色(HR PAN)图像恢复低空间分辨率多光…

Vue-Router 路由管理器

文章目录知识点前端路由的概念及作用Vue-Router 的安装Vue-Router 的基本使用知识点 前端路由的概念及作用Vue-Router 的安装Vue-Router 的基本使用 前端路由的概念及作用 需要大家注意的是,这里的路由可不是指我们日常生活中的路由器 😂 ,…

Allegro如何打开或者关闭DFA规则设置操作指导

Allegro如何打开或者关闭DFA规则设置操作指导 在用Allegro做PCB布局的时候,器件与器件之间的DFA规则可以避免器件出现装配问题。如下图 当DFA规则设置好之后,如何打开或者关闭规则,具体操作如下 点击Setup点击Constraints

华为OD机试题,用 Java 解【相同数字的积木游戏 1】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

2023年“网络安全”赛项浙江省金华市选拔赛 任务书

2023年“网络安全”赛项浙江省金华市选拔赛 任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 任务二 Linux操作系统渗透测试 任务三 网页渗透 任务四 Linux系统…

硬件工程师——门控开关的设计

假设自己是一个工程师,那么我们怎么介绍自己呢? 我们首先需要可以自己独立设计项目,需要每一个工程师在开始阶段可以独立做项目,从而提高薪水 那么我们怎么提高做项目的能力呢? 通过项目来积累经验,在短…

百亿数据,毫秒级返回查询优化

近年来公司业务迅猛发展,数据量爆炸式增长,随之而来的的是海量数据查询等带来的挑战,我们需要数据量在十亿,甚至百亿级别的规模时依然能以秒级甚至毫秒级的速度返回,这样的话显然离不开搜索引擎的帮助,在搜…

OpenHarmony的未来和如何做好一个开源社区

今天要分享的文章,可能更多只是作为一种观点。主要包括2个内容。OpenHarmony的未来和如何做好一个开源社区,好的,接下来开始今天的内容。 你对OpenHarmony的未来如何看待? OpenHarmony的未来看起来非常光明,因为它具…

把 ChatGPT 加入 Flutter 开发,会有怎样的体验?

前言 ChatGPT 最近一直都处于技术圈的讨论焦点。它除了可作为普通用户的日常 AI 助手,还可以帮助开发者加速开发进度。声网社区的一位开发者"小猿"就基于 ChatGPT 做了一场实验。仅 40 分钟就实现了一个互动直播 Demo。他是怎么做的呢?他将整个…

如何管理好仓库/库房?

仓库管理是企业管理中不可缺少的一部分,事关企业能否正常运行的关键之一,古人有云:“三军未动粮草先行”,一个企业仓库管理做不好,他的生产管理肯定也是做不好的,不是说生产管理人员的管理能力不具备&#…

跨设备文件传输工具横评

文章目录对比QQ微信SnapDropLocalSendIntelUnisonLANDropTailscaleAirDroidSendAnywhere参考文献对比 传输速度测试条件大致相同,文件大小约为 100 MB 工具优点缺点传输速度备注QQ支持断点续传不要求同一局域网需要安装1.81 MB/s微信方便需要安装不支持大文件传完还…