2015-04-20 58 views
-3

我想在Matlab中使用“randg”函数将乘法伽玛噪声添加到图像中,并去除该噪声。我们必须记住,噪声应该有平均值1和4级。它应该遵循Gamma律(使用Gamma概率分布函数)。 加入噪音后的图像变成在Matlab中使用randg伽玛定律创建噪声图像和消除噪声?

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

@unique_CODER你可以试试我的解决方案,让我知道它是否解决了这个问题? – krisdestruction

回答

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

+0

但是,如果我使用'randn'函数,那么噪声是否遵循伽玛定律?我如何获得平均水平和水平? –

+0

@unique_CODER如果你想使用'randg'作为gamma法则,那么你可以使用它。我的意思是,'0.4'太强大了,导致它饱和。检查我的'randg'结果。 – krisdestruction