opencv 30 -图像平滑处理01-均值滤波 cv2.blur()

什么是图像平滑处理?

图像平滑处理(Image
Smoothing)是一种图像处理技术,旨在减少图像中的噪声、去除细节并平滑图像的过渡部分。这种处理常用于预处理图像,以便在后续图像处理任务中获得更好的结果。

常用的图像平滑处理方法包括:

均值滤波(Mean Filtering):用图像中像素周围区域的平均值来代替每个像素的值,从而平滑图像。均值滤波对去除高斯噪声等简单噪声类型效果较好。

高斯滤波(Gaussian Filtering):使用高斯核来对图像进行滤波,高斯滤波在平滑图像的同时能够较好地保留图像的边缘信息。

中值滤波(Median Filtering):用像素周围区域像素值的中值来代替每个像素的值,适用于去除椒盐噪声等脉冲型噪声。

双边滤波(Bilateral Filtering):结合空间域和灰度值域的信息,能够保持图像的边缘特征,同时对图像进行平滑处理。

图像平滑处理应用场景

图像平滑处理在图像处理中有广泛的应用场景,主要用于去除图像中的噪声、减少细节、平滑图像的过渡部分,从而提升后续图像处理任务的效果。

以下是图像平滑处理的一些常见应用场景:

去噪声:图像中可能存在不同类型的噪声,如高斯噪声、椒盐噪声等。使用图像平滑处理方法可以有效地减少这些噪声,提高图像质量。

在尽量保留图像原有信息的情况下,过滤掉图像内部的噪声,这一过程称为对图像的平滑
处理,所得的图像称为平滑图像。例如,下图是含有噪声的图像,在图像内存在噪声信息,
我们通常会通过图像平滑处理等方式去除这些噪声信息。

在图这里插入图片描述
通过图像平滑处理,可以有效地过滤掉图像内的噪声信息。再看下面得图 所示是对上面图 进行图像平滑处理的结果,可以看到原有图像内含有的噪声信息被有效地过滤掉了。

在这里插入图片描述

图像降噪:在低光条件下或者高ISO值下拍摄的图像可能会有较多的噪点。通过图像平滑处理,可以降低噪点的影响,使图像看起来更加干净和清晰。

图像模糊:在某些情况下,我们可能希望减少图像中的细节,使图像变得模糊,以达到某种特定的效果。图像平滑处理可以实现这个目标。

图像缩放:当对图像进行缩放操作时,可能会引入锯齿效应或马赛克现象。通过图像平滑处理,可以减少这些不平滑的现象,得到更平滑的缩放图像。

边缘检测:在进行边缘检测等图像处理任务时,图像平滑处理可以帮助去除细节,使边缘更加清晰和明显。

目标检测和识别:在某些情况下,图像中的细节和噪声可能会干扰目标检测和识别算法。通过图像平滑处理,可以消除这些干扰,提高目标检测和识别的准确性。

总的来说,图像平滑处理是图像预处理的重要步骤,它能够改善图像质量、减少噪声和细节,为后续图像处理任务提供更好的输入。不过需要注意,过度的平滑处理可能会导致图像失真和信息丢失,因此在应用图像平滑处理时需要权衡处理效果和影响。

均值滤波

定义:

均值滤波是指用当前像素点周围 N·N 个像素值的均值来代替当前像素值。使用该方法遍历处理图像内的每一个像素点,即可完成整幅图像的均值滤波。

例如,希望对图 下图 中位于第 5 行第 5 列的像素点进行均值滤波。

图2
在进行均值滤波时,首先要考虑需要对周围多少个像素点取平均值。通常情况下,我们会
以当前像素点为中心,对行数和列数相等的一块区域内的所有像素点的像素值求平均。例如,
在上图 中,可以以当前 226 像素点为中心,对周围 3×3 区域内所有像素点的像素值求平均,也可以对周围 5×5 区域内所有像素点的像素值求平均。

当前像素点的位置为第 5 行第 5 列,我们对其周围 5×5 区域内的像素值求平均,计算方法为:

