opencv c++ 图像噪声及去噪

news2024/11/27 0:23:39

1、噪声类型及生成

1.1、类型

高斯噪声椒盐噪声、泊松噪声、乘性噪声,等。

具体解释参考:(31条消息) 图像噪声简介_yeler082的博客-CSDN博客_图像噪声

高斯噪声                                                        泊松噪声

乘性噪声                                                       椒盐噪声

 

 原图

1.2、来源

图像获取过程中

两种常用类型的图像传感器CCD和CMOS采集图像过程中,由于受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声,如电阻引起的热噪声、场效应管的沟道热噪声、光子噪声、暗电流噪声、光响应非均匀性噪声。

图像信号传输过程中

由于传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。另外,在图像处理的某些环节当输入的对象并不如预想时也会在结果图像中引入噪声。

生成椒盐噪声:

void QuickDemo::noise_img(Mat& image)
{
	Mat img;
	image.copyTo(img);
	//产生椒盐噪声
	RNG rng(12345);
	int h = img.rows;//行数
	int w = img.cols;//列数

	int nums = 10000;//噪点个数定义
	
	//通过循环随机在图像上任意点生加上黑白噪声(生成概率相同)
	for (auto i = 0; i < nums; ++i) {
		//图像随机点坐标生成
		int x = rng.uniform(0, w);
		int y = rng.uniform(0, h);
		if (i % 2 == 1) {
			img.at<Vec3b>(y, x) = Vec3b(255, 255, 255);
		}
		else
			img.at<Vec3b>(y, x) = Vec3b(0, 0, 0);

	}
	namedWindow("椒盐噪声", WINDOW_FREERATIO);
	imshow("椒盐噪声", img);

}

生成高斯噪声:

利用现有API

randn(inputMat, 与输入图像相同维度的均值,与输入图像相同维度的方差);

inputMat——在生成噪声图像时的输入矩阵为与原始图像大小类型均相同空矩阵

void QuickDemo::noise_img(Mat& image)
{
	//产生高斯噪声
	Mat noise = Mat::zeros(image.size(), image.type());
	randn(noise, (25, 25, 25), (30, 30, 30));//生成噪声图像
	Mat dst;
	add(noise, image, dst);
	namedWindow("高斯噪声", WINDOW_FREERATIO);
	imshow("高斯噪声", dst);
}

参考:(31条消息) 图像噪声简介_yeler082的博客-CSDN博客_图像噪声

2、去除噪声

2.1、中值滤波

将异常像素点取其周围一层或多层像素点,进行排列,将排列后的中值取代异常像素点值

常用于去除椒盐噪声(因为椒盐噪声是在图像上均匀随机产生的极限像素点值),但当异常点占原图大部分时就会无效果。

opencvAPI

mediaBlur(input ,output , kernelSize);

kernelSize——卷积核大小,int型;

代码:

    Mat dst;
	medianBlur(img, dst, 5);
	namedWindow("中值滤波", WINDOW_FREERATIO);
	imshow("中值滤波", dst);

2.2、高斯滤波

顾名思义,对高斯噪声效果较好

	GaussianBlur(dst2, dst, Size(5, 5), 0);
	namedWindow("高斯滤波", WINDOW_FREERATIO);
	imshow("高斯滤波", dst);

 2.3、边缘保留滤波(EPF)

a)高斯双边滤波

 

 API

d——双边模糊近邻选用像素点半径,和sigmaSpace一起控制卷积核大小,如果为0,则只由sigmaSpace制卷积核大小。

 sigmaColor——双边模糊颜色阈值,像素值大于该值的像素点将被处理。

sigmaSpace——双边模糊空间阈值,控制卷积核大小。

bilateralFilter(img, dst, 0, 100, 10);

b)非局部均值滤波

对像素点进行处理时,对周围像素点赋予权值,像素值相近的周边点赋予较高权值,像素值差距大的赋予较低权值。

 API

 官网OpenCV: Denoising

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

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

相关文章

AWS SAP-C02 考试指南

Hello大家好&#xff0c;欢迎来到AWS解决方案架构师professional中文视频培训课程&#xff0c;我是讲师沉默恶魔。 本课时的内容是SAP-C02考试指南&#xff0c;我将介绍有关SAP-C02考试的详细信息。 SAP-C02是解决方案架构师专业级认证的最新版本的考试&#xff0c;目前也只能…

空域图像增强-图像滤波处理

3.图像滤波处理。自选一张图片&#xff0c;完成以下图像处理&#xff1a;①给图像分别添加随机噪声和椒盐噪声&#xff1b;②采用不同的平滑滤波模板进行滤波对比&#xff08;不同模板、不同尺寸&#xff09;&#xff1b;③采用中值滤波对图像进行滤波对比&#xff1b;④对添加…

GEE开发之Modis_NPP数据分析和获取

GEE开发之Modis_NPP数据分析和获取1.NPP2.MOD系列和MYD系列区别3.MOD17A3H_v006(500m/1年)4.MOD17A3HGF_v006(500m/1年)5.MOD17A3HGF_v061(500m/1年)6.MYD17A3H_v006(500m/1年)6.1 MYD17A3H下的指数6.2 遥感影像查看7.MYD17A3HGF_v061(500m/1年)8.MYD17A3HGF_v006(500m/1年)9.N…

行业应用之无限可能,就在亚马逊云科技re:Invent

在2022亚马逊云科技re:Invent全球大会Adam Selipsky“如何借助云的力量&#xff0c;在未知领域抓住机遇并茁壮成长”的主题演讲中&#xff0c;除了阐述主要的产品升级以外&#xff0c;亚马逊云科技还致力于打造面向特定行业或者特定应用场景的解决方案&#xff0c;以帮助客户快…

【Mongoose应用和文件上传】一.Express框架访问MongDB数据库;二.node实现文件上传

目录 一.Express框架访问MongDB数据库 1.目的&#xff1a; &#xff08;1&#xff09;mongoose模块的使用 &#xff08;2&#xff09;学会代码的封装&#xff1a;dao层、service层、接口层 &#xff08;3&#xff09;MVC设计思想&#xff1a;M&#xff08;Model&#xff0…

5.RabbitMQ高级特性

5.RabbitMQ高级特性 为什么不是RabbitMQ的事务&#xff1f; 这是从官网直接翻译过来的&#xff1a;网络可能以不太明显的方式出现故障&#xff0c;而且检测某些故障需要时间。因此&#xff0c;向套接字编写协议帧或一组帧(例如发布的消息)的客户端不能假定消息已经到达服务器…

【库存控制】基于蜜蜂算法优化库存控制附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

如何将dwg文件转成kml文件

第一步&#xff1a; 在CAD中将DWG另存为 DXF&#xff0c;如下&#xff1a; 注意&#xff1a;&#xff08;中文乱码&#xff09;为了打开的中文不出现乱码&#xff0c;保存DXF文件请选择如下的选项 第二步&#xff1a; 下载安装Bigemap GIS Office download.bigemap.com/bmset…

12.01 M4-UART-IT实验

1.使用CORTEX-M4核&#xff0c;实验中断实验和串口实验结合--->上传到CSDN 按键触发时&#xff0c;LED灯状态取反&#xff0c;并且在串口工具打印一句话 KEY1按键按下&#xff0c;LED1状态取反&#xff0c;串口工具打印key1 down!!!! 主要代码gpio.c void HAL_GPI…

C++ 语言学习 day14 复习 (6)

1.stack / queue(栈&#xff0c;队列) stack 构造函数 stack<int> v; 入栈 v.push(i); 出栈 v.pop(); 是否为空 v.empty() queue 构造函数 queue<int> v; 入队 v.push(i); 出队 v.…

下载axios时出现很多npm ERR错误:npm ERR! code ERESOLVEnpm ERR! ERESOLVE could not resolve

出现的下载错误&#xff1a; npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolvenpm ERR! npm ERR! while resolving: vue/eslint-config-standard6.1.0npm ERR! Found: eslint-plugin-vue8.7.1 npm ERR! node_modules/eslint-plugin-vue npm ERR!dev eslint-plugin-…

毕业设计案例:Python实现疫苗接种数据库管理系统

一、序言 那一年过年前&#xff0c;疫情开始爆发&#xff0c;对全国人民的生活和工作造成了严重的影响。但凭借着国家强盛的实力&#xff0c;新冠疫苗也很快的被技术人员研发出来&#xff0c;人们通过接种新冠疫苗来抵御新冠病毒的危害。本次通过接种新冠疫苗的这个数据统计&a…

(一)正则表达式——基础概念

&#xff08;一&#xff09;正则表达式——基础概念 概括 用来处理字符串的规则。除了对象、函数&#xff0c;我们操作得最多的就是字符串 正则的两大作用&#xff1a; 验证是否匹配把匹配到的内容捕获到量词元字符*特殊元字符点. &#xff1a;除了\r \n以外的字符 普通元字符h…

【OpenCV 例程 300篇】247. 特征检测之最大稳定极值区域(MSER)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】247. 特征检测之最大稳定极值区域&#xff08;MSER&#xff09; 1. 最大稳定极值区域&#xff08;MSER&#xff09; 最大稳定极值区域&#xff08;MSER-Maximally Stable Extremal Regions&#xf…

RNN/LSTM (三) 学习torchtext源码

文章目录包装dataset构建词库1.列举数据源2. 遍历数据3. 列举特殊符号4. 构建词库 Field::vocab_clsload_vectors构建读指针 data.BucketIterator在上一文&#xff0c;我们学习了基于torchtext编写lstm模型的实践案例&#xff0c;本文将结合上文案例&#xff0c;深入案例代码&a…

Python自动化之Excel利器openpyxl

文章目录前言一、Workbook1.1 读取xlsx文件1.2 保存二、Sheet2.1 创建Sheet2.2 遍历Sheet2.3 移动Sheet2.4 删除Sheet2.5 插入、删除行列三、单元格3.1 获取某个单元格3.2 遍历单元格3.3 获取范围单元格3.4 单元格赋值3.5 合并/解除合并单元格3.6 单元格数据格式3.7 单元格数字…

[附源码]Python计算机毕业设计Django儿童早教课程管理系统论文2022

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

算法设计与分析 SCAU19180 集合划分问题

19180 集合划分问题 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC;JAVA Description 教材课后习题2-8 n个元素的集合{1,2,…,n}可以划分若干个非空子集。例如&#xff0c;当n4时&#xff0c;集合{1,2,3,4}可以划分为15个不同的非…

微信小程序开发学习文档(万字总结,一篇搞定前端开发)

一、微信小程序简介 与网页开发不同&#xff0c;小程序有自己的一套标准开发模式&#xff1a;-申请小程序开发账号-安装小程序开发工具-创建和配置小程序项目 1.1 创建第一个小程序 1.2 主界面的5个组成部分 1.3小程序项目的基本构成 pages 用来存放所有小程序的页面&#xf…

Java并发编程—Thread类中的start()方法如何启动一个线程【原理分析】?

一、java线程的介绍&#xff1a; 在java的开发过程中&#xff0c;很多铁子对于java线程肯定不感到陌生&#xff0c;作为java里面重要的组成部分&#xff0c;这里就从如何创建一个线程给大家进行分析&#xff1b; 二、相关知识引入&#xff1a; ​ 之前我了解过&#xff0c;j…