0

这个问题对其他人来说可能很愚蠢,但对我来说却非常困难。

您好,我是MATLAB的初学者,我最近正在阅读一篇论文,我们必须以下列方式在图像中添加噪声。

高斯噪声 => sigma = 10

椒盐噪声 => p = 20% sp

我知道用于添加噪声的MATLABimnoise()函数,我们使用函数。

noise_image = imnoise(input_image, 'salt & pepper', gaus_val)

会增加椒盐噪声和

noise_image = imnoise(input_image, 'gaussian', 0 , salt_pepper_val);

将添加零均值高斯方差噪声salt_pepper_val

现在我的问题是使用 imnoise() 函数如何添加以下噪声量。换句话说,对于 gaus_val 和 salt_pepper_val 的值,我将得到 sigma = 10%、20%、......的量的高斯噪声和 20%、30%......的量的椒盐噪声。 ...........

高斯噪声 => sigma = 10

椒盐噪声 => p = 20% sp

4

1 回答 1

9

使用不同的参数是因为两种类型的噪声具有不同的特征:

  1. 高斯噪声破坏了整个图像,如果它是白色的(即没有空间协方差),均值为零(平均而言,它不会使图像变亮或变暗),那么它完全由噪声幅度 sigma 定义。如果您阅读文档 www.mathworks.com/help/images/ref/imnoise.html,那么您会看到您可以同时指定均值和方差(sigma*sigma -- 如果 sigma = 10,则方差 = 100)。然后,您可以使用 sigma 10 添加噪声:

    >> noise_image = imnoise(input_image, 'gaussian', 0 , 100);
    
  2. 椒盐噪声是图像中的白色(盐)和黑色(胡椒)点,即它们不会影响每个像素。sp 是图像损坏的百分比(默认为 5% 或 0.05),因此 sp = 20% = 0.2 表示 5 个像素中有 1 个被损坏:

    >> noise_image = imnoise(input_image, 'salt & pepper', 0.2);
    

完全按照帮助页面上的描述。

编辑:请注意imnoise()用于强度在 0 和 1 之间的图像,并且 [0,1] 范围之外的值被剪裁——方差可能不是您指定的。

您也可以在不使用 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% 的像素中添加标准普尔噪声:

  >> 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])
于 2013-09-30T12:57:14.843 回答