高斯噪声,椒盐噪声的思想及多种噪声的实现

图像噪声:

概念:

• 图像噪声是图像在获取或是传输过程中受到随机信号干扰,妨碍人们对图像理解及分析处理 的信号。
• 很多时候将图像噪声看做多维随机过程,因而描述噪声的方法完全可以借用随机过程的描述, 也就是使用随机过程的描述,也就是用它的高斯分布函数和概率密度分布函数。
• 图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产 生图像噪声的主要因素是所用的传输信道受到了噪声的污染。

信噪比:

在噪声的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量图像噪声。
通俗的讲就是信号占多少,噪声占多少,SNR越小,噪声占比越大。 在信号系统中,计量单位为dB,为10lg(PS/PN), PS和PN分别代表信号和噪声的有效功率。 在这里,采用信号像素点的占比充当SNR,以衡量所添加噪声的多少。
举个例,假设一张图像的宽x高 = 10x10 ,共计100个像素,想让其中20个像素点变为噪声,其余80 个像素点保留原值,则这里定义的SNR=80/100 = 0.8 。

高斯噪声:

概念:

• 高斯噪声(Gaussian noise)是指它的概率密度函数服从高斯分布的一类噪声。
• 特别的,如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称 它为高斯白噪声。
• 必须区分高斯噪声和白噪声两个不同的概念。高斯噪声是指噪声的概率密度函数服从高斯分布, 白噪声是指噪声的任意两个采样样本之间不相关,两者描述的角度不同。白噪声不必服从高斯分 布,高斯分布的噪声不一定是白噪声。

产生原因:

1)图像传感器在拍摄时不够明亮、亮度不够均匀;
2)电路各元器件自身噪声和相互影响;
3)图像传感器长期工作,温度过高

实现方法:

一个正常的高斯采样分布公式G(d), 得到输出像素
*Pout. Pout = Pin + XMeans + sigma G(d)
其中d为一个线性的随机数,G(d)是随机数的高斯分布随机值。

给一副数字图像加上高斯噪声的处理顺序如下:
a. 输入参数sigma 和 X mean
b. 以系统时间为种子产生一个伪随机数
c. 将伪随机数带入G(d)得到高斯随机数
d. 根据输入像素计算出输出像素
e. 重新将像素值放缩在[0 ~ 255]之间 f. 循环所有像素
g. 输出图像

手动代码实现:

#随机生成符合正态(高斯)分布的随机数,means,sigma为两个参数
import numpy as np
import cv2
from numpy import shape 
import random
def GaussianNoise(src,means,sigma,percetage):   #means是均值,percetage是信噪比NoiseImg=srcNoiseNum=int(percetage*src.shape[0]*src.shape[1])for i in range(NoiseNum):#每次取一个随机点#把一张图片的像素用行和列表示的话,randX 代表随机生成的行,randY代表随机生成的列#random.randint生成随机整数#高斯噪声图片边缘不处理,故-1randX=random.randint(0,src.shape[0]-1)randY=random.randint(0,src.shape[1]-1)#此处在原有像素灰度值上加上随机数NoiseImg[randX,randY]=NoiseImg[randX,randY]+random.gauss(means,sigma)#若灰度值小于0则强制为0,若灰度值大于255则强制为255if  NoiseImg[randX, randY]< 0:NoiseImg[randX, randY]=0elif NoiseImg[randX, randY]>255:NoiseImg[randX, randY]=255return NoiseImg
img = cv2.imread('lenna.png',0)
img1 = GaussianNoise(img,2,4,0.5)
img = cv2.imread('lenna.png')
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#cv2.imwrite('lenna_GaussianNoise.png',img1)
cv2.imshow('source',img2)
cv2.imshow('lenna_GaussianNoise',img1)
cv2.waitKey(0)

实现结果展示:

在这里插入图片描述

椒盐噪声

椒盐噪声概念:

• 椒盐噪声又称为脉冲噪声,它是一种随机出现的白点或者黑点。
• 椒盐噪声 = 椒噪声 (pepper noise)+ 盐噪声(salt noise)。 椒盐噪声的值为0(椒)或者255(盐)。
• 前者是低灰度噪声,后者属于高灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。
• 对于彩色图像,也有可能表现为在单个像素BGR三个通道随机出现的255或0。
• 如果通信时出错,部分像素的值在传输时丢失,就会发生这种噪声。
• 盐和胡椒噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生等。例如失效的感应器导致像 素值为最小值,饱和的感应器导致像素值为最大值。

