在 Matlab 中使用 randg 伽马定律创建噪声图像并去除噪声?

Creating a Noisy Image and Removing Noise Using randg Gamma Law in Matlab?

我想在 Matlab 中使用 "randg" 函数将乘法伽马噪声添加到图像并去除该噪声。我们必须记住,噪声应该具有均值 1 和级别 4。它应该遵循 Gamma 定律(具有 Gamma 概率分布函数)。 添加噪声后的图像变为

f=u*v; 其中 f=噪声图像,u=原始图像,v=噪声图像。

伽马定律是: gv(v)=L^L/(Γ(L)) v^(L-1) exp(-Lv) 1_(v≥0)

其中 L 是噪音水平,v 是噪音。

这是我试过的代码:

  img = imread('lena.png');
  img1 = img./ 255;
  imgdob = double(img1);
  noisyimg = imgdob + randg(1,size(imgdob)) .* 0.4;
  noisyimg(noisyimg< 0) = 0;
  noisyimg(noisyimg> 1) = 1;
  figure,imshow(img);
  figure,imshow(noisyimg);
  imwrite(img, 'lenaOriginal.jpg', 'Quality', 100);
  imwrite(noisyimg, 'lenaNoisy.jpg', 'Quality', 100);

但是我没有得到预期的结果。请给我一个方法。

0.4 非常具有破坏性。如此具有破坏性,以至于它会强制将阈值设为 0 或 1。您应该尝试 0.2。此外,如果您正在寻找正态分布噪声,则应使用 randn 而不是 randg。下面的代码在这里。

请注意,我的计算机上没有 sexylena.png,因此我必须使用 bag.png。

imgdob = im2double(imread('bag.png'));
noisyimg = imgdob + randg(1,size(imgdob)) .* 0.15;
noisyimg(noisyimg< 0) = 0;
noisyimg(noisyimg> 1) = 1;
figure,imshow(imgdob);
figure,imshow(noisyimg);
imwrite(imgdob, 'lenaOriginal.jpg', 'Quality', 100);
imwrite(noisyimg, 'lenaNoisy.jpg', 'Quality', 100);

这些是结果。正常图像。

噪声图像使用 randg

如果您想改用 randn,可以改用这行代码。

noisyimg = imgdob + randn(size(imgdob)) .* 0.2;

使用 randn 的噪点图像。

关于降噪,请参考Matlab's tutorial for noise removal