如何在图像中添加噪声?

2024-06-03 01:17:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

current results

我写的代码有问题吗?

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)

Tags: 代码infromimageimportlogfordef
1条回答
网友
1楼 · 发布于 2024-06-03 01:17:43

感谢马蒂诺先生指出我应该回答噪音而不是模糊的问题。我会再回答枕头的问题,因为我觉得它更简单。

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

我想你需要加性高斯噪声。为了省去编写和调试生成器的麻烦,我使用了一个现成的生成器,normalvariate。您将需要改变噪声的级别和传播;因此,我制作了平均值和比例参数。因为颜色值的范围有限制,所以我使用maxmin。为了方便起见,我将对add_noise_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()

相关问题 更多 >