【图像处理OpenCV(C++版)】——5.2 图像平滑之高斯平滑

news2024/10/1 12:10:22

前言

😊😊😊欢迎来到本博客😊😊😊

🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。

😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–>搜索你要查询的算子名称或相关知识点,或者通过这篇博客👉通俗易懂OpenCV(C++版)详细教程——OpenCV函数快速查找(不断更新中)]查阅你想知道的知识,即可食用。

🎁🎁🎁支持:如果觉得博主的文章还不错或者您用得到的话,可以悄悄关注一下博主哈,如果三连收藏支持就更好啦!这就是给予我最大的支持!😙😙😙


文章目录

    • 学习目标
    • 一、高斯卷积核的构建及分离性
      • 1.1 相关概念
      • 1.2 高斯卷积算子是可分离卷积核
    • 二、C++实现
    • 三、 总结

学习目标

  • 了解高斯平滑含义
  • 熟悉高斯卷积核的构建及分离
  • C++实现高斯平滑案例

  每一张图像都可能包含某种程度的噪声,噪声可以理解为由一种或者多种原因造成的灰度值的随机变化。
  在大多数情况下,通过平滑技术(也常称为滤波技术)进行抑制或者去除,其中具备保持边缘(Edge Preserving)作用的平滑技术得到了更多的关注。
  常用的平滑处理算法包括基于二维离散卷积高斯平滑、均值平滑,基于统计学方法的中值平滑,具备保持边缘作用的平滑算法的双边滤波、导向滤波等。

  下面将详细介绍高斯平滑技术原理、常见应用及实现。


一、高斯卷积核的构建及分离性

  介绍基于二维离散卷积的平滑算法之前,本节先详细介绍一下二维离散卷积的定义及其性质

1.1 相关概念

  假设构造宽(列数)为W、高(行数)为H的高斯卷积算子gaussKernelH×WWH均为奇数,锚点(中心点)位置为:[(H-1)/2,(w-1)/2],则:
    (1) 计算高斯矩阵

其中:
r(rows)、c(cols)代表位置索引,其中0≤c≤W-1,0≤r≤H-1,且r,c均为整数。

    (2) 计算高斯矩阵的和

    (3) 高斯矩阵除以其本身的和,即归一化,得到的便是高斯卷积算子

1.2 高斯卷积算子是可分离卷积核

  在计算高斯矩阵过程中:

  高斯卷积核可分离成一维水平方向上的高斯核和一维垂直方向上的高斯核,或者反过来,即:

  基于这种分离性,OpenCV给出了构建一维垂直方向上的高斯卷积核的函数

Mat cv::getGaussianKernel(int ksize,
						double 	sigma,
						int ktype = CV_64F )	
参数解释
ksize一维垂直方向上高斯核的行数,必须为正奇数
sigma标准差,若不设置,即sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8
ktype返回值的数据类型,CV_32F或者为CV_64F,默认CV_64F

  返回值就是一个ksize×1的垂直方向上的高斯核,而对于一维水平方向上的高斯核,只需对垂直方向上的高斯核进行转置即可。


二、C++实现

  因为高斯卷积核是可分离的,所以可以通过定义可分离卷积函数sepConv2D_Y_X (此处用sepFilter2D代替)来实现图像的高斯平滑:

cv::Mat gaussBlur(const Mat &image,Size winsize,float sigma,int ddepth=CV_64F,Point anchor=Point(-1,-1),int boderType=BORDER_DEFAULT) {
	//卷积核的宽高须为正基数
	CV_Assert(winsize.width % 2 ==1 && winsize.height % 2 == 1);
	
	//构建垂直方向上的高斯核
	Mat gK_y = getGaussianKernel(winsize.height,sigma,CV_64F);
	
	//构建水平方向上的高斯核
	Mat gK_x = getGaussianKernel(winsize.width, sigma, CV_64F);
	
	//转置
	gK_x = gK_x.t();

	//分离高斯卷积
	Mat BlurImage;
	Mat gK_y = getGaussianKernel(winsize.height,sigma,CV_64F);
	//sepConv2D_Y_X
	sepFilter2D(image,BlurImage, ddepth, gK_y, gK_x, Point(-1, -1));
	
	return BlurImage;

}

  OpenCV提供了高斯平滑函数:


