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 的方差是没有意义的。您应该缩放图像旁边的方差,希望一切都再次有意义。
在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 的方差是没有意义的。您应该缩放图像旁边的方差,希望一切都再次有意义。