2011-12-23 14 views
5

Próbuję usunąć szum Gaussa z obrazu. Dodałem ten szum samodzielnie, używając:Jak usunąć szum Gaussa z obrazu w MATLAB?

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

Muszę teraz usunąć hałas za pomocą własnego filtra lub przynajmniej go zmniejszyć. Teoretycznie, jak rozumiem, użycie macierzy splotowej o numerze ones(3)/9 powinno pomóc i powinno być lepsze wykorzystanie macierzy splotu Gaussa, takiej jak [1 2 1; 2 4 2; 1 2 1]/9 lub fspecial('gaussian',3). Ale tak naprawdę nie robią tak dobrze: enter image description here

Czy brakuje mi czegoś ważnego? Muszę użyć splotu, nawiasem mówiąc.

+3

Filtr uśredniający (twój "jedyny" filtr) jest nieprawidłowym filtrem dolnoprzepustowym. Gaussian jest lepszym LPF. Powód, dla którego uzyskujesz zniekształcenie na 1 2 1; 2 4 2; Filtr 1 2 1 polega na tym, że nie jest prawidłowo normalizowany. –

+1

Masz rację co do '1 2 1; 2 4 2; 1 2 1'. Powinienem był podzielić przez 16, a nie przez 9. Mimo to, nie działa zbyt dobrze: [link] (http://img408.imageshack.us/img408/6176/resm.png) – shwartz

Odpowiedz

10

Nie brakuje niczego! Oczywiście nie można całkowicie usunąć hałasu. Można próbować różnych filtrów, ale wszystkie z nich będą miały kompromis:

więcej hałasu + Mniej rozmycie VS mniej hałasu + więcej rozmycie

To staje się coraz bardziej oczywiste, jeśli pomyśleć o tym w w następujący sposób:

Każda metoda oparta na splotach zakłada, że ​​wszyscy sąsiedzi mają ten sam kolor.

Ale w rzeczywistości istnieje wiele obiektów na obrazie. Tak więc po zastosowaniu splotu powodujesz rozmycie, miksując piksele z różnych sąsiednich obiektów.

Są bardziej wyrafinowane metody denoising jak:

  • Mediana denoising
  • filtr dwustronna pasującym
  • Wzór odszumiania oparciu

nie są one za pomocą tylko splot. Przy okazji, nawet oni nie mogą zrobić magii.

+0

Dzięki. Widziałem ten kompromis podczas wdrażania i wprowadziłem również medianę odszumiania, która działa świetnie na hałas z solą i pieprzem, ale nie za bardzo na hałas Gaussa. Mimo to, jak znaleźć cienką granicę między obrazem, który jest zbyt głośny, ale ostry, a obrazem, który jest zbyt rozmazany, ale z niewielkim szumem? Mam kilka parametrów do gry: Wymiary macierzy (małe, duże, kwadratowe, prostokątne) i wartości macierzy (Gaussa, uniform, inne dziwne ustawienia). Czy naprawdę nic nie mogę zrobić z użyciem splotu? – shwartz

+1

@shwartz, niestety, nie. Potrzebujesz przynajmniej jakiejś logiki, która wykryje krawędzie, rogi itp. I odpowiednio je potraktuje. Który nie jest ** ** ** splotem z definicji. –

+0

Właściwie to zachęcające, ponieważ zadaniem jest użycie splotu (wyłącznie, jak rozumiem). Jedynym problemem jest znalezienie "dobrej" metody i wiedzieć, który wynik jest najlepszy. Czy istnieje sposób na określenie jakości wyniku? Na przykład, czy jakiś rodzaj odległości matrycy od oryginalnego obrazu bez szumów będzie dobrym sposobem na określenie jakości mojego wyniku? Czy istnieje inna popularna metoda? – shwartz

0

Pomyliłeś się z macierzą splotu Gaussa. Musisz podzielić go przez 16, a nie 9, aby suma była równa 1. Dlatego wynikowy obraz wykorzystujący tę matrycę jest tak jasny.

+0

Dzięki, wiem. Ktoś już skomentował poniżej pierwotnego wpisu. – shwartz

1

można użyć wiener2, który działa najlepiej, gdy szum jest stałym napięciem ("białym"), takim jak szum Gaussa.