《opencv实用探索·八》图像模糊之均值滤波、高斯滤波的简单理解

news2025/1/1 8:39:39

1、前言
什么是噪声?
该像素与周围像素的差别非常大,导致从视觉上就能看出该像素无法与周围像素组成可识别的图像信息,降低了整个图像的质量。这种“格格不入”的像素就被称为图像的噪声。如果图像中的噪声都是随机的纯黑像素或者纯白像素,这样的噪声也被称为“椒盐噪声”或“盐噪声”。

在图像处理中,为了提升图像的整体质量,通常我们需要对图像进行模糊处理,即通过卷积运算对每个像素进行滤波或平滑,减少图像的细节,使得图像噪声削弱,凸显特征明显的区域。图像的卷积运算上一章已介绍,这里不再赘述。

2、均值滤波
把卷积核覆盖在原图上上依次滑过每个像素,计算卷积核覆盖像素值的加权平均并赋值给被核中心覆盖的那个像素值。比如下图原图像是一个5x5图像,现在有个3x3卷积核,放在图像最开始的位置,计算卷积核覆盖的像素值的加权平均:
注意:均值滤波卷积核上的每个权重默认为1
卷积核:
在这里插入图片描述
原图像:
在这里插入图片描述
加权平均计算:

(10+20+15+50+100+35+20+5+50)* 1 / (1+1+1+1+1+1+1+1+1) = 33

核中心像素值,即原图像第二行第二列会被重新赋值为33
下图阴影区域为核中心滑过的区域:
在这里插入图片描述
可以看到原图像5x5,在经过卷积运算后图像变为了3x3,如果想让核中心扫过图像边缘像素,保持图像大小不变,可以在原图像基础上拓展一层边缘,如下图:
在这里插入图片描述

opencv提供了均值滤波接口如下:

void cv::blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT)

src:原图
dst:滤波后图像
ksize:卷积核大小,注意卷积核只能是奇数,这样才有核中心,建议使用3x3,5x5和7x7,卷积核越大图像越模糊,卷积时间越长
anchor :表示锚点(anchor)的位置,即被平滑的那个点。默认值Point(-1,-1)表示锚点位于核的中心。
borderType: 边框模式用于推断图像外部的像素(一般默认)

我们现在用5x5卷积核对下列图像做均值滤波,可以看到右边图像已模糊处理:
在这里插入图片描述
由于均值模糊是对窗口中所有像素点求平均值,在图像的边缘或者纹理丰富的地方也会变得模糊。为了尽可能的保留图像中的边缘信息,可以给不同位置的像素点赋以不同的权值。距离中心点越近的像素,权值越大,而远离中心点的像素,权值也逐渐减少,这时候可以采用高斯滤波。

3、高斯滤波

在高斯滤波中卷积核的权重由高斯分布(正态分布)的取值来确定。
我们首先来介绍下高斯函数。

一维高斯函数:
从下图中可以看到高斯分布(正态分布)是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。我们给卷积核分配权重的时候,以曲线中心点为原点分配给核中心,核其他位置的权重按高斯曲线上递减趋势分配。
高斯函数中的参数σ表征着高斯滤波器宽度(决定着平滑程度),当σ越大,高斯滤波器的频带就越宽,平滑程度就越高(越接近均值滤波).通过调节平滑程度参数σ,可调整图像的平滑程度。
在这里插入图片描述
在这里插入图片描述
概率密度函数也为高斯函数。因为该函数只有一个变量x,所以我们也称该函数为一维高斯函数。
在这里插入图片描述
再回到一维高斯函数图中,图中X轴的数值表示标准差的大小,比如0.5表示0.5个标准差大小,对应的高斯曲线上面的数值为0.5sigma,在0-0.5sigma区间内占比为19.1%。当我们取-3sigma-3sigma区间,占比达到99.8%,默认该段分布包含了所有情况。

二维高斯函数:
因为图像是二维空间,涉及XY两个方向,这时候用一维高斯函数进行处理显然不太合适,这时引入二维高斯函数是一个很好的解决方案。
在这里插入图片描述

引入二维高斯函数进行模糊处理:

假设一个高斯函数的卷积和模板是5*5,那么他这25个点的x,y具体取值为:
在这里插入图片描述
此时只需要假定一个sigma值,即可确定一个高斯核,比如:
在这里插入图片描述

但是这个高斯核不完整,因为他求出的5*5的卷积核进行卷积操作时,改变了图像原始的0-255的范围。为解决该问题只需要将卷积核归一化即可,即需要保证权重之和等于1,也就是卷积核中每一个值除以卷积的总和。
具体的高斯核例如:
实际应用:
有个3x3高斯核,内部坐标如下:
在这里插入图片描述
为了计算权重矩阵,需要设定标准差σ的值。假定σ=1.5,带入二阶高斯函数计算结果如下:
在这里插入图片描述
这9个点的权重总和等于0.479,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.479,得到最终的权重矩阵。
在这里插入图片描述
现在有了高斯核,可以进行图像模糊计算,假设现有9个像素点,灰度值(0-255)如下:
在这里插入图片描述
将高斯核覆盖在图像上,覆盖的每个像素点乘以对应的权重再除以权重之和即可得到高斯核中心覆盖的原图像像素最新的值