新值=[(197+25+106+156+159)+
(149+40+107+5+71)+
(163+198+226+223+156)+
(222+37+68+193+157)+
(42+72+250+41+75)]/25
=126

计算完成后得到 126,我们将 126 作为当前像素点均值滤波后的像素值。我们针对上图 中的每一个像素点计算其周围 5×5 区域内的像素值均值,并将其作为当前像素点的新值,即可
得到当前图像的均值滤波结果。

当然,图像的边界点并不存在 5×5 邻域区域。例如,左上角第 1 行第 1 列上的像素点,其像素值为 23,如果以其为中心点取周围 5×5 邻域,则 5×5 邻域中的部分区域位于图像外部。
图像外部是没有像素点和像素值的,显然是无法计算该点的 5×5 邻域均值的。
针对边缘像素点,可以只取图像内存在的周围邻域点的像素值均值。

如图 7-8 所示,计算
左上角的均值滤波结果时,仅取图中灰色背景的 3×3 邻域内的像素值的平均值。

在这里插入图片描述

在图 7-8 中,对于左上角(第 1 行第 1 列)的像素点,我们取第 1~3 列与第 1~3 行交汇处
所包含的 3×3 邻域内的像素点的像素值均值。因此,当前像素点的均值滤波计算方法为:

新值=[(23+158+140)+
(238+0+67)+
(199+197+25)]/9
=116

计算完成后得到 116,将该值作为该点的滤波结果即可

除此以外,还可以扩展当前图像的周围像素点。例如,将当前 9×7 大小的图像扩展为 13×11大小的图像,如图 7-9 所示。

在这里插入图片描述
完成图像边缘扩展后,可以在新增的行列内填充不同的像素值。在此基础上,再针对 9×7的原始图像计算其 5×5 邻域内像素点的像素值均值。OpenCV 提供了多种边界处理方式,我们可以根据实际需要选用不同的边界处理模式。

针对图像中第 5 行第 5 列的像素点,其运算过程相当于与一个内部值都是 1/25 的 5×5 矩阵进行相乘计算,从而得到均值滤波的结果 126,其对应的关系如图 7-10 所示

在这里插入图片描述

根据上述运算,针对每一个像素点,都是与一个内部值均为 1/25 的 5×5 矩阵相乘,得到均值滤波的计算结果,如图 7-11 所示。

在这里插入图片描述

将使用的 5×5 矩阵一般化,可以得到如图 7-12 所示的结果。

在这里插入图片描述
OpenCV 中,图 7-12 右侧的矩阵被称为卷积核,其一般形式为:
在这里插入图片描述
式中,M 和 N 分别对应高度和宽度。一般情况下,M 和 N 是相等的,例如比较常用的 3×3、5×5、
7×7 等。如果 M 和 N 的值越大,参与运算的像素点数量就越多,图像失真越严重。

函数语法

OpenCV 中,实现均值滤波的函数是 cv2.blur(),其语法格式为:

dst = cv2.blur( src, ksize, anchor, borderType )

式中:

 dst 是返回值,表示进行均值滤波后得到的处理结果。

 src 是需要处理的图像,即原始图像。它可以有任意数量的通道,并能对各个通道独立处理。图像深度应该是 CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F 中的一种。

 ksize 是滤波核的大小。滤波核大小是指在均值处理过程中,其邻域图像的高度和宽度。

例如,其值可以为(5, 5),表示以 5×5 大小的邻域均值作为图像均值滤波处理的结果,
如下式所示。

在这里插入图片描述
anchor 是锚点,其默认值是(-1, -1),表示当前计算均值的点位于核的中心点位置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。
 borderType 是边界样式,该值决定了以何种方式处理边界,其值如表 7-1 所示。一般情
况下不需要考虑该值的取值,直接采用默认值即可。

在这里插入图片描述
通常情况下,使用均值滤波函数时,对于锚点 anchor 和边界样式 borderType,直接采用其
默认值即可。因此,函数 cv2.blur()的一般形式为:

dst = cv2.blur( src, ksize,)

实验: 读取一幅噪声图像,使用函数 cv2.blur()对图像进行均值滤波处理,得到去噪图像,并显示原始图像和去噪图像

实验原图

在这里插入图片描述

import cv2
o=cv2.imread("lenaNoise.png") #读取待处理图像
#使用 blur 函数处理图像
r=cv2.blur(o,(5,5)) 
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

运行上述程序后,会分别显示噪声图像(左图)和去噪图像(右图)

在这里插入图片描述

实验2:针对噪声图像,使用不同大小的卷积核对其进行均值滤波,并显示均值滤波的情况。

调整设置函数 cv2.blur()中的 ksize 参数,示例代码如下

代码如下:

import cv2
o=cv2.imread("lenaNoise.png") #读取待处理图像
#使用 blur 函数处理图像
r3=cv2.blur(o,(3,3))
r5=cv2.blur(o,(5,5))
r7=cv2.blur(o,(7,7))
cv2.imshow("original",o)
cv2.imshow("result3",r3)
cv2.imshow("result5",r5)
cv2.imshow("result7",r7)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
从结果图中可以看出,卷积核越来,图片会越模糊.

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

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

相关文章

C++ 左值和右值

C 左值和右值 左值、右值左值引用、右值引用std::move()std::move()的实现引用折叠 完美转发forward()的实现函数返回值是左值还是右值如何判断一个值是左值还是右值 左值、右值 在C11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C11中…

OpenShot 发布 2.3.2 版本啦!

导读OpenShot 2.3.3 发布了,Openshot 是 linux 的 Gnome 桌面一个非线性视频编辑器,有许多功能:你可以重划大小,修剪或者剪切视频,同时有实时的预览,图片覆盖,标题模板,视频解码&…

Exploring the Underlying Architecture of CSS3

引言 在现代的网页设计中,CSS(层叠样式表)起着至关重要的作用。CSS3作为最新的CSS标准,引入了许多令人兴奋的功能和特性。但是,要真正理解CSS3的底层架构实现原理,对于前端开发者来说,是非常重…

web前端框架Javascript之JavaScript 异步编程史

早期的 Web 应用中,与后台进行交互时,需要进行 form 表单的提交,然后在页面刷新后给用户反馈结果。在页面刷新过程中,后台会重新返回一段 HTML 代码,这段 HTML 中的大部分内容与之前页面基本相同,这势必造成…

PHP 前后端分离,运行配置

H5 WEB目录:安装 yarn install、npm install (依赖包) 在电脑:安装nodejs Composer下载 :https://getcomposer.org/

python 计算图片hash 缓存图片为key

