Как убрать гауссовский шум с изображения в 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. Вот почему полученное изображение с использованием этой матрицы получается таким легким.