(1.326*14 + 1.775*15 + 1.516*16 + 2.84*24 + 3.694*25 + 3.076*26 + 3.221*34 + 4.141*35 + 3.41*36) / 1 = 3.694

如果图像很大,将高斯核依次在图像上的每个像素点滑动,计算核中心的像素值,最后就得到了高斯模糊后的图像。如果是彩色图像可对RGB三通道分别进行高斯模糊计算。

opencv高斯模糊函数调用:

void GaussianBlur(
InputArray src,
OutputArray dst,
Size ksize,
double sigmaX,
double sigmaY = 0,
int borderType = BORDER_DEFAULT
);

src:原图像
dst:高斯滤波后的图像
ksize:滤波核的大小,宽、高必须是奇数,例如(3,3)、(5,5)等。
sigmaX:卷积核水平方向的标准差σ
sigmaY:卷积核垂直方向的标准差σ。修改 sigmaX 或 sigmaY 的值都可以改变卷积核中的权重比例。如果不知道如何设计这两个参数值,就直接把这两个参数的值写成0,方法就会根据滤波核的大小自动计算出合适的权重比例。
boderType:可选参数,边界样式,建议使用默认值。
这里需要注意的是在二维高斯函数中标准差σ只有一种,没有σ1和σ2,如果我们设置sigmaX等于sigmaY,这样拿到的是一个圆形高斯核完全和二维高斯函数生成的一样,如果sigmaX不等于sigmaY我们拿到的是一个椭圆形高斯核,即在X和Y方向调用了分别调用二维高斯函数计算高斯核,因为标准差σ不一样。
在这里插入图片描述
sigmaX和sigmaY该怎么取值?
如果 sigmaX 和 sigmaY 都设置为相同的值,那么高斯核将是一个圆形的,产生各向同性的模糊。这通常在需要保持图像各向同性的情况下使用,比如去除噪声或者平滑图像。
如果 sigmaX 和 sigmaY 设置为不同的值,高斯核将呈椭圆形状,产生各向异性的模糊。这可以在需要在图像的不同方向上应用不同程度的模糊时使用。
具体的 sigmaX 和 sigmaY 的值可以根据图像的特性来选择。如果图像中有较大的细节结构,可能需要较小的标准差来保留这些细节。相反,如果图像中的结构比较平坦,可以使用较大的标准差进行更强烈的模糊。

高斯滤波后的图像如下:
在这里插入图片描述

参考文章:【图像处理】高斯模糊、高斯函数、高斯核、高斯卷积操作

在这里插入图片描述

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

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

相关文章

批量免费AI写作工具,批量免费AI写作软件

人工智能(AI)的应用在各个领域不断创新。面对繁重的写作任务,我们应该怎么完成?本文将专心分享批量免费AI写作的方法、工具以及选择时需要注意的事项。 批量免费AI写作的方法 利用开源AI模型 一种常见的批量免费AI写作方法是利用开源的AI模…

Unity中动态合批

文章目录 前言一、动态合批的规则1、材质相同是合批的前提,但是如果是材质实例的话,则一样无法合批。2、支持不同网格的合批3、动态合批需要网格支持的顶点条件二、我们导入一个模型并且制作一个Shader,来测试动态合批1、我们选择模型的 Mesh…

企业级SQL开发:如何审核发布到生产环境的SQL性能

自从上世纪 70 年代数据库开始普及以来,DBA 们就不停地遭遇各种各样的数据库管理难题,其中最为显著的,可能就是日常的开发任务中,研发人员们对于核心库进行变更带来的一系列风险。由于针对数据库的数据变更是一项非常常见的任务&a…

老师如何管理课堂纪律?

1 .与学生建立良好的师生关系,加强沟通。建立互相尊重的关系,让学生感受到老师的理解和关心 2. 制定合理的课堂规则和纪律,让学生了解规则的重要性和必要性,并遵守规则。 3. 在课堂上保持秩序,避免嘈杂的行为和讨论。…

MAMBA介绍:一种新的可能超过Transformer的AI架构

有人说,“理解了人类的语言,就理解了世界”。一直以来,人工智能领域的学者和工程师们都试图让机器学习人类的语言和说话方式,但进展始终不大。因为人类的语言太复杂,太多样,而组成它背后的机制,…

如何使用Python核对文件夹内的文件

说明:日常工作中,我们经常会遇到这样的场景:核对A、B文件夹中文件的差异,找出A、B文件夹中不同部分的文件; 本文介绍如何使用Python来实现; 第一步:获取文件清单 首先,我们要获取…

