2015-04-20 3 views
-3

Я хочу добавить Мультипликативный гамма-шум к изображению с помощью функции «randg» в Matlab и удалить этот шум. Мы должны иметь в виду, что шум должен иметь значение 1 и уровень 4. Он должен следовать закону Гамма (с функцией распределения вероятности гамма). Изображение после добавления шума будетСоздание шумового изображения и снятие шума Использование randg Gamma Law в Matlab?

f = u * v; где f = шумное изображение, u = исходное изображение, v = шумное изображение.

гамма закон: г.в. (v) = L^L/(Γ (L)) V^(Л-1) ехр (-LV) 1_ (v≥0)

где Ь уровень шума и 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

Noisy изображения с помощью 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' для гамма-закона, вы можете его использовать. Моя точка зрения заключается в том, что '0.4' слишком ПУТЬ и заставляет его насыщаться. Проверьте мои результаты для 'randg'. – krisdestruction