2013-10-10 107 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