void cv::GaussianBlur(InputArray src,
	OutputArray dst,
	Size ksize,
	double sigmaX,
	double sigmaY = 0,
	int borderType = BORDER_DEFAULT 
)	
参数解释
src输入矩阵,支持数据类型为:CV_8U, CV_16U, CV_16S, CV_32F or CV_64F
dst输出矩阵,大小与数据类型同src一致
ksize高斯核大小,宽高均为正奇数,宽高可不相同
sigmaX一维水平方向上高斯核的标准差
sigmaY一维垂直方向上高斯核的标准差。若sigmaY为0,则将它设置为等于 sigmaX(即:sigmaY=sigmaX);如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来(计算方式可以查阅上面getGaussianKernel()建议指定所有参数值
borderType边界扩充方式,默认BORDER_DEFAULT

注:边界扩充说明

  从参数的设置可以看出,GaussianBlur()也是通过分离的高斯卷积核实现的,也可以令水平方向和垂直方向上的标准差不相同但是一般会取相同的标准差
  当平滑窗口比较小时,对标准差的变化不是很敏感,得到的高斯平滑效果差别不大;相反,当平滑窗口较大时,对标准差的变化很敏感,得到的高斯平滑效果差别较大。


三、 总结

  最后,长话短说,大家看完就好好动手实践一下,切记不能三分钟热度、三天打鱼,两天晒网。OpenCV是学习图像处理理论知识比较好的一个途径,大家也可以自己尝试写写博客,来记录大家平时学习的进度,可以和网上众多学者一起交流、探讨,有什么问题希望大家可以积极评论交流,我也会及时更新,来督促自己学习进度。希望大家觉得不错的可以点赞、关注、收藏。


🚶🚶🚶 今天的文章就到这里啦~
喜欢的话,点赞👍、收藏⭐️、关注💟哦 ~

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

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

相关文章

RabbitMQ常见的应用问题

文章目录 1.消息可靠性保障2.消息的幂等性保障 1.消息可靠性保障 在实际生产环境中,可能会由于网络问题导致消息接收异常产生某种影响,基于这种情况我们需要保障消息的可靠性。 RabbitMQ中的消息可靠性也称为消息补偿,如下图所示&#xff0…

浅析 Jetty 中的线程优化思路

作者:vivo 互联网服务器团队- Wang Ke 本文介绍了 Jetty 中 ManagedSelector 和 ExecutionStrategy 的设计实现,通过与原生 select 调用的对比揭示了 Jetty 的线程优化思路。Jetty 设计了一个自适应的线程执行策略(EatWhatYouKill&#xff09…

Origin如何绘制带拟合曲线的频数分布图?

文章目录 0.引言1.准备数据2.频数分布参数设置并绘图3.拟合曲线参数设置并绘图 0.引言 笔者研究的方向关于点云数据采集和建模算法,在对一个平面进行数据采集并建模后,需要实验结果进行精度分析,为了知道建模结果的点云集中于平面的程度&…

专场来袭,深度解读阿里云视频云的全智能进化

云智深度融合,视频云将幻化出怎样的新光景? 01 「云智新生」_ 视频云的全智能进化 新数智时代,云和AI在走向深度融合,以云计算为基石、以AI为引擎的云智深度融合,俨然成为行业共识。以“云智”为支撑,视频云…

基于JavaWeb的土特产销售购物商城的设计与实现

1.引言 随着互联网技术的不断发展,电子商务已成为一种重要的经济活动形式。土特产作为传统文化的代表之一,在旅游业中具有非常重要的地位。因此,将土特产销售与电子商务相结合,建立一个基于JavaWeb的土特产销售购物商城&#xff…

java进阶—代码演示多线程的生命周期

前言 回顾一下 到现在,我们已经知道了 线程的三种创建方式及其选择线程的常用方法线程的安全问题以及线程的死锁线程之间的通信(等待唤醒) 今天,我们一起来看看线程的生命周期,生命周期这个词在后续的javaweb 相关知…

【论文系列解读】LLM构建通用视觉(SUR-Adapter)声音模型(Tango)

通用视觉&音频模型的思考 0. 视觉(Diff)怎么和多模态结合(0) 总结(1) 关键技术(1-1) LangChain(1-2) **Versatile Diffusion**(1-3) Tango(1-4) SUR-adapter 1. SUR-Adapter(0) 总结(1) 摘要(2) 相关工作(2-1) 文图生成 & LLM(2-2) 语义理解和推理数据集(2-2-1) 数据收…

【案例教程】环境多介质逸度模型实践技术与典型案例【代码】应用

【原文链接】:【案例教程】环境多介质逸度模型实践技术与典型案例【代码】应用https://mp.weixin.qq.com/s/i8BpApcz1p4Ua6bytxhGwA 内容简要:【注:提供以下模型所有教程】 专题一:基本理论 1.逸度的定义 2.逸度模型的基本原理…

蓝牙音箱中应用的国产蓝牙芯片

蓝牙音箱指的是内置蓝牙芯片,以蓝牙连接取代传统线材连接的音响设备,通过与手机平板电脑和笔记本等蓝牙播放设备连接,达到方便快捷的目的。蓝牙音箱以便携音箱为主,外形一般较为小巧便携,蓝牙音箱技术也凭借其方便人的…

AI绘画中的负面词 是如何正确使用以及发挥作用

Stable Diffusion的艺术或图像生成,有些参数是必不可少的,其中之一就是负提示。本次将深入解析稳定扩散中的负提示是什么,如何使用这个参数来生成高质量的图像。 文章目录 negative prompt如何正确使用?正面词控制通过负面词控制 …

IP地址、MAC地址、互联网、WLAN、运营商、子网掩码、网络地址、网段、网关、集线器、光纤、基站

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

从2PC和容错共识算法讨论zookeeper中的Create请求 | 京东云技术团队

最近在读《数据密集型应用系统设计》,其中谈到了zookeeper对容错共识算法的应用。这让我想到之前参考的zookeeper学习资料中,误将容错共识算法写成了2PC(两阶段提交协议),所以准备以此文对共识算法和2PC做梳理和区分&a…

近日网上传出消息,ARM正与Intel共同开发制造芯片

近日网上传出消息,ARM正与Intel共同开发制造芯片,让芯片设计者能够基于Intel 18A制程打造低功耗的SoC。另有多位业内人士透露,这次制造的芯片将主要用于移动设备、笔记本电脑、数据中心等。 若这一消息属实,会对中国芯片行业带来…

常见的SQL优化方案

1. insert优化 1.1 批量插入 我们之前插入数据都是一条一条插入的,会导致频繁操作数据库,从而影响性能。比如遍历某个集合,然后逐个使用insert语句插入数据库表中 INSERT INTO table (name, age) VALUES (张三, 18); INSERT INTO table (na…

6-js基础-3

JavaScript 基础 - 3 知道什么是数组及其应用的场景,掌握数组声明及访问的语法,具备利用数组渲染柱形图表的能力 今日重点: 循环嵌套数组综合案例 今日单词: 循环嵌套 利用循环的知识来对比一个简单的天文知识,我们…

arcpy制作脚本工具相关(制作并添加脚本工具、脚本工具消息提示、arcpy工具自动获取数据)

前言 采用arcpy制作arcgis的脚本工具,记录如下。 一、脚本工具的制作 制作脚本工具分为两步: 1、先编写对应功能的python脚步 2、将对应功能的脚本修改为,能自己手动选择输入输出数据的脚本 3、将修改完的脚本添加到工具箱 1、编写代码 我…

618种草观察丨益生菌「蓝」在一起,酸奶「地域控」?

2023年的“618”,食饮行业中,种草战线格外热闹,品牌花式“开屏”,吸引消费者。 数说故事发布「SMI社媒心智品牌榜」,本期持续关注健康食品,也新增了今夏网红酸奶行业,一起看看这两大赛道中&…

使用power rail连接secondary pg pin的方法

过往文章: secondary pg pin的作用与连接 之前写到过secondary pg pin的种类与几种连接方式,其中使用最多的方法是NDR rule + route_group的方式,这样工作量少,不容易出错,但也有弊端,那就是一…

ctfshow web入门 内网渗透篇

web859 首先ssh连接上之后传个fscan上去,扫描下内网靶机 发现.5和.6的比较可疑。 一个存在web服务,一个存在445端口。 先看下445端口,靶机给我们提供了msf,所以直接用msf打下Samba msfconsole use exploit/linux/samba/is_kno…

数字贸易下转口贸易企业如何高效管理?

什么是转口贸易?是指企业在国内购买进口货物,经过加工、组装、包装等方式改变其性质,再出口到海外市场的贸易活动。这种贸易方式对于促进国际贸易和提高企业竞争力都有着非常重要的作用,但同时也存在着一些风险和难点,…