【问题标题】:Adding poisson noise does nothing to an image添加泊松噪声对图像没有任何作用
【发布时间】:2018-06-11 00:24:10
【问题描述】:

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

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

看了this的回答后,我也试过了。

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

无济于事。

我也用im = zeros(256, 256) 尝试过,但也没有用。

【问题讨论】:

    标签: matlab image-processing matlab-figure


    【解决方案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] 范围内,因为预计双精度图像会在该范围内。因此,您的代码返回的分布不是泊松,而是泊松均值。

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

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

    (如果更适合您,也可以使用其他因素)。

    【讨论】:

      【解决方案2】:

      我用我从here. 上取下来的图片试了一下

      I = imread('stick.jpg');
      imshow(I)
      J = imnoise(I,'poisson');
      imshow(J)
      

      如果我把你的改成高斯,你会看到不同。

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

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

      【讨论】:

      • 因为你选择了泊松,改成高斯。
      • 你能解释一下为什么这有效而毒药无效吗?
      • @Carpetfizz 不管这里的 matlab 实现如何,泊松噪声发生在低光子计数场景中,在超亮图像中没有任何噪声是有道理的
      猜你喜欢
      • 2013-10-17
      • 1970-01-01
      • 2013-10-24
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多