Go 语言中的反射机制

欢迎大家到我的博客浏览&#xff0c;更好的阅读体验请点击 反射 | YinKais Blog 反射在大多数的应用和服务中并不常见&#xff0c;但是很多框架都依赖 Go 语言的反射机制简化代码。<!--more-->因为 Go 语言的语法元素很少、设计简单&#xff0c;所以它没有特别强的表达能…

基于c++版本数组队列改-Python数组队列的总结

##队列部分-猫猫排队 是一种遵循先入先出规则的线性数据结构。 是一种模拟排队现象&#xff0c;新来的人不断加入到队列尾部&#xff0c;而位于队列头部的人不断离开。 ##抽象数据类型队列的定义 队列是一种先进先出的线性表&#xff0c;它只允许在表的一端进行插入&#xf…

Word使用相关——(待完善)

1.word 怎样删除分节符 2.word 怎样删除目录中的分节符 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我…

Linux上使用独立显卡Tesla T4(测试视频压缩)

背景 将视频处理程序单独部署至K8S之外&#xff0c;使用独立GPU显卡的一台服务器上。 需事先对GPU性能做简单测试。 已通过zabbix对Linux进行了系统资源监控。 已通过PrometheusGrafana对显卡Tesla T4做了性能监控。 逐步补充&#xff0c;稍等 2023年12月6日 操作 查看当前…

【GPU】linux 安装、卸载 nvidia 显卡驱动、cuda 的官方文档、推荐方式(runfile)

文章目录 1. 显卡驱动1.1. 各版本下载地址1.2. 各版本文档地址1.3. 安装、卸载方式 2. CUDA2.1. 各版本下载地址2.2. 各版本文档地址2.3. 安装、卸载方式2.4. 多版本 CUDA 切换方式 1. 显卡驱动 1.1. 各版本下载地址 https://www.nvidia.com/Download/Find.aspx?langzh-cn 1…

【zip密码】如何删除zip压缩包的密码?

大家都知道压缩包可以进行加密&#xff0c;但是当我们不需要加密压缩包的时候&#xff0c;该如何删除zip压缩包密码呢&#xff1f;那么zip压缩包密码取消都有什么方法呢&#xff1f;今天将方法总结分享给大家。 最原始的方法&#xff0c;就是通过解压文件&#xff0c;将解压出…

class038 经典递归解析【算法】

class038 经典递归解析 算法讲解038【必备】常见经典递归过程解析 code1 字符串的全部子序列 // 字符串的全部子序列 // 子序列本身是可以有重复的&#xff0c;只是这个题目要求去重 // 测试链接 : https://www.nowcoder.com/practice/92e6247998294f2c933906fdedbc6e6a pac…

c++搭建http服务器

HTTP请求协议格式如下&#xff1a; HTTP响应协议格式如下&#xff1a; #include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <string>#pragma comment(lib, "ws2_32.lib")//std::string generateResponse(const st…

华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

固定Microsoft Edge浏览器的位置设置,避免自动回调至中国

问题描述 在使用Copilot等功能时&#xff0c;需要将Microsoft Edge浏览器的位置设置为国外。但每次重新打开浏览器后&#xff0c;位置设置又自动回调至中国&#xff0c;导致每次均需要手动调整。 原因分析 这个问题的出现是因为每次启动Microsoft Edge时&#xff0c;默认打开…

【开源】基于Vue+SpringBoot的网上药店系统

项目编号&#xff1a; S 062 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S062&#xff0c;文末获取源码。} 项目编号&#xff1a;S062&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药…

6 大 Android 照片恢复软件深度评测

当您发现令人难忘的照片在 Android 上被错误删除或丢失时&#xff0c;您可能会感到非常沮丧。然而&#xff0c;当您尝试安装一些恢复应用程序并希望将它们重新恢复时&#xff0c;其中许多应用程序无法再次检测到丢失的照片。 为了节省您逐一尝试此类应用程序的时间&#xff0c…

【华为OD题库-076】执行时长/GPU算力-Java

题目 为了充分发挥GPU算力&#xff0c;需要尽可能多的将任务交给GPU执行&#xff0c;现在有一个任务数组&#xff0c;数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。 假设GPU最多一次执行n个任务&#xff0c;一次执行耗时1秒&#xff0c;在保证GPU不空闲情况下&…

对标Gen-2!Meta发布新模型进军文生视频赛道

随着扩散模型的飞速发展&#xff0c;诞生了Midjourney、DALLE 3、Stable Difusion等一大批出色的文生图模型。但在文生视频领域却进步缓慢&#xff0c;因为文生视频多数采用逐帧生成的方式,这类自回归方法运算效率低下、成本高。 即便使用先生成关键帧,再生成中间帧新方法。如…