这个问题对其他人来说可能非常愚蠢,但对我来说这是非常困难的。
您好,我是 MATLAB 的初学者,我最近正在阅读一篇论文,其中我们必须以下列方式在图像中添加噪音。
高斯噪声=> sigma = 10
Salt&辣椒噪音=> p = 20% sp
我知道用于添加噪声的 MATLAB 函数,我们使用imnoise()
函数。
noise_image = imnoise(input_image, 'salt & pepper', gaus_val)
将添加盐和&胡椒噪音和
noise_image = imnoise(input_image, 'gaussian', 0 , salt_pepper_val);
将添加方差salt_pepper_val
的ZERO-MEAN高斯噪声。
现在我的问题是使用imnoise()函数如何添加以下噪音量。换句话说,对于gaus_val和salt_pepper_val的值,我将得到量sigma = 10%,20%,.....的高斯噪声和20%的盐和胡椒噪声,30%....... ........
高斯噪声=> sigma = 10
Salt&辣椒噪音=> p = 20% sp
答案 0 :(得分:9)
使用不同的参数,因为两种类型的噪声的特征不同:
高斯噪声会破坏整个图像,如果它是白色(即没有空间协方差),零均值(平均来说它不会使图像变亮或变暗),那么它完全由噪声幅度西格玛定义。如果您阅读www.mathworks.com/help/images/ref/imnoise.html文档,那么您会看到您可以同时指定均值和方差(sigma * sigma - 如果sigma = 10则方差= 100)。然后,您可以使用以下方法添加sigma 10的噪音:
>> noise_image = imnoise(input_image, 'gaussian', 0 , 100);
盐和胡椒噪声是图像中的白色(盐)和黑色(胡椒)斑点,即它们不影响每个像素。 sp是被破坏的图像的百分比(默认为5%或0.05),因此sp = 20%= 0.2表示5个像素中的1个已损坏:
>> noise_image = imnoise(input_image, 'salt & pepper', 0.2);
完全如帮助页面所述。
编辑:请注意imnoise()
用于强度介于0和1之间的图像,并且范围[0,1]之外的值会被剪裁 - 方差可能不是您指定的值。 / p>
你也可以轻松地做同样的事情而不使用imnoise:
(1)将图像加载为[0,1]灰度:
>> input_image = mean(imread('peppers.png'),3)/256;
(2)添加高斯噪音0.1 *图像的sigma:
>> image2 = randn(size(input_image));
>> image2 = input_image+image2*0.1*std(input_image(:))/std(image2(:));
(3)在20%的像素中添加s& p噪音:
>> image3 = input_image;
>> li=randperm(length(image3(:)));
>> image3(li(1:(end/5)))=1;
>> image3(li(1:(end/10)))=0;
(4)并排显示:
>> imagesc([input_image image2 image3])