我想在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 :(得分: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
的嘈杂图像。
如果你想改用randn,你可以改用这行代码。
noisyimg = imgdob + randn(size(imgdob)) .* 0.2;
使用randn
的嘈杂图像。
关于降噪,请参阅Matlab's tutorial for noise removal。