python,有时希望缓存图片作为key,怎么办?缓存整张突破占用内存太多,不妨缓存hash值: Fast way to Hash Numpy objects for Caching import hashlib import numpy a numpy.random.rand(10, 100) b a.view(numpy.uin…

性能测试,python 内存分析工具 -memray

Memray是一个由彭博社开发的、开源内存剖析器;开源一个多月,已经收获了超8.4k的star,是名副其实的明星项目。今天我们就给大家来推荐这款python内存分析神器。 ​ Memray可以跟踪python代码、本机扩展模块和python解释器本身中内存分配&#…

考完软考,有什么备考心得和学习经验可以分享吗?

我考过信息系统项目管理师,可以给你一些备考建议。这是软考高级资格考试的一门科目,考试包括三个部分。如果你觉得难度较大,可以先从系统集成考试开始,积累经验再去考高级科目。考试内容包括信息系统项目管理综合知识、信息系统项…

A TupleBackedMap cannot be modified Mybatis分页,使用List<Map>接参,无法修改map的解决方案

问题描述 当使用Mybatis 进行Page分页&#xff0c;再使用Page< map >作为接受参数。此时尝试修改map则会报错。 报错为 java.lang.UnsupportedOperationException: A TupleBackedMap cannot be modified解决方案 使用新的数组&#xff0c;使用反射&#xff0c;构建工具…

C语言中char、short、int、long各占多少字节

1byte 8bit 一个字节占8个二进制位 windows操作系统&#xff0c;32位机中&#xff0c; char&#xff1a; 1个字节 short&#xff1a; 2个字节 int&#xff1a; 4个字节 long&#xff1a; 4个字节 以下是windows操作系统&#xff0c;32位机下的代码测试结果&#xff08;3…

深入理解机器学习与极大似然之间的联系

似然函数&#xff1a;事件A的发生含着有许多其它事件的发生。所以我就把这些其它事件发生的联合概率来作为事件A的概率&#xff0c;也就是似然函数。数据类型的不同&#xff08;离散型和连续性&#xff09;就有不同的似然函数 极大似然极大似然估计方法&#xff08;Maximum Li…

iOS技术之 手机系统15.0之后 的 UITableView section header多22像素问题

iOS 15 的 UITableView又新增了一个新属性&#xff1a;sectionHeaderTopPadding 会给每一个section header 增加一个默认高度&#xff0c;当我们 使用 UITableViewStylePlain 初始化 UITableView的时候&#xff0c;就会发现&#xff0c;系统给section header增高了22像素。 解…

MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比

阿丹&#xff1a; 前面了解了mongodb的一些基本概念。本节文章对安装mongodb进行讲解以及汇总。 官网教程如下&#xff1a; 安装 MongoDB - MongoDB-CN-Manual 版本特性 下面是各个版本的选择请在安装以及选择版本的时候参考一下&#xff1a; MongoDB 2.x 版本&#xff1a…

深入学习 Redis - 基于 Jedis 通过 Java 客户端操作 Redis

目录 一、Jedis 依赖 二、Java 客户端操控 redis 2.1、准备工作&#xff08;ssh 隧道&#xff09; 2.2、概要 2.2、string 2.3、hash 2.4、list 2.5、set 2.5、zset 一、Jedis 依赖 自己去 中央仓库 上面找. 二、Java 客户端操控 redis 2.1、准备工作&#xff08;ssh 隧…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验二 LED闪烁

目录 前言 一、原理图及知识点介绍 二、代码分析 知识点四&#xff1a;delay(u16 i)这个函数为什么i1时&#xff0c;大约延时10us&#xff1f; 前言 已经是第二个实验了&#xff0c;上一个实验是点亮第一个LED灯&#xff0c;这个实验是LED的闪烁。 一、原理图及知识点介绍…

由红黑树到map/set

文章目录 一.map/set 的封装思路1.封装思路2.红黑树节点调整3.map 和 set 的定义4.仿函数 KeyOfValue5.map/set 的插入 二.map/set 迭代器实现1.迭代器的定义2.解引用运算符重载3.成员访问运算符重载4.(不)等于运算符重载5.begin() 与 end()6. 运算符重载7.-- 运算符重载8.[ ]下…

ELK常用语法和线上问题排查

ELK常用语法及线上问题排查 速查问题 1.全文搜索 在搜索栏输入目标值&#xff0c;查询所有字段中包含该值的文档 案例&#xff1a;用户反馈了一串id或者其他同事给了一个jobid&#xff0c;还没有头绪怎么查的时候&#xff0c;直接全局搜索 jobid 2.字段 限定字段全文搜索…

CSS学习记录(基础笔记)

CSS简介: CSS 指的是层叠样式表* (Cascading Style Sheets)&#xff0c;主要用于设置HTML页面的文字内容&#xff08;字体、大小、对齐方式&#xff09;&#xff0c;图片的外形&#xff08;边框&#xff09; CSS 描述了如何在屏幕、纸张或其他媒体上显示 HTML 元素 CSS 节省…

接口抓包,Fiddler抓包使用方法总结,入门到精通辅助实战...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 工作原理 Fiddle…

Docker网络模式详解

目录 Docker网络模式 一、Host模式 二、container模式 三、none模式 四、bridge模式 五、Overlay模式 Docker网络模式 安装Docker时会自动创建3个网络&#xff0c;可以使用docker network ls命令列出这些网络。 [rootdocker ~]# docker network ls 我们在使用docker run…