图像噪声:

概念:

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

信噪比:

在噪声的概念中,通常采用信噪比(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的不同,可自由实现多种噪声~

高斯噪声,椒盐噪声的思想及多种噪声的实现相关推荐

  1. 数字图像处理——添加高斯噪声椒盐噪声

    数字图像处理--添加高斯噪声&椒盐噪声 本文链接:https://blog.csdn.net/u012936765/article/details/53200918 最近交了数图作业,mark ...

  2. [转载] opencv-python:13_图像噪声(噪声的概念、椒盐噪声、高斯噪声、使用python给图像添加噪声)

    参考链接: Python OpenCV 基础 0: imshow 显示图像 图像噪声 学习两种图像噪声,即椒盐噪声和高斯噪声.使用python实现给图像添加椒盐噪声和高斯噪声 一.噪声的概念 在噪声的 ...

  3. python添加高斯噪声_使用Python-OpenCV向图片添加噪声(高斯噪声、椒盐噪声)

    在matlab中,存在执行直接得函数来添加高斯噪声和椒盐噪声.Python-OpenCV中虽然不存在直接得函数,但是很容易使用相关的函数来实现. 代码: import numpy as np impo ...

  4. opencv-python数字图像处理学习4:对一副图像加噪声(高斯,椒盐等),进行平滑,锐化,观察其图像变化

    对一副图像加噪声(高斯,椒盐等),进行平滑,锐化,观察其图像变化 一.在开始之前 知识点 二.开始 三.对一副图像加高斯噪声.椒盐 四.对已加高斯噪声.椒盐的图像进行平滑.锐化处理 1.对已加高斯噪声 ...

  5. 图像噪声-椒盐噪声高斯噪声(待补充)

    噪声 加性噪声一般指热噪声.散弹噪声等,它们与信号的关系是相加,不管有没有信号,噪声都存在. 高斯白噪声包括热噪声和散粒噪声.在通信信道测试和建模中,高斯噪声被用作加性白噪声以产生加性白高斯噪声. 加 ...

  6. 图像噪声种类--高斯噪声 椒盐噪声

    图像噪声是指存在于图像数据中的不必要的或多余的干扰信息,图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道收到了噪声的污染. 在MAT ...

  7. 色噪声原理及matlab代码实现,色噪声原理及matlab代码实现

    色噪声原理及matlab代码实现 色噪声原理及 matlab 实现1.实验目的:⑴ 了解随机信号自身的特性,包括均值(数学期望) .均方值.方差.相关函数.概率密度.频谱及功率谱密度等.(2)了解色噪 ...

  8. 图像处理之噪声---椒盐,白噪声,高斯噪声三种不同噪声的区别

    白噪声是指功率谱密度在整个频域内均匀分布的噪声. 所有频率具有相同能量的随机噪声称为白噪声.白噪声或白杂讯,是一种功率频谱密度为常数的随机信号或随机过程.换句话说,此信号在各个频段上的功率是一样的,由 ...

  9. Mvtec数据集批量加各种噪声(高斯,椒盐,随机噪声)

    最近想在Mvtec数据集test数据中加一些噪声,参考别人的博客写了一个代码,可以对数据集批量处理(这里只对test数据进行了噪声处理),代码如下: import cv2 import numpy a ...

最新文章

  1. python高阶面试题_Python 爬虫面试题 170 道:2019 版
  2. ZServer4D开源项目
  3. 与火狐浏览器对应版本_你下载的是原版的火狐浏览器吗?如果不清楚,这篇文章会让你明白...
  4. ionic 完美仿微信摇一摇
  5. android 扫描所有文件大小,Android获取指定文件大小
  6. Centos 6.5 X64 环境下编译 hadoop 2.6.0 --已验证
  7. 字节流 system.out ----printStream
  8. 由捧哏巨匠谈创新的难度
  9. 数据包络分析-两阶段网络DEA(two stage network)
  10. 手把手一步步用DataGridView 控件编写属于自己的日历
  11. 青岛科技大学古典音乐考试需要的资料
  12. 关于平衡组的一个例子
  13. python爬虫表格table_Python基于pandas爬取网页表格数据
  14. 移动端应用APP的分类(WebApp、HybridApp、 NativeApp)
  15. unity3d 骨骼模型武器绑定
  16. 《木偶奇遇记》读后感
  17. ubuntu16怎么升级到ubuntu18
  18. 【人工智能 卷积神经网络】基础练习:基于torch构建卷积神经网络,测试集正确率达 百分之99
  19. Permutation test(排列(组合)检验)
  20. 计算机网络基础-1-绪论

热门文章

  1. 计算机网络【二】物理层基础知识
  2. C库函数与系统函数的关系
  3. c语言中判断一个字符串是否包含另一个字符串
  4. 【计算机系统设计】学习笔记(1)03,04
  5. 【数字逻辑 Verilog】全面剖析数据选择器——从基础到拓展,从理论到设计的实现,从表面到本质
  6. Python+Selenium自动化篇-5-获取页面信息
  7. 在UITouch事件中画圆圈-iOS8 Swift基础教程
  8. 转:Java反射教程
  9. JFreeChart API文档
  10. storyboard隐藏iphone软键盘