添加泊松噪声对图像没有任何作用

时间:2018-06-11 00:24:11

标签: matlab image-processing matlab-figure

我正在尝试在MATLAB中将泊松噪声添加到一个非常简单的图像中。

im = ones(256, 256);
noisy = imnoise(im, 'poisson');

在阅读this回答之后,我也试过了。

im = ones(256, 256);
noisy = imnoise(im2double(im), 'poisson');

无济于事。

我也尝试过im = zeros(256, 256),但也没有做任何事情。

2 个答案:

答案 0 :(得分:1)

来自the documentation of imnoise

  

如果I是双精度,则输入像素值被解释为由1e12按比例放大的泊松分布的平均值。例如,如果输入像素的值为5.5e-12,则相应的输出像素将从均值为5.5的泊松分布生成,然后按1e12缩小。

当输入为uint8

时,不会发生此缩放
im = ones(256, 256, 'uint8');
noisy = imnoise(im, 'poisson');

在双精度的情况下,有两个问题:

  1. 1e12的缩放似乎过多。这意味着输出取自泊松分布,均值为1e12,然后除以1e12。平均值为1,标准差为sqrt(1e-12)=1e-6。也就是说,标准偏差很小,强度变化不可见。如果您使用format long,MATLAB将显示以下值:

    >> format long
    >> min(noisy(:))
    ans =
         0.999996115518000
    >> max(noisy(:))
    ans =
         1
    
  2. 最后一个结果(最大值为1)表示MATLAB将结果剪辑到[0,1]范围,因为双精度图像应该在该范围内。因此,您的代码返回的分布不是泊松,它的平均值是泊松截断。

  3. 因此,对于浮点图像,首先适当地缩放它们:

    noisy = imnoise(im * 1e-12, 'poisson') * 1e12;
    

    (如果更适合你,可以使用不同的因素)。

答案 1 :(得分:0)

我尝试使用here.

从互联网上拍摄的图像
I = imread('stick.jpg');
imshow(I)
J = imnoise(I,'poisson');
imshow(J)

enter image description here enter image description here

如果我带你的并将其改为高斯,你会看到差异。

I = ones(256,256);
imshow(I)
J = imnoise(I,'gaussian');
imshow(J)

我还没有对此进行足够的阅读,但我的信念是因为图像具有均匀的强度throughout.

enter image description here