高斯噪声

高斯噪声">高斯噪声

图像噪声之高斯噪声gauss-noise">图像噪声高斯噪声(gauss noise)

概述:

高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声

与椒盐噪声相似(Salt And Pepper Noise),高斯噪声(gauss noise)也是数字图像的一个常见噪声。

椒盐噪声是出现在随机位置、噪点深度基本固定的噪声,高斯噪声与其相反,是几乎每个点上都出现噪声、噪点深度随机的噪声。

算法步骤:

通过概率论里关于正态分布的有关知识可以很简单的得到其计算方法,高斯噪声的概率密度服从高斯分布(正态分布)其中有means(平均值)和sigma(标准方差)两个参数。

高斯分布(正态分布):

这里写图片描述

对于每个输入像素,我们可以通过与符合高斯分布的随机数相加, 得到输出像素:

   Pout = Pin + F(means,sigma)

获得一个符合高斯分布的随机数有好几种方法,比如最基本的一个方法是使用标准的正态累积分布函数的反函数。除此之外还有其他更加高效的方法,Box-Muller变换就是其中之一。另一个更加快捷的方法是ziggurat算法。

而python的random库也提供了产生高斯随机数的方法:

高斯分布
random.gauss(mu, sigma)
Gaussian distribution. mu is the mean, and sigma is the standard deviation. This is slightly faster than the normalvariate() function defined below.

给一副数字图像加上高斯噪声的处理顺序如下:

  • a.设定参数sigma 和 Xmean

  • b.产生一个高斯随机数

  • c.根据输入像素计算出输出像素

  • d.重新将像素值限制或放缩在[0 ~ 255]之间

  • e.循环所有像素

  • f.输出图像。

编程实例:

# -*- coding: utf-8 -*-

from PIL import Image

from pylab import *

from numpy import*

import random

#读取图片并转为数组
im = array(Image.open('./source/test.jpg'))

#设定高斯函数的偏移
means = 0

#设定高斯函数的标准差
sigma = 25

#r通道
r = im[:,:,0].flatten()

#g通道
g = im[:,:,1].flatten()

#b通道
b = im[:,:,2].flatten()



#计算新的像素值
for i in range(im.shape[0]*im.shape[1]):

    pr = int(r[i]) + random.gauss(0,sigma)

    pg = int(g[i]) + random.gauss(0,sigma)

    pb = int(b[i]) + random.gauss(0,sigma)

    if(pr < 0):

    pr = 0

    if(pr > 255):

    pr = 255

    if(pg < 0):

    pg = 0

    if(pg > 255):

    pg = 255

    if(pb < 0):

    pb = 0

    if(pb > 255):

    pb = 255

    r[i] = pr


    g[i] = pg


    b[i] = pb


im[:,:,0] = r.reshape([im.shape[0],im.shape[1]])

im[:,:,1] = g.reshape([im.shape[0],im.shape[1]])

im[:,:,2] = b.reshape([im.shape[0],im.shape[1]])

#显示图像

imshow(im)

show()         

这里由于默认图像会被编码成无符号八位整数(unit8),所以当进行数值计算时,如果出现大于255和小于0的情况会进行滚动,比如255 + 10 = 9 ,如果不进行处理,结果是错误的,所以必须转成int计算,限制范围后再赋值回去,下面是直接运算造成的错误结果(sigma = 25):

# -*- coding: utf-8 -*-

from PIL import Image

from pylab import *

from numpy import*

import random

#读取图片并转为数组
im = array(Image.open('./source/test.jpg'))

#设定高斯函数的偏移
means = 0

#设定高斯函数的标准差
sigma = 25

#r通道
r = im[:,:,0].flatten()

#g通道
g = im[:,:,1].flatten()

#b通道
b = im[:,:,2].flatten()



#计算新的像素值
for i in range(im.shape[0]*im.shape[1]):


    r[i] = r[i] + random.gauss(0,sigma)


    g[i] = g[i] + random.gauss(0,sigma)


    b[i] = b[i] + random.gauss(0,sigma)


im[:,:,0] = r.reshape([im.shape[0],im.shape[1]])

im[:,:,1] = g.reshape([im.shape[0],im.shape[1]])

im[:,:,2] = b.reshape([im.shape[0],im.shape[1]])

#显示图像

imshow(im)

show()         

这里写图片描述

运行结果:


原图

这里写图片描述

sigma = 15

这里写图片描述

sigma = 25

这里写图片描述

sigma = 40

这里写图片描述

结语:

本篇博客主要介绍了高斯噪声这种常见的图像噪声的原理与生成,希望对大家有所帮助~


http://www.niftyadmin.cn/n/1716546.html

相关文章

图像平均及其在降噪方面的应用

图像平均及其在降噪方面的应用 图像平均以及图像平均在应对椒盐/高斯/相机噪声方面的对比分析 概述&#xff1a; 图像平均操作是减少图像噪声的一种简单方式。 我们可以简单地从图像列表中计算出一幅平均图像。 假设所有的图像具有相同的大小,我们可以将这些图像简单地相加…

如何改变computed执行_学习vue3系列computed

响应式API中 computed 和之前的 computed 选项用法类似。对于任何复杂逻辑&#xff0c;我们都可能使用计算属性。比如翻转字符串&#xff1a;<template> <h1>{{ text }}h1> <button click"change">count is: {{ state.count }}button> &l…

CUDA编程(一)第一个CUDA程序

CUDA编程&#xff08;一&#xff09; 第一个CUDA程序 Kernel.cu CUDA是什么&#xff1f; CUDA(Compute Unified Device Architecture)&#xff0c;是显卡厂商NVIDIA推出的运算平台。是一种通用并行计算架构&#xff0c;该架构使GPU能够解决复杂的计算问题。说白了就是我们可…

python 工资管理软件_超越Excel、python的数据可视化报表,月薪3W的人都在用

和各位说句老实话&#xff0c;不可能有十全十美的报表系统&#xff0c;毕竟任何一个行业和企业受自身客观环境的限制&#xff0c;但人嘛&#xff0c;总要有点理想和追求&#xff0c;就好比到一定年纪会自问&#xff0c;我的人生追求到底是啥&#xff1f;表哥表姐到了一定阶段也…

CUDA编程(二) CUDA初始化与核函数

CUDA编程&#xff08;二&#xff09; CUDA初始化与核函数 CUDA初始化 在上一次中已经说过了&#xff0c;CUDA安装成功之后&#xff0c;新建一个工程还是十分简单的&#xff0c;直接在新建项目的时候选择NVIDIA CUDA项目就可以了&#xff0c;我们先新建一个MyCudaTest 工程&a…

python的前端和后端_python是用于前端还是后端开发

属于后端开发。 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。在后端开发中有着极其重要的作用。 Python 特点: 1.易于…

CUDA编程(三)评估CUDA程序的表现

CUDA编程&#xff08;三&#xff09; 评估CUDA程序的表现 上一篇博客我们基本上搭建起来了CUDA程序的骨架&#xff0c;但是其中并没有涉及到我们之前不断提到的并行加速&#xff0c;毕竟只有当我们的程序高并行的运行在GPU上才能大大缩短运行时间。不过在加速之前我们还有一件…

python怎么调背景颜色_Python的matplotlib绘图如何修改背景颜色的实现

在主图中背景颜色不知道怎么改&#xff0c;plt.plot()中没有axisbg参数。 但是子图可以对plt.subplot的参数做修改&#xff0c;下面是对子图的背景颜色修改代码 import matplotlib.pyplot as plt import numpy as np # Fixing random state for reproducibility np.random.seed…