1

在 MATLAB 的imnoise()函数中,当噪声类型为“散斑”时,文档清楚地说明它是乘性噪声并说明了基础方程。

J = imnoise(I,'speckle',v) 使用等式J = I+n*I向图像 I 添加乘性噪声,其中 n 是均值为 0 方差为 v 的均匀分布随机噪声。 v 的默认值为0.04。

但是,没有为高斯选项提供这样的方程。还有一个单独的类型叫做'localvar'。所以使用时的方程imnoise(I, gaussian, mean_noise, variance_noise)应该是

J(x,y) = I(x,y) + g(mean_noise, sqrt((variance_noise))

此外,我的假设:

  1. 这种噪声g与图像的空间坐标无关
  2. 这种噪声g与那些空间坐标的强度无关
  3. gmean_noise是从均值和标准差的高斯分布生成的高斯随机数sigma = sqrt(variance_noise)

我对吗?

重大更新
我不接受先前的答案以消除一些混乱。所以我检查了 matlab 中“imnoise”的代码,它的作用是:

b = a + sqrt(p4)*randn(sizeA) + p3;其中
b - 添加噪声的图像
a - 原始图像
p4 - 方差
p3 - 均值

randn() 的范围是多少?我随机检查,这会产生高于 1 的值,例如 1.85。randn() 的文档没有提及有关范围的任何内容。这很奇怪。

4

2 回答 2

1

是的你是对的。噪声在空间上不相关 (iid),并且与信号也不相关。此外,噪声是相加的,并从零均值单位标准偏差高斯采样,然后针对用户提供的标准偏差进行缩放,并通过用户提供的平均值进行偏移。如果没有指定方差和平均值,则 imnoise 选择零均值和 0.01 方差。

您实际上可以通过在 MATLAB 中执行 >>edit imnoise 查看整个代码。你应该有图像处理工具箱。

关于 randn() - 它从零均值单位标准差高斯生成 iid 样本。高斯的范围是 (-Inf Inf),因此您会看到超出范围 (-1 1) 的值。MATLAB 函数 rand() 给出均匀分布的 (-1 1) 范围内的值。

已编辑:更新答案以包括确切的默认均值和方差值。

于 2013-10-15T02:39:17.177 回答
0

函数 imnoise(I, 'gaussian', mean, variance) 需要在 [0 1] 之间进行归一化的方差。因此,如果您的图像类型为“uint8”,则应将参数方差除以 255²。

另请注意,方差与标准差 sigma 不同。如果要使用 sigma,则应将 (sigma²/255²) 作为方差参数(因为方差 = sigma²)。

于 2014-10-14T20:02:42.870 回答