实现方法:

给一副数字图像加上椒盐噪声的处理顺序:
1.指定信噪比 SNR ,其取值范围在[0, 1]之间
2.计算总像素数目 SP, 得到要加噪的像素数目 NP = SP * (1-SNR)
3.随机获取要加噪的每个像素位置P(i, j)
4.指定像素值为255或者0。
5.重复3, 4两个步骤完成所有NP个像素的加噪

手动代码实现:

import numpy as np
import cv2  #pip install opencv_python
from numpy import shape
import random
def  fun1(src,percetage):     NoiseImg=src    NoiseNum=int(percetage*src.shape[0]*src.shape[1])    for i in range(NoiseNum):   #返还一个迭代器 #每次取一个随机点 #把一张图片的像素用行和列表示的话,randX 代表随机生成的行,randY代表随机生成的列#random.randint生成随机整数#椒盐噪声图片边缘不处理,故-1randX=random.randint(0,src.shape[0]-1)       randY=random.randint(0,src.shape[1]-1) #random.random生成随机浮点数,随意取到一个像素点有一半的可能是白点255,一半的可能是黑点0      if random.random()<=0.5:           NoiseImg[randX,randY]=0       else:            NoiseImg[randX,randY]=255    return NoiseImg#导入图片
img=cv2.imread('lenna.png',0)#调fun1函数,0.2为参数
img1=fun1(img,0.2)
#在文件夹中写入命名为lenna_PepperandSalt.png的加噪后的图片
#cv2.imwrite('lenna_PepperandSalt.png',img1)img = cv2.imread('lenna.png')
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('source',img2)
cv2.imshow('lenna_PepperandSalt',img1)
cv2.waitKey(0)

实现结果展示:

在这里插入图片描述

其他多种噪声:

概念:

泊松噪声:
符合泊松分布的噪声模型,泊松分布适合于描述单位时间内随机事件发生的次数的概率分布。 如某一服务设施在一定时间内受到的服务请求的次数,电话交换机接到呼叫的次数、汽车站台的候客人 数、机器出现的故障数、自然灾害发生的次数、DNA序列的变异数、放射性原子核的衰变数等等。
乘性噪声:
一般由信道不理想引起,它们与信号的关系是相乘,信号在它在,信号不在他也就不在。
瑞利噪声:
相比高斯噪声而言,其形状向右歪斜,这对于拟合某些歪斜直方图噪声很有用。瑞利噪声的 实现可以借由平均噪声来实现。
伽马噪声:
其分布服从了伽马曲线的分布。伽马噪声的实现,需要使用b个服从指数分布的噪声叠加而 来。指数分布的噪声,可以使用均匀分布来实现。(b=1时为指数噪声,b>1时通过若干个指数噪声叠 加,得到伽马噪声)

多种噪声接口代码实现:

import cv2 as cv
import numpy as np
from PIL import Image
from skimage import util'''
def random_noise(image, mode='gaussian', seed=None, clip=True, **kwargs):
功能:为浮点型图片添加各种随机噪声
参数:
image:输入图片(将会被转换成浮点型),ndarray型
mode: 可选择,str型,表示要添加的噪声类型gaussian:高斯噪声localvar:高斯分布的加性噪声,在“图像”的每个点处具有指定的局部方差。poisson:泊松噪声salt:盐噪声,随机将像素值变成1pepper:椒噪声,随机将像素值变成0或-1,取决于矩阵的值是否带符号s&p:椒盐噪声speckle:均匀噪声(均值mean方差variance),out=image+n*image
seed: 可选的,int型,如果选择的话,在生成噪声前会先设置随机种子以避免伪随机
clip: 可选的,bool型,如果是True,在添加均值,泊松以及高斯噪声后,会将图片的数据裁剪到合适范围内。如果谁False,则输出矩阵的值可能会超出[-1,1]
mean: 可选的,float型,高斯噪声和均值噪声中的mean参数,默认值=0
var:  可选的,float型,高斯噪声和均值噪声中的方差,默认值=0.01(注:不是标准差)
local_vars:可选的,ndarry型,用于定义每个像素点的局部方差,在localvar中使用
amount: 可选的,float型,是椒盐噪声所占比例,默认值=0.05
salt_vs_pepper:可选的,float型,椒盐噪声中椒盐比例,值越大表示盐噪声越多,默认值=0.5,即椒盐等量
--------
返回值:ndarry型,且值在[0,1]或者[-1,1]之间,取决于是否是有符号数
'''img = cv.imread("lenna.png")
noise_gs_img=util.random_noise(img,mode='gaussian') #自由选择想要的噪声cv.imshow("source", img)
cv.imshow("lenna",noise_gs_img)
#cv.imwrite('lenna_noise.png',noise_gs_img)
cv.waitKey(0)
cv.destroyAllWindows()

根据mode的不同,可自由实现多种噪声~

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

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

相关文章

bzoj1095 [ZJOI2007]Hide 捉迷藏

据说是道很厉害的题。。。。黄学长的安利啊。。。。 然而我却用它学分治。。。。 一个坑就摆在这里了。。。。 转载于:https://www.cnblogs.com/LLppdd/p/9124394.html

如何识别媒体偏见_描述性语言理解,以识别文本中的潜在偏见

如何识别媒体偏见TGumGum can do to bring change by utilizing our Natural Language Processing technology to shed light on potential bias that websites may have in their content. The ideas and techniques shared in this blog are a result of the GumGum Hackatho…

分享 : 警惕MySQL运维陷阱:基于MyCat的伪分布式架构

分布式数据库已经进入了全面快速发展阶段。这种发展是与时俱进的&#xff0c;与人的需求分不开&#xff0c;因为现在信息时代的高速发展&#xff0c;导致数据量和交易量越来越大。这种现象首先导致的就是存储瓶颈&#xff0c;因为MySQL数据库实质上还是一个单机版本的数据库&am…

opencv:图像读取BGR变成RGB

opencv大坑之BGR opencv对于读进来的图片的通道排列是BGR&#xff0c;而不是主流的RGB&#xff01;谨记&#xff01; #opencv读入的矩阵是BGR&#xff0c;如果想转为RGB&#xff0c;可以这么转 img cv2.imread(1.jpg) img cv2.cvtColor(img4,cv2.COLOR_BGR2RGB)

数据不平衡处理_如何处理多类不平衡数据说不可以

数据不平衡处理重点 (Top highlight)One of the common problems in Machine Learning is handling the imbalanced data, in which there is a highly disproportionate in the target classes.机器学习中的常见问题之一是处理不平衡的数据&#xff0c;其中目标类别的比例非常…

最小二乘法以及RANSAC(随机采样一致性)思想及实现

线性回归–最小二乘法&#xff08;Least Square Method&#xff09; 线性回归&#xff1a; 什么是线性回归&#xff1f; 举个例子&#xff0c;某商品的利润在售价为2元、5元、10元时分别为4元、10元、20元&#xff0c; 我们很容易得出商品的利润与售价的关系符合直线&#xf…

软键盘弹起,导致底部被顶上去

计算出可视界面的高度&#xff0c;当软键盘弹起时让底部元素隐藏掉&#xff0c;当键盘收起时再让它显示&#xff0c;实在没办法时这种方法也不失为一种方法1 var hdocument.documentElement.clientHeight; 2 $(window).resize(function(){ 3 let heightdocument.documentEl…

关于LaaS,PaaS,SaaS一些个人的理解

关于LaaS,PaaS,SaaS一些个人的理解 关于LaaS,PaaS,SaaS一些个人的理解 其实如果从整个程序运营的角度来考虑比较好 第一个LaaS 这个也叫做Haas 就是硬件或者基础设置即服务 比如现在的 aws azure 阿里云 腾讯云 百度云 都是提供服务器基础设置服务的 包括服务器的硬件…

糖药病数据集分类_使用optuna和mlflow进行心脏病分类器调整

糖药病数据集分类背景 (Background) Data science should be an enjoyable process focused on delivering insights and real benefits. However, that enjoyment can sometimes get lost in tools and processes. Nowadays it is important for an applied data scientist to…

Android MVP 框架

为什么80%的码农都做不了架构师&#xff1f;>>> 前言 根据网络上的MVP套路写了一个辣鸡MVP DEMO 用到的 android studio MVPHelper插件,方便自动生成框架代码rxjavaretrofit什么是MVP MVP就是英文的Model View Presenter&#xff0c;然而实际分包并不是只有这三个包…

相似图像搜索的哈希算法思想及实现(差值哈希算法和均值哈希算法)

图像相似度比较哈希算法: 什么是哈希&#xff08;Hash&#xff09;&#xff1f; • 散列函数&#xff08;或散列算法&#xff0c;又称哈希函数&#xff0c;英语&#xff1a;Hash Function&#xff09;是一种从任何一种数据中创建小 的数字“指纹”的方法。散列函数把消息或数…

腾讯云AI应用产品总监王磊:AI 在传统产业的最佳实践

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 背景&#xff1a;5月23-24日&#xff0c;以“焕启”为主题的腾讯“云未来”峰会在广州召开&#xff0c;广东省各级政府机构领导、海内外业内学术专家、行业大咖及技术大牛等在现场共议云计算与数字化产业创…

标准化(Normalization)和归一化实现

概念&#xff1a; 原因&#xff1a; 由于进行分类器或模型的建立与训练时&#xff0c;输入的数据范围可能比较大&#xff0c;同时样本中各数据可 能量纲不一致&#xff0c;这样的数据容易对模型训练或分类器的构建结果产生影响&#xff0c;因此需要对其进行标准 化处理&#x…

Toast源码深度分析

目录介绍 1.最简单的创建方法 1.1 Toast构造方法1.2 最简单的创建1.3 简单改造避免重复创建1.4 为何会出现内存泄漏1.5 吐司是系统级别的 2.源码分析 2.1 Toast(Context context)构造方法源码分析2.2 show()方法源码分析2.3 mParams.token windowToken是干什么用的2.4 schedul…

序列化框架MJExtension详解 + iOS ORM框架

当开发中你的模型中属性名称和 字典(JSON/XML) 中的key 不能一一对应时, 或者当字典中嵌套了多层字典数组时..., 以及教你如何用 MJExtension 配置类来统一管理你的模型配置, 下面罗列了开发中常见的一些特殊情况, 请参考!(MJExtension/github) 最基本用法: // 将字典转为模型 …

运行keras出现 FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated解决办法

运行keras出现 FutureWarning: Passing (type, 1) or ‘1type’ as a synonym of type is deprecated; in a future version of numpy, 原则来说&#xff0c;没啥影响&#xff0c;还是能运行&#xff0c;但是看着难受 解决办法&#xff1a; 点击蓝色的链接&#xff1a; 进入 …

RedirectToAction()转移方式及参数传递

今天在做一个功能的时&#xff0c;使用RedirectToAction()需要从这里传几个参数&#xff0c;从网上查了一下&#xff0c;这样解决。真好。 Return RedirectToAction("Index","ManageInfo",new{type0,page1});转载于:https://www.cnblogs.com/ZaraNet/p/978…

软件项目风险管理

近几年来软件开发技术、工具都有了很大的进步&#xff0c;但是软件项目开发超时、超支、甚至不能满足用户需求而根本没有得到实际使用的情况仍然比比皆是。软件项目开发和管理中一直存在着种种不确定性&#xff0c;严重影响着项目的顺利完成和提交。但这些软件风险并未得到充分…

mongdb 群集_群集文档的文本摘要

mongdb 群集This is a part 2 of the series analyzing healthcare chart notes using Natural Language Processing (NLP)这是使用自然语言处理(NLP)分析医疗保健图表笔记的系列文章的第2部分。 In the first part, we talked about cleaning the text and extracting sectio…

keras框架实现手写数字识别

详细细节可学习从零开始神经网络&#xff1a;keras框架实现数字图像识别详解&#xff01; 代码实现&#xff1a; [1]将训练数据和检测数据加载到内存中(第一次运行需要下载数据&#xff0c;会比较慢): &#xff08;mnist是手写数据集&#xff09; train_images是用于训练系统…