我在Octave中使用imnoise将高斯噪声添加到二进制图像中,但我认为我的问题足够普遍适用于Matlab。
我正在使用imnoise (A, 'gaussian' [, mean [, var]])
这样:
imnoise (A, 'gaussian', 0, var)
我将var
从0.0变为1.0。我认为从0.0到1.0变化var
与从0%到100%变化的噪声百分比相同。
我说错了吗?因为,在不同的图像尺寸中,它会产生不同程度的噪声。与具有相同var
的较大图像相比,较小的图像将显得较少噪声。
由于
答案 0 :(得分:1)
如果你看一下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
是方差。基本上它需要随机数来自具有指定方差的normal distribution,并添加到图像中。
我不确定您的噪音百分比是什么意思,但它不应该根据图像大小而改变。如果按百分比表示每个像素上的噪声多少,则应增加方差。如果你的意思是添加了噪声的像素数量,那么你可以用百分比制作一个随机bool矩阵并从噪声图像中选择。
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);