-3

我想使用 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);

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

4

1 回答 1

0

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.

嘈杂的 img randg

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

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

嘈杂的图像使用randn.

嘈杂的 img randn

至于降噪,请参考Matlab 的降噪教程

于 2015-04-21T02:50:02.060 回答