[英]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
。 你會想要改變噪音的水平和傳播; 因此,我制作了均值和比例參數。 由於顏色值的范圍有限制,我使用max
和min
。 為方便起見,我在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.