Adding poisson noise to an image

无人久伴 提交于 2019-12-06 07:33:14

问题


I have some images that I need to add incremental amounts of Poisson noise to in order to more thoroughly analyze them. I know you can do this in MATLAB, but how do you go about doing it in Python? Searches have yielded nothing so far.


回答1:


If numpy/scipy are available to you, then the following should help. I recommend that you cast the arrays to float for intermediate computations then cast back to uint8 for output/display purposes. As poisson noise is all >=0, you will need to decide how you want to handle overflow of your arrays as you cast back to uint8. You could scale or truncate depending on what your goals were.

filename = 'myimage.png'
imagea = (scipy.misc.imread(filename)).astype(float)

poissonNoise = numpy.random.poisson(imagea).astype(float)

noisyImage = imagea + poissonNoise

#here care must be taken to re cast the result to uint8 if needed or scale to 0-1 etc...



回答2:


The answer of Helder is correct. I just want to add the fact that Poisson noise is not additive and you can not add it as Gaussian noise.

Depend on what you want to achieve, here is some suggestions:

  • Simulate a low-light noisy image (if PEAK = 1, it will be really noisy)

    import numpy as np
    image = read_image("YOUR_IMAGE")  # need a rescale to be more realistic
    noisy = np.random.poisson(image / 255.0 * PEAK) / PEAK * 255  # noisy image
    
  • Add a noise layer on top of the clean image

    import numpy as np
    image = read_image("YOUR_IMAGE") 
    noisemap = create_noisemap() 
    noisy = image + np.random.poisson(noisemap)  
    

Then you can crop the result to 0 - 255 if you like (I use PIL so I use 255 instead of 1).




回答3:


Actually the answer of Paul doesnt make sense.

Poisson noise is signal dependent! And using those commands, provided by him, the noise later added to the image is not signal dependent.

To make it signal dependent you shold pass the image to the NumPy's poisson function:

filename = 'myimage.png'
img = (scipy.misc.imread(filename)).astype(float)

noise_mask = numpy.random.poisson(img)

noisy_img = img + noise_mask


来源:https://stackoverflow.com/questions/19289470/adding-poisson-noise-to-an-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!