MATLAB:对高斯噪声使用 imnoise 和 randn 有什么区别

MATLAB: What is the difference using imnoise and randn for Gaussian noise

在MATLAB中添加加性高斯白噪声时,可以使用预定义的函数

J = imnoise(I,'gaussian',M,V) % I is the image to add the noise

默认情况下,零均值 (M) 和方差 (V) 0.01。此函数的手册是 here.

然而,在各种MATLAB代码中,我也看到通过以下方式将加性高斯噪声添加到图像中

sigma = 10; % standard deviation (STD)

g = I + sigma * randn(size(I)); %add gaussian noise with STD 10

很好。现在,我们知道了方差公式,

[![variance=sigma^2][2]][2]

其中 sigma 是 STD。所以,根据第二个代码,我有 sigma = 10 因此,方差 (V) 应该是 100。使用 MATLAB imnoise 函数来获得零均值和方差 100 应该是这样的

J = imnoise(I,'gaussian',0,100)

然而,即使接近第二个代码,这也不会产生损坏的图像。图像似乎 100% 被噪声损坏了。这有什么不同?我在这里错过了什么吗?

我看到的主要问题是 imnoise 函数要求将图像缩放到 [0,1] 区间(另请参见 answer)。考虑到这一点,100 的方差是没有意义的。您应该缩放图像旁边的方差,希望一切都再次有意义。