Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何给图像添加噪声?_Python_Image - Fatal编程技术网

Python 如何给图像添加噪声?

Python 如何给图像添加噪声?,python,image,Python,Image,我试图通过下面的代码,将高斯噪声添加到RGB或灰度图像中,但到目前为止,我遇到了相同的问题,结果总是如下所示: 我写的代码有问题吗 def gauss(mean,sigma): from random import uniform from math import sqrt,log,pi,cos a=uniform(0,1) b=uniform(0,1) x=sqrt(-2*log(a))*cos(2*pi*b) return(x)

我试图通过下面的代码,将高斯噪声添加到RGB或灰度图像中,但到目前为止,我遇到了相同的问题,结果总是如下所示:

我写的代码有问题吗

def gauss(mean,sigma):
     from random import uniform
     from math import sqrt,log,pi,cos
     a=uniform(0,1)
     b=uniform(0,1)
     x=sqrt(-2*log(a))*cos(2*pi*b)
     return(x)

def bruiter(image):
     from matplotlib.pyplot import imread
     if len(image.shape)==3 :
       a,b,c=image.shape
          for i in range(a):
             for j in range(b):
                 image[i][j] += [gauss(0.5,0.01),gauss(0.5,0.01),gauss(0.5,0.01)]

     elif len(image.shape)==2 :
       a,b= image.shape
          for i in range(a):
             for j in range(b):
                 image[i][j] +=  gauss(0.01)*(1/255)

return(image)

我要感谢马蒂诺先生指出,我应该回答有关噪音而不是模糊的问题。我会再次回答枕头的问题,因为我认为它让事情变得更简单

我打开麝鼠爪子的图片,显示图像大小和位置(50,50)处像素的值。这是一幅RGB图像,我们可以相当确定每种颜色的范围为0到255

我想你需要加性高斯噪声。为了省去编写和调试生成器的麻烦,我使用了一个现成的生成器,
normalvariate
。您需要改变噪音的级别和传播;因此,我制作了平均值和比例参数。由于颜色值的范围有限制,我使用
max
min
。为了方便起见,我在
add_noise\u one_pixel
中打包了对
add_noise
的三个调用,以便可以为图像中的每个像素调用后一个例程

您已经注意到,可以使用有关图像大小的知识和
getpixel
方法在一个特定的环境中寻址图像中的所有像素

我没有检查这个代码。这更像是一个原则的说明

>>> from PIL import Image, ImageFilter
>>> im = Image.open('muskrat.png')
>>> im.size
(100, 117)
>>> im.getpixel((50,50))
(121, 130, 116)
>>> import random
>>> def add_noise(x, mean, stddev):
...     return min(max(0, x+random.normalvariate(mean,stddev)), 255)
... 
>>> def add_noise_one_pixel(im, x, y, mean=10, stddev=5):
...     x, y, z = im.getpixel((x,y))
...     im.putpixel((x,y), add_noise(x, mean, stddev), add_noise(y, mean, stddev), add_noise(z, mean, stddev))
...     
旧答案:

如果你只是想做,而不是关心做的细节,那么看看枕头。就这么简单

>>> from PIL import Image, ImageFilter
>>> im = Image.open('GENES.png')
>>> im2 = im.filter(ImageFilter.GaussianBlur(5))
>>> im2.show()

预期的结果是什么?如果使用numpy vector adds,这也会简洁得多。您的代码不会给图像添加噪声,它会有效地用噪声替换图像。您需要使每个
图像[i][j]
的结果成为该位置和
gauss()
上已经存在的值的函数,而不是完全独立于它,如图所示。我还怀疑对于灰度图像,
elif len(image.shape)==2:
应该是
elif len(image.shape)==1:
。Python包含高斯分布随机数函数。我希望我现在给你一个更合适的答案。可能的重复。与添加到图像中不同。很高兴知道(假设我记得)。事实上,模糊有相反的效果,它通常用于消除(或至少在某种程度上隐藏)图像中已经存在的噪声。奇怪的是,我用过它,但没有用在代码中,只有在图片编辑器中。在这种情况下,这个名称对我来说没有任何意义。