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

Matlab 添加泊松噪声对图像没有任何作用,matlab,image-processing,matlab-figure,Matlab,Image Processing,Matlab Figure,我试图在MATLAB中将泊松噪声添加到一个非常简单的图像中 im = ones(256, 256); noisy = imnoise(im, 'poisson'); 看完答案后,我也试了一下 im = ones(256, 256); noisy = imnoise(im2double(im), 'poisson'); 无济于事 我也尝试过使用im=zero(256,256)但也没有效果 我用从互联网上取下的一张图片试了一下 如果我拿你的,把它改成高斯分布,你会看到不同 I = ones(

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

im = ones(256, 256);
noisy = imnoise(im, 'poisson');
看完答案后,我也试了一下

im = ones(256, 256);
noisy = imnoise(im2double(im), 'poisson');
无济于事


我也尝试过使用
im=zero(256,256)
但也没有效果

我用从互联网上取下的一张图片试了一下

如果我拿你的,把它改成高斯分布,你会看到不同

I = ones(256,256);
imshow(I)
J = imnoise(I,'gaussian');
imshow(J)
关于这一点我读得不够多,但我相信这是因为图像的强度是均匀的

来自:

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

当输入为
uint8
时,不会发生此缩放:

im = ones(256, 256, 'uint8');
noisy = imnoise(im, 'poisson');
在双精度情况下,有两个问题:

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

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

  • 因此,对于浮点图像,请先适当缩放它们:

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

    (如果更适合您,也可以使用不同的因子)。

    这是因为您选择了泊松,将其更改为高斯。您能解释一下为什么这是有效的,而毒物不是吗?@地毯嘶嘶不管这里的matlab实现如何,泊松噪声都会发生在光子数较低的情况下,这是有道理的,你没有任何在一个超级明亮的形象
    noisy = imnoise(im * 1e-12, 'poisson') * 1e12;