簡體   English   中英

如何給圖像添加噪聲?

[英]How to add noise to 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)

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)

我要感謝 Martineau 先生指出我應該回答噪音而不是模糊。 我會再次用枕頭來回答,因為我認為它更簡單。

我打開一張麝鼠爪子的圖片並顯示圖像大小和位置 (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))
...     

舊答案:

如果你只是想做而不是關心做它的細節,那么看看 Pillow。 就這么簡單。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM