1

我在 Octave 中使用 imnoise 向二进制图像添加高斯噪声,但我认为我的问题很笼统,也适用于 Matlab。

我是imnoise (A, 'gaussian' [, mean [, var]])这样使用的:

imnoise (A, 'gaussian', 0, var)

var从 0.0 到 1.0 不等。我认为var从 0.0 到 1.0 的变化与从 0% 到 100% 的噪声百分比变化相同。

我对么?因为,在不同的图像尺寸下,它会产生不稳定的噪声水平。与具有相同var.

谢谢

4

1 回答 1

2

如果您查看 imnoise 的来源(Octave 是免费软件,我们鼓励您查看源代码),您会发现高斯噪声是通过以下方式实现的:

## Variance of Gaussian data with mean 0 is E[X^2]
A = A + (a + randn (size (A)) * sqrt (b));

您的图像在哪里A(转换为双精度和范围 [0 1] 后,a是平均值,b是方差。基本上,它从具有指定方差的正态分布中获取随机数,并添加到图像中。

我不确定你所说的噪声百分比是什么意思,但它不应该根据图像大小而改变。如果按百分比表示每个像素上有多少噪声,那么您应该增加方差。如果您的意思是添加了噪声的像素数量,那么您可以制作一个带有百分比的随机布尔矩阵并从噪声图像中进行选择。

mask = rand (size (image)) < 0.5; # percentage of pixels to have noise
noised = image;
noised(mask) = imnoise (image, "gaussian")(mask);

如果按噪声百分比表示“丢失像素”的数量,请尝试使用盐和胡椒选项。

noise = imnoise (image, "salt and pepper", percentage);
于 2013-10-04T13:40:47.137 回答