Как убрать гауссовский шум с изображения в MATLAB?

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

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

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

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

3 ответа

Решение

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

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

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

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

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

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

  • Срединный шумоподавляющий
  • Двусторонний фильтр
  • Сопоставление с шаблоном

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

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

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

Другие вопросы по тегам