Создание изображения с шумом и устранение шума с помощью randg Gamma Law в Matlab?
Я хочу добавить Multiplicative Gamma Noise к изображению, используя функцию "randg" в Matlab, и удалить этот шум. Мы должны помнить, что шум должен иметь среднее значение 1 и уровень 4. Он должен следовать закону гамма (с функцией распределения вероятности гамма-излучения). Изображение после добавления шума становится
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.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 для удаления шума.