C++OpenCV(5):图像模糊操作(四种滤波方法)

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛
🔆 OpenCV项目地址及源代码:点击这里


文章目录

  • 图像模糊操作
    • 均值滤波
    • 高斯滤波
    • 中值滤波
    • 双边滤波

图像模糊操作

关于图片的噪声:指的是图片中存在的不必要或者多余的干扰数据

SmoothBlur是图像处理中最简单和常用的操作之一。

经过这两种操作我们便可以实现消除噪声的作用。

SmoothBlur操作原理是数学的卷积运算,根据不同卷积运算公式,划分了多种图像滤波方式图像滤波:指的是在尽量保留图像特征的条件下对目标图像得噪声进行抑制。

均值滤波

在这里插入图片描述
在这里插入图片描述

均值滤波指的是取周围像素计算出来的平均值然后赋给目标像素。然后依次对每一个像素值进行如上的操作。

均值滤波可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能。

blur可以实现均值滤波。

void blur( InputArray src, OutputArray dst,Size ksize, Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT );
/*******************************************************************
*			src: 					输入图像
*			dst:					输出图像
*			ksize:					内核大小 如上我们的大小是(3,3)
*			anchor:				 	 锚点
*						默认Point(-1,-1):锚点在核中心
*			borderType:				 外部像素边界模式(一般不管)	   
*********************************************************************/
//均值模糊void testBlur() {cv::blur(mt, saves["blur"], cv::Size(KERNEL, KERNEL));}


高斯滤波

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。

高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

一阶与二阶高斯分布,其中二阶高斯分布是一个是一个三维正态分布的图像:

在这里插入图片描述

在这里插入图片描述

可以观察到正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。

使用二阶高斯分布来消除噪声,模拟计算操作,其中 x x x y y y 指的是图像的坐标,由于 σ \sigma σ 未知,并且其他都是已知的,我们便可以计算出每一个点对应的二阶高斯值。

  1. 取一个 σ \sigma σ 值,对于每一个位置计算出对应的二阶高斯值。
  2. 计算出权重总和 s u m sum sum,由于权重之和必须等于1,因此每个点再除以 s u m sum sum ,就可以得到最终的权值矩阵(右三)
  3. 对于每一个位置的像素值(右二)乘以对应的权值就可以得到高斯模糊后的值(右一)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


高斯模糊函数:GaussianBlur

void GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, double sigmaY = 0,int borderType = BORDER_DEFAULT );
/*******************************************************************
*			src: 					输入图像
*			dst:					输出图像
*			ksize:					内核大小
*					x,y必须是整数,并且为奇数
*			sigmaX:				 	 X方向滤波系数
*			sigmaY:				     Y方向滤波系数
*			borderType:				 外部像素边界模式(一般不管)	   
*********************************************************************/

案例代码:

//高斯模糊void testGaussianBlur() {cv::GaussianBlur(mt, saves["GaussianBlur"], cv::Size(KERNEL, KERNEL), 3, 3);}

在这里插入图片描述

可以观察到高斯模糊的效果比均值模糊的效果好。


中值滤波

中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。

g = median ⁡ [ ( x − 1 , y − 1 ) + f ( x , y − 1 ) + f ( x + 1 , y − 1 ) + f ( x − 1 , y ) + f ( x , y ) + f ( x + 1 , y ) + f ( x − 1 , y + 1 ) + f ( x , y + 1 ) + f ( x + 1 , y + 1 ) ] g=\operatorname{median}[(x-1, y-1)+f(x, y-1)+f(x+1, y-1)+f(x-1, y)+f(x, y)+f(x+1, y)+f(x-1, y+1)+f(x, y+1)+f(x+1, y+1)] g=median[(x1,y1)+f(x,y1)+f(x+1,y1)+f(x1,y)+f(x,y)+f(x+1,y)+f(x1,y+1)+f(x,y+1)+f(x+1,y+1)]

对对椒盐噪声有很好的抑制作用.

它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)

API:medianBlur

void medianBlur( InputArray src, OutputArray dst, int ksize );
/*******************************************************************
*			src: 					输入图像
*			dst:					输出图像
*			ksize:					内核大小
*				      大小必须是大于1而且必须是奇数
*********************************************************************/
//中值模糊
void testMedianBlur() {cv::medianBlur(mt, saves["median"], KERNEL);
}

在这里插入图片描述


双边滤波

上面三种降噪方法容易模糊图片的边缘细节,对于高频细节的保护效果并不明显

双边滤波可以很好的边缘保护,即可以在去噪的同时,保护图像的边缘特性。

w ( i , j , k , l ) = exp ⁡ ( − ( i − k ) 2 + ( j − l ) 2 2 σ d 2 − ∥ f ( i , j ) − f ( k , l ) ∥ 2 2 σ r 2 ) w(i, j, k, l)=\exp \left(-\frac{(i-k)^{2}+(j-l)^{2}}{2 \sigma_{d}^{2}}-\frac{\|f(i, j)-f(k, l)\|^{2}}{2 \sigma_{r}^{2}}\right) w(i,j,k,l)=exp(2σd2(ik)2+(jl)22σr2f(i,j)f(k,l)2)

函数API:bilateralFilter

void bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, double sigmaSpace,int borderType = BORDER_DEFAULT );
/*******************************************************************
*			src: 					输入图像
*			dst:					输出图像
*			d:						滤波过程中每个像素邻域的直径
*			sigmaColor:				 颜色空间滤波器的标准差值
*					参数越大表明该像素领域内有越多的颜色被混合到一起
*			sigmaSpace:				 空间间坐标中滤波器的标准差值
*			borderType:				 外部像素边界模式(一般不管)	   
*********************************************************************/
void testBilateralFilter() {cv::bilateralFilter(mt, saves["bilateral"], KERNEL, KERNEL, KERNEL);}

在这里插入图片描述


参考:

bilateral filter双边滤波器的通俗理解_AI吃大瓜的博客-CSDN博客

均值滤波

高斯滤波_百度百科

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

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

相关文章

windows下搭建php开发环境

http://wed.xjx100.cn/news/139397.html?actiononClick https://www.bilibili.com/read/cv23429835/ https://www.php.cn/faq/498307.html 安装iis 选择卸载程序 安装php 官网https://www.php.net/下载 选择线程安全 国内地址 下载完成后解压放到想存放的路径 添加p…

数据可视化 - 动态柱状图

基础柱状图 通过Bar构建基础柱状图 from pyecharts.charts import Bar from pyecharts.options import LabelOpts # 使用Bar构建基础柱状图 bar Bar() # 添加X轴 bar.add_xaxis(["中国", "美国", "英国"]) # 添加Y轴 # 设置数值标签在右侧 b…

深入浅出之Docker Compose详解

目录 1.Docker Compose概述 1.1 Docker Compose 定义 1.2 Docker Compose产生背景 1.3 Docker Compose 核心概念 1.4 Docker Compose 使用步骤 1.5 Docker Compose 常用命令 2. Docker Compose 实战 2.1 Docker Compose下载和卸载 2.2 Docker Compose 项目概述 2.3 Do…

北航投资已投企业四象科技成功发射三颗卫星

1箭4星!2023年7月23日10时50分,我国在太原卫星发射中心使用长征二号丁运载火箭,成功将四象科技“矿大南湖号”SAR遥感卫星、“虹口复兴号”光学遥感卫星、“中电农创号”热红外遥感卫星以及银河航天灵犀03星共4颗卫星发射升空,卫星…

idea springBoot 部署多个项目打开Run Dashboard 窗口

在部署springcloud 项目的时候 本地调试,有可能需要全部启动所有服务,单个部署比较麻烦,通过Run DashBoard 窗口可以完美实现 1.先打开项目的文件地址找到workspace.xml文件,在项目下的.idea\workspace.xml 2. ctrlf 找到RunDash…

SpringMVC-mybatis,SQL语句中误用了desc关键字,导致报错。

17-Jul-2023 21:26:22.295 淇℃伅 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializers detected on classpath 17-Jul-2023 21:26:22.621 淇℃伅 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalin…

小白的机器学习之路(四)神经网络的初步认识:基于pytorch搭建自己的神经网络

小白的机器学习之路(四) 引子神经网络的基本结构反向传播算法和激活函数优化器如何通过pytorch搭建自己的BP network 引子 当前交通大数据业务的需要,需要承担一部分算法工作(数据处理),考虑到上次研究深度…

springboot开放实验室管理系统【纯干货分享,免费领源码03361】

摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是使用动态网页开发技术java作为系统的开发语言,M…

【Leetcode】二叉树进阶面试题

文章目录 二叉树创建字符串二叉树分层遍历(从前开始)二叉树分层遍历(从后开始)二叉树的最近公共祖先二叉搜索树与双向链表从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树二叉树的前序遍历(非递归&…

GitLab 删除项目

1.点击头像 2.点击Profile 3.选择要删除的项目点进去 4.settings-general-Advances-expand 5.然后在弹出框中输入你要删除的项目名称即可

Java - 注解开发

注解开发定义bean Component的衍生注解 Service: 服务层的注解 Repository: 数据层的注解 Controller: 控制层的注解 纯注解开发 bean管理 bean作用范围 在类上面添加Scope(“singleton”) // prototype: 非单例 bean生命周期 PostCon…

关于Spring的bean的相关注解以及其简单使用方法

一、前置工作 第一步&#xff1a;创建一个maven项目 第二步&#xff1a;在resource中创建一个名字叫做spring-config.xml的文件&#xff0c;并把以下代码复制粘贴 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.sprin…

redis-cluster 创建及监控

集群命令 cluster info&#xff1a;打印集群的信息。 cluster nodes&#xff1a;列出集群当前已知的所有节点&#xff08;node&#xff09;的相关信息。 cluster meet <ip> <port>&#xff1a;将ip和port所指定的节点添加到集群当中。 cluster addslots <slot…

《Federated Unlearning via Active Forgetting》论文精读

文章目录 1、概述2、方法实验主要贡献框架概述 3、实验结果比较方法实验结果忘却完整性忘却效率模型实用性 4、总结 原文链接&#xff1a; Federated Unlearning via Active Forgetting 1、概述 对机器学习模型隐私的⽇益关注催化了对机器学习的探索&#xff0c;即消除训练数…

基于JAVA SpringBoot和Vue高考志愿填报辅助系统

随着信息技术在管理中的应用日益深入和广泛&#xff0c;管理信息系统的实施技术也越来越成熟&#xff0c;管理信息系统是一门不断发展的新学科&#xff0c;任何一个机构要想生存和发展&#xff0c;要想有机、高效地组织内部活动&#xff0c;就必须根据自身的特点进行管理信息时…

学习笔记|大模型优质Prompt开发与应用课(二)|第二节:超高产文本生成机,传媒营销人必备神器

文章目录 01 文字写作技能的革新&#xff0c;各行各业新机遇四大类常见文字工作新闻记者的一天新闻记者的一天–写策划prompt 新闻记者的一天–排采访prompt生成结果prompt生成结果 大模型加持&#xff0c;文字写作我们如何提效营销创作营销创作-使用预置法为不同平台生成文案p…

Aspose.cell excel转pdf日期格式不正确yyyy/MM/dd变成MM/dd/yyyy

最近使用Aspose.cell将excel转pdf过程中excel中时间格式列的显示和excel表里的值显示不一样。 excel里日期格式 yyyy/MM/dd pdf里日期格式MM/dd/yyyy 主要原因&#xff1a;linux和windows里内置的时间格式不一致&#xff0c;当代码部署到linux服务器的时候转换格式就会发生不一…

Nginx 高可用负载均衡(三种模式)

一、nginx普通集群负载均衡 1、安装keepalived (1)下载 https://www.keepalived.org/download.html(2)解压 tar -zxvf keepalived-2.0.18.tar.gz(3)使用configure命令配置安装目录与核心配置文件所在位置&#xff1a; ./configure --prefix/usr/local/keepalived --sysconf/e…

Python解码张三的法外狂徒之旅,揭秘视频背后的真相!【含jS逆向解密】

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 传说中&#xff0c;有人因为只是远远的看了一眼法外狂徒张三就进去了&#x1f602; 我现在是获取他视频&#xff0c;岂不是直接终生了&#x1f929; 网友&#xff1a;赶紧跑路吧 &#x1f60f; 好了话不多说&#xff…

【Android】底层逻辑深入了解(学习笔记)(未完)

step by step. 目录 init启动 Zygote进程&#xff1a; SystemServer处理过程 Binder&#xff1a; Launcher启动过程 Android系统启动流程 四大组件 Activity Service BroadcastReceiver广播 ContentProvider内容提供者&#xff08;进程内和进程间的数据共享&#xff…