图像变黑了

时间:2014-03-30 11:04:31

标签: python image image-processing gaussian noise-generator

我在python中编写了一个程序,在图像上应用高斯噪声,如下所示。 输入图像是:

enter image description here

from PIL import Image
from math import *

import numpy

list1 = []
list2 = []

im = Image.open("313.JPG")
im.show()
list1 = list(im.getdata())

length = len(list1)
total = 0
for i in list1:
    total = total + i
mean = total /length  #mean
sd = numpy.std(list1) #standard deviation
print "mean is %d" %(mean)
print "sd is %d" %(sd)
for i in list1:
    g = (1/(sd * sqrt(2*pi)))*(exp(-((i - mean)**2)/(2*(sd**2)))) #gaussian 
    list2.append(g)
im.putdata(list2)
im.save('q4.jpg')             
im.show()

但是我得到一个完整的黑暗图像,而不是在图像上得到噪音。请帮助。我期待下面的图像作为输出。 enter image description here

2 个答案:

答案 0 :(得分:1)

由于高斯标准化,其峰值在1/sqrt(2pi),因此您应该g乘以255*sqrt(2*math.pi)

由于g不是普通的高斯,但它也是1/sd的标准化,要让g跨越0255你shoud moltiply g N如下:

N = 255.*sqrt(2.*pi)*sd
g = N*(1/(sd * sqrt(2*pi)))*(exp(-((i - mean)**2)/(2*(sd**2))))

这是我的图像作为输入:

enter image description here

这是正确的:你的算法只计算每个像素,它的高斯值(高斯以平均值为中心):这意味着具有接近平均值的值的像素将变得更高并且像素距离平均值更远越来越黑了。无法从中获得噪音。你应该考虑你的算法。

答案 1 :(得分:0)

from PIL import Image
from math import *
import numpy

list1 = []
im = Image.open("313.JPG")
im.show()
list1 = list(im.getdata())
length = len(list1)

# generate random noise data with mean 0 and sd 10
list2 = numpy.random.normal(0, 10, length)
# Add this to the image data
list3 = list1+list2

im.putdata(list3)
im.show()

Result of adding noise