Удаление шума с изображения в MATLAB

Я использую средний геометрический фильтр для удаления шума вместо медианного фильтра, поскольку в первом случае качество изображения ухудшается. приведенный ниже код является частью m-файла для удаления шума.

fname = getappdata(0, 'fname');
[a, map] = imread(fname);
x = ind2rgb(a, map);
b = im2double(x);
w=fspecial('gaussian',[3,3]);
geom=exp(imfilter(log(b),ones(3,3),'replicate')).^(1/3/3);
fname=imfilter(b,w,'replicate');
axes(handles.axes1);
imshow(fname);

Если я нажму кнопку с названием «Удалить шум», приведенный выше код будет выполнен независимо от качества / свойства изображения. В том смысле, что даже при отсутствии шума изображение будет подвергнуто фильтрации.

Мой вопрос, есть ли способ определить, присутствует ли шум или нет, чтобы в тот момент, когда я нажал кнопку, если на изображении нет шума, он должен автоматически отображать сообщение с надписью «НЕТ ШУМА ДЛЯ УДАЛЕНИЯ».


person Chethan    schedule 01.08.2013    source источник


Ответы (1)


Нет прямого способа определить, является ли изображение зашумленным или нет.

Однако вы можете сравнить результирующее изображение fname с входным изображением b таким образом, чтобы, если их разница ниже определенного порога, можно было решить, что операция шумоподавления не изменила изображение эффективно и в исходном изображении не так много шума. изображение вроде:

threshold_ratio = 0.2; % to be decided experimentally

difference_ratio = sum(sum((fname - b).^2)) / sum(sum(b.^2));

if difference_ratio < threshold_ratio

   disp('NO NOISE TO REMOVE');

end
person fatihk    schedule 01.08.2013