Как добавить 5% -ный гауссовский шум к изображению
Давайте определим это:
Число "процент шума" представляет процентное отношение стандартного отклонения белого гауссова шума к сигналу для всего изображения.
Предположим, у меня есть изображение мозга, я хочу добавить 5% гауссовский шум ко всему изображению (тканям) с помощью кода Matlab:
I=imread('brain91.png'); I=rgb2gray(I);I=double(I);
I = I - min(I(:));
I = I / max(I(:));
%// Add noise to image
v = 0.05*var(I(:));
I_noisy = imnoise(I, 'gaussian', 0, v);
I_noisy=255.*I_noisy;
subplot(121);imshow(I,[]);subplot(122);imshow(I_noisy,[])
На рисунке показано исходное изображение (слева) и изображение шума справа. Считаете ли вы, что моя реализация верна для приведенного выше определения? - (около 5% гауссовского шума при значении v = 0,05*var(I(:)))
2 ответа
И Андер Бигури, и Дасдингонсин имеют правильные утверждения. Ваш код, безусловно, правильно добавляет гауссовский шум к изображению, но убедитесь, что вы учитываете фактическую дисперсию, возводя в квадрат 0.05
в вашем var
расчет.
Кроме того, вы можете использовать std
вместо var
и возвести в квадрат все вычисления, чтобы получить то же самое:
I=imread('brain91.png'); I=rgb2gray(I);I=double(I);
I = I - min(I(:));
I = I / max(I(:));
%// Add noise to image
%v = (0.05^2)*var(I(:)); %// Option #1
v = (0.05*std(I(:)))^2; %// Option #2
I_noisy = imnoise(I, 'gaussian', 0, v);
I_noisy=255.*I_noisy;
subplot(121);imshow(I,[]);subplot(122);imshow(I_noisy,[])
Ваш код выглядит правильно. Я использовал пакеты слайсера для добавления или удаления шума. Вы можете попробовать сравнить свои результаты с этим: