【Emgu CV教程】6.1、图像平滑之添加雪花噪声

文章目录

  • 前言
  • 一、什么样的图像需要平滑?
  • 二、平滑的办法有哪些
  • 三、制作需要平滑的图片
    • 1.制作微小斑点的噪声
    • 2.制作稍大一点的噪声
  • 总结


前言

首先说三点:

  1. 图像平滑,一般就是指对图像进行模糊或去噪,平滑后的图像减少了噪声,也会减少图像细节纹理。
  2. 本单元讲的都是空间域滤波,也就是通过目标像素点的周围(邻域)的像素值,根据一定的数学运算,替换原有像素值。还有一种是频率域滤波---------------傅里叶滤波,这个后面单独再讲。
  3. 图像平滑很重要,特别是在图像计算的预处理阶段,读者们要好好体会。

一、什么样的图像需要平滑?

比如下面这张 lena.jpg,上面分布了很多白色像素点,在进行图像分割、轮廓查找等高级操作之前,就需要把这些白色点去掉。
在这里插入图片描述

二、平滑的办法有哪些

  • 最大值滤波
  • 最小值滤波
  • 均值滤波
  • 方框滤波
  • 高斯滤波
  • 中值滤波
  • 保边滤波等等…

三、制作需要平滑的图片

在讲如何平滑之前,咱们先讲讲如何给一张清晰的照片添加噪声。有了噪声,后面才好进行平滑处理。这一篇文章也算是一个实际的小案例应用。比如我们有这么一张清晰的照片:
在这里插入图片描述

1.制作微小斑点的噪声

微小斑点的噪声也就是椒盐噪声,其中椒噪声可以理解为黑点点,盐噪声可以理解为白点点。执行以下代码,为图片添加噪声:

int width = srcMat.Cols;
int height = srcMat.Rows;
int blueValue = Convert.ToInt16(TextBoxBlue.Text.Trim().ToString());
int greenValue = Convert.ToInt16(TextBoxGreen.Text.Trim().ToString());
int redValue = Convert.ToInt16(TextBoxRed.Text.Trim().ToString());
int noiseNum = Convert.ToInt32(TextBoxNum.Text.Trim().ToString());
Random rand = new Random();
Mat tempMat = srcMat.Clone();
Image<Bgr, int> dstImage = tempMat.ToImage<Bgr, int>();
int i;
int j;
for (int k = 0; k < noiseNum; k++)
{i = rand.Next(0, height);j = rand.Next(0, width);dstImage.Data[i, j, 0] = blueValue;dstImage.Data[i, j, 1] = greenValue;dstImage.Data[i, j, 2] = redValue;
}Mat dstMat = dstImage.Mat;
dstMat.ConvertTo(dstMat, DepthType.Cv8U);
CvInvoke.Imshow("Add noise,point, " + dstMat.Size.ToString(), dstMat);

参数说明:

  • width:原始图像宽度
  • height:原始图像高度度
  • blueValue:噪声点蓝色通道值,这里为0
  • greenValue:噪声点绿色通道值,这里为0
  • redValue:噪声点红色通道值,这里为0
  • noiseNum:噪声点数量,这里为4000

输出结果如下图所示:
在这里插入图片描述

仔细看输出结果,是不是清晰的图片上多了很多黑色的点点,这个就是椒噪声。

2.制作稍大一点的噪声

前面的噪声是一个像素值,如果想要制造更大的噪声呢,看下面的代码:

Mat dstMat = srcMat.Clone();
int width = srcMat.Cols;
int height = srcMat.Rows;
int blueValue = Convert.ToInt16(TextBoxBlue.Text.Trim().ToString());
int greenValue = Convert.ToInt16(TextBoxGreen.Text.Trim().ToString());
int redValue = Convert.ToInt16(TextBoxRed.Text.Trim().ToString());
int noiseNum = Convert.ToInt32(TextBoxNum.Text.Trim().ToString());
Random rand = new Random();int i;
int j;
for (int k = 0; k < noiseNum; k++)
{i = rand.Next(0, height);j = rand.Next(0, width);CvInvoke.Circle(dstMat, new System.Drawing.Point(j, i), 3, new MCvScalar(blueValue, greenValue, redValue), -1, LineType.EightConnected, 0); // thickness = -1,代表实心圆
}CvInvoke.Imshow("Add noise,circle, " + dstMat.Size.ToString(), dstMat);

参数说明:

  • width:原始图像宽度
  • height:原始图像高度度
  • blueValue:噪声点蓝色通道值,这里为255
  • greenValue:噪声点绿色通道值,这里为255
  • redValue:噪声点红色通道值,这里为255
  • noiseNum:噪声点数量,这里为4000
    这段程序为原始图像添加了4000个白色的圆,圆半径为3像素,输出结果如下图所示:
    在这里插入图片描述

总结

提示:不论是黑色椒噪声,还是白色盐噪声,都是越小越好处理,越大的噪声,处理完图像丢失的细节就越多。下一篇开始详细举例子。

原创不易,请勿抄袭。共同进步,相互学习。

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

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

相关文章

​ElasticSearch

目录 简介 基本概念 倒排索引 FST 简介 ES是一个基于lucene构建的&#xff0c;分布式的&#xff0c;RESTful的开源全文搜索引擎。支持对各种类型的数据的索引&#xff1b;搜索速度快&#xff0c;可以提供实时的搜索服务&#xff1b;便于水平扩展&#xff0c;每秒可以处理 …

【深度学习:Collaborative filtering 协同过滤】深入了解协同过滤:技术、应用与示例

此图显示了使用协作筛选预测用户评分的示例。起初&#xff0c;人们会对不同的项目&#xff08;如视频、图像、游戏&#xff09;进行评分。之后&#xff0c;系统将对用户对项目进行评分的预测&#xff0c;而用户尚未评分。这些预测基于其他用户的现有评级&#xff0c;这些用户与…

npm install运行报错npm ERR! gyp ERR! not ok问题解决

执行npm install的时候报错&#xff1a; npm ERR! path D:..\node_modules\\**node-sass** npm ERR! command failed ...npm ERR! gyp ERR! node -v v20.11.0 npm ERR! gyp ERR! node-gyp -v v3.8.0 npm ERR! gyp ERR! not ok根据报错信息&#xff0c;看出时node-sass运行出现…

Thinkphp框架,最新ICP备案查询系统源码,附搭建教程

源码介绍 最新ICP备案查询系统源码 附教程 thinkphp框架 本系统支持网址备案&#xff0c;小程序备案&#xff0c;APP备案查询&#xff0c;快应用备案查询 优势&#xff1a; 响应速度快&#xff0c;没有延迟&#xff0c;没有缓存&#xff0c;数据与官方同步

基于SpringBoot Vue美食网站系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

【趣味游戏-08】20240123点兵点将点到谁就是谁(列表倒置reverse)

背景需求&#xff1a; 上个月&#xff0c;看到大4班一个孩子在玩“点兵点将点到谁就是谁”的小游戏&#xff0c;他在桌上摆放两排奥特曼卡片&#xff0c;然后点着数“点兵点将点到谁就是谁”&#xff0c;第10次点击的卡片&#xff0c;拿起来与同伴的卡片进行交换。他是从第一排…

【新书推荐】2.3节 二进制的简写和转换

本节内容&#xff1a;二进制 ■电子计算机为何采用二进制&#xff1a;电子计算机电路只有低电平和高电平两种状态&#xff0c;分别表示二进制数0和1。 ■二进制的简写形式&#xff1a;计算机内的数据都使用二进制数。但是二进制书写不便&#xff0c;通常我们采用十六进制作为二…

网络协议与攻击模拟_06攻击模拟SYN Flood

一、SYN Flood原理 在TCP三次握手过程中&#xff0c; 客户端发送一个SYN包给服务器服务端接收到SYN包后&#xff0c;会回复SYNACK包给客户端&#xff0c;然后等待客户端回复ACK包。但此时客户端并不会回复ACK包&#xff0c;所以服务端就只能一直等待直到超时。服务端超时后会…

React16源码: React中的completeUnitOfWork的源码实现

completeUnitOfWork 1 &#xff09;概述 各种不同类型组件的一个更新过程对应的是在执行 performUnitOfWork 里面的 beginWork 阶段它是去向下遍历一棵 fiber 树的一侧的子节点&#xff0c;然后遍历到叶子节点为止&#xff0c;以及 return 自己 child 的这种方式在 performUni…

PN532测试工具

PN532测试工具&#xff0c;可以读写卡&#xff0c;修改数据&#xff0c;格式化清卡 读写UID卡&#xff0c;CUID卡&#xff0c;锁UFUID卡 如下图&#xff0c;软件简单易用 可以对UID卡、CUID卡&#xff0c;FUID卡、UFUID卡读卡号&#xff0c;修改卡号 操作简单易用 软件下载地址…

Django开发_17_表单类

一、介绍 为了简化前端form表单代码 二、步骤 &#xff08;一&#xff09;创建form.py 创建一个表单类 from django import formsclass RegisterForm(forms.Form):reg_name forms.CharField(max_length10, label用户名)reg_pwd forms.CharField(max_length20, label密码…

System.Data.SqlClient.SqlException:“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误

目录 背景: 过程: SQL Express的认识: 背景: 正在运行程序的时候&#xff0c;我遇到一个错误提示&#xff0c;错误信息如下&#xff0c;当我将错误信息仔细阅读了一番&#xff0c;信息提示的很明显&#xff0c;错误出现的来源就是连接数据库代码这块string connStr "s…

供应链安全项目in-toto开源框架详解

引言&#xff1a;in-toto 是一个开源框架&#xff0c;能够以密码学的方式验证构件生产路径上的每个组件和步骤。它可与主流的构建工具、部署工具进行集成。in-toto已经被CNCF技术监督委员会 (Technical Oversight Committee&#xff0c;TOC)接纳为CNCF孵化项目。 1. 背景 由于…

Elasticsearch:使用 Gemini、Langchain 和 Elasticsearch 进行问答

本教程演示如何使用 Gemini API创建 embeddings 并将其存储在 Elasticsearch 中。 我们将学习如何将 Gemini 连接到 Elasticsearch 中存储的私有数据&#xff0c;并使用 Langchian 构建问答功能。 准备 Elasticsearch 及 Kibana 如果你还没有安装好自己的 Elasticsearch 及 Ki…

章鱼网络 Community Call #17|打造全新 Omnity 跨链协议

香港时间2024年1月8日12点&#xff0c;章鱼网络举行第17期 Community Call。 对于 Octopus Community 而言&#xff0c;2023年是一个分水岭。我们如期兑现我们的承诺&#xff0c;成功上线了包括 $NEAR Restaking 和 Adaptive IBC 在内的完整的 Octopus 2.0。 自从我们在2023年…

x-cmd pkg | perl - 具有强大的文本处理能力的通用脚本语言

目录 介绍首次用户技术特点竞品进一步阅读 介绍 Perl 是一种动态弱类型编程语言。Perl 内部集成了正则表达式的功能&#xff0c;以及巨大的第三方代码库 CPAN;在处理文本领域,是最有竞争力的一门编程语言之一 生态系统&#xff1a;综合 Perl 档案网络 (CPAN) 提供了超过 25,0…

Tree-Shaking 作用和实现原理

一、什么是Tree-shaking Tree-shaking 它的名字来源于通过摇晃&#xff08;shake&#xff09;JavaScript代码的抽象语法树&#xff08;AST&#xff09;&#xff0c;是一种用于优化JavaScript代码的技术&#xff0c;主要用于移除未被使用的代码&#xff0c;使得最终生成的代码包…

IPoE技术汇总

在国内并没有遇到这么多的IPoE&#xff08;IP over Ethernet&#xff09;技术&#xff0c;可能也是因为我来日本多年了&#xff0c;没有接触国内的IPv4 over IPv6的技术&#xff0c;感觉国内IPv4地址紧张&#xff0c;用的传统NAT和PPPoE非常多&#xff0c;大多数设备还是建立在…

记一次Flink通过Kafka写入MySQL的过程

一、前言 总体思路&#xff1a;source -->transform -->sink ,即从source获取相应的数据来源&#xff0c;然后进行数据转换&#xff0c;将数据从比较乱的格式&#xff0c;转换成我们需要的格式&#xff0c;转换处理后&#xff0c;然后进行sink功能&#xff0c;也就是将数…

Linux|centos7操作系统|rtl8188gu芯片的网卡驱动使用DKMS安装管理

前言&#xff1a; DKMS是一个外置模块管理工具&#xff0c;可以自动build&#xff0c;安装各类驱动 DKMS (Dynamic Kernel Module Support) 是一种框架&#xff0c;用于在 Linux 操作系统中构建和维护内核模块。内核模块是 Linux 内核的一部分&#xff0c;它们提供了许多功能&…