在 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。
我想在 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。