高斯噪声,MATLAB

Gaussian noise,MATLAB

objective是在一幅图像上添加零均值方差400的加性高斯噪声

例如,如果我想添加零均值和方差 0.5 的加性高斯噪声,我可以使用以下两种方法之一:

1)Matlab中的imnoise命令:

                 Noisyimg=imnoise(I,'gaussian',0,0.5) 

我是哪里的形象 其中添加了噪声,Noisyimg 是噪声图像。

2) 创建一个取自正态分布的随机数矩阵 通过使用 randn 指定的均值和标准差 命令。

       noisemat= a*randn(size(I))+ b;  where a=standard deviation and b=mean
       Noisyimg=noisemat+I;                   

因此,对于零均值和 0.5 的方差,

      noisemat=sqrt(0.5)*randn(size(I))+0; 

自标准差 是方差的平方根。

但是,当我尝试应用上述两种方法来获得具有零均值和 400 方差的加性高斯噪声的噪声图像时,我最终得到了难以辨认的图像。例如,使用方法二,

      noisemat=sqrt(400)*randn(size(I))+0; 
      Noisyimg=noisemat+I;

我知道,生成的噪声图像与我应该 obtaining.This 的实际噪声图像相去甚远,因为我有我应该获得的实际噪声输出的图片。我在执行命令时是否犯了任何错误,或者我是否遗漏了一些关键点。 我附上了我试图添加高斯噪声的原始图像和添加噪声后获得的图像。
original image(I) Noisyimg

任何帮助将不胜感激!!

可能有两个问题: 1. 动态范围或原始图像。如果它是 [0 1] 那么只有将方差为 400 的正态分布的值相加才会产生大部分噪声才有意义。 2. 如果图像是 uint8 或 uint 16,添加 double 可能会产生不良影响。在添加噪声之前尝试将图像转换为两倍:

 Noisyimg=noisemat+double(I);

所以,我终于得到了我看得很远的结果。希望对您有所帮助:)

关键在于要添加的高斯噪声的方差也必须相对于要添加到的图像的范围进行缩放。原始图像的类型为 uint8。最初,它被转换为范围为 [0 1] 的双精度类型。

      I=im2double(imread('chipset1.tif'));
      figure;imshow(I);title('original image');

现在,在尝试添加 400 的高斯噪声时出现了问题。最初,我尝试添加如下:

       Noisyimg=imnoise(I,'gaussian',0,400) 

但是,事实证明方差必须先缩放才能使用。

缩放比例如下:

方差= (标准差)^2/(255)^2

因此,对于 400 的方差,标准偏差为 20,因此,缩放比例:

          var=(20)^2/(255)^2;%(since the image was of uint8 type)

          Noisyimg=imnoise(I,'gaussian',0,var)
          figure;imshow(Noisyimg);

注意 imnoise 的方差参数的变化。这种相对缩放确保输出的噪声图像是正确的并且在范围内。

方法二也可以这样做:

          noisemat=(sqrt(var))*randn(size(I))+0;
          Noisyimg=noisemat+I;
          figure;imshow(Noisyimg);

作为旁注,这个将方差为 400 的高斯噪声添加到灰度图像的问题是可用的,可以在 Rafael C.Gonzalez 和 Richard E.Woods 的数字图像处理教科书中参考,第 3 版,第五章,示例 5.2。请注意,该示例中的原始图像也在这里以及我发布的问题中使用,但我没有得到所需的输出。