Как убрать гауссовский шум с изображения в MATLAB? - PullRequest
5 голосов
/ 23 декабря 2011

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

nImg = imnoise(img,'gaussian',0,0.01);

Теперь мне нужно удалить шум, используя мой собственный фильтр, или хотя бы уменьшить его.Теоретически, как я понимаю, использование матрицы свертки ones(3)/9 должно помочь, а использование матрицы свертки Гаусса, такой как [1 2 1; 2 4 2; 1 2 1]/9 или fspecial('gaussian',3), должно быть лучше.Тем не менее, они действительно не справляются с этой задачей: enter image description here

Я что-то упустил?Кстати, мне нужно использовать свертку.

Ответы [ 3 ]

10 голосов
/ 23 декабря 2011

Вы ничего не пропустили!Очевидно, вы не можете полностью удалить шум.Вы можете попробовать разные фильтры, но все они будут иметь компромисс:

Больше шума + Меньше размытия VS Меньше шума + Больше размытия

Это становится более очевидным, если вы думаете об этом следующим образом:

Любой метод на основе свертки предполагает, что все соседи имеют один и тот же цвет.

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

Существуют более сложные методы шумоподавления, такие как:

  • Срединное шумоподавление
  • Двустороннийфильтр
  • Шумоподавление на основе сопоставления с образцом

Они не используют только свертку.Кстати, даже они не могут творить магию.

1 голос
/ 07 декабря 2013

Вы можете использовать wiener2, который работает лучше всего, когда шум представляет собой аддитивный шум постоянной мощности ("белый"), такой как гауссов шум.

0 голосов
/ 22 июня 2013

Вы ошиблись с матрицей свертки Гаусса.Вам нужно разделить его на 16, а не на 9, чтобы его сумма равнялась 1. Вот почему полученное изображение с использованием этой матрицы получается таким светлым.

...