2013-10-10 104 views
1

我有一些图像需要添加增量的泊松噪声才能更全面地分析它们。我知道你可以在MATLAB中做到这一点,但你如何去做Python?到目前为止搜索没有任何结果。将泊松噪声添加到图像

回答

-1

如果numpy/scipy可供您使用,那么以下内容应该有所帮助。我建议你将数组强制浮点以进行中间计算,然后将其转换回uint8用于输出/显示目的。由于泊松噪声全部> = 0,因此您将需要决定如何处理数组溢出问题,因为您将其转换回uint8。您可以根据自己的目标进行缩放或截断。

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

poissonNoise = numpy.random.poisson(50,imagea.shape).astype(float) 

noisyImage = imagea + poissonNoise 
4

其实保罗的答案没有道理。

泊松噪声取决于信号!并且使用由他提供的这些命令,稍后添加到图像的噪声不依赖于信号。

为了使依赖于信号您shold图像传递到与NumPy的泊松功能:

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

noise_mask = numpy.random.poisson(img) 

noisy_img = img + noise_mask 
+0

你的回答很有意义。虽然你如何处理这导致的饱和? –

+0

那么,在这种情况下,您必须自己处理饱和度,将负值设置为0,并设置为图像位数的最高值,然后将这些值设置为最高值。 – Helder

+0

谢谢。我通过饱和前5%的像素来处理它 –

4

赫尔德的答案是正确的。我只想添加一个事实,即泊松噪声不是加性的,不能将其添加为高斯噪声。

取决于你想要达到的目标,这里是一些建议:

  • 模拟低光噪声图像(如PEAK = 1,这将是很大的声响)

    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 
    
  • 在干净的图像

    import numpy as np 
    image = read_image("YOUR_IMAGE") 
    noisemap = create_noisemap() 
    noisy = image + np.random.poisson(noisemap) 
    
的顶端添加噪声层

然后你可以裁剪的结果为0 - 255如果你喜欢(我使用PIL,所以我用255而不是1)。

+0

这应该是正确的答案。 –

+0

泊松分布生成整数。如果图像是范围为[0,1]的np.float数组,则正确的代码应为'noisy = np.random.poisson(image * 255.0 * PEAK)/ PEAK/255' – misssprite