如何使用matlab函数添加特定数量的高斯或盐和胡椒噪声?



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

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

高斯噪声 => 西格玛 = 10

盐和胡椒噪音 => 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的零均值高斯噪声。

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

高斯噪声 => 西格玛 = 10

盐和胡椒噪音 => p = 20% sp

使用不同的参数,因为两种类型的噪声表征不同:

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

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

    >> 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*图像西格玛的高斯噪声:

  >> 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])

最新更新