使用Matlab中的randg Gamma定律创建噪声图像并消除噪声?

时间:2015-04-20 15:39:17

标签: matlab image-processing gamma gamma-distribution

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

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

1 个答案:

答案 0 :(得分: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);

这些是结果。正常图像。

normal img

使用randg的嘈杂图像。

noisy img randg

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

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

使用randn的嘈杂图像。

noisy img randn

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