2011-12-23 39 views
5

Sto provando a rimuovere un rumore gaussiano da un'immagine. Ho aggiunto il rumore me stesso usando:Come rimuovere il rumore gaussiano da un'immagine in MATLAB?

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

io ora bisogno di togliere il disturbo usando il mio proprio filtro, o almeno ridurlo. In teoria, come ho capito, l'uso di una matrice di convoluzione di ones(3)/9 dovrebbe aiutare e utilizzare una matrice di convoluzione gaussiana come [1 2 1; 2 4 2; 1 2 1]/9 o fspecial('gaussian',3) dovrebbe essere migliore. Eppure, in realtà non fanno il trucco così bene: enter image description here

Mi manca qualcosa di importante? A proposito, devo usare la convoluzione.

+3

Il filtro di media (il filtro "ones") è un filtro passa-basso non valido. Il gaussiano è un LPF migliore. La ragione per cui stai ricevendo una distorsione sul 1 2 1; 2 4 2; Il filtro 1 2 1 è perché non è normalizzato correttamente. –

+1

Hai ragione riguardo a '1 2 1; 2 4 2; 1 2 1'. Avrei dovuto dividere per 16 e non per 9. Anche così, non funziona troppo bene: [link] (http://img408.imageshack.us/img408/6176/resm.png) – shwartz

risposta

10

Non ti manca nulla! Ovviamente, non è possibile rimuovere completamente il rumore. È possibile provare i filtri differenti, ma tutti avrà un compromesso:

più rumore + Meno mosso VS Meno rumore + Più sfocatura

Diventa più evidente se si pensa di questo il seguente modo:

Qualsiasi metodo basato sulla convoluzione presuppone che tutti i vicini abbiano lo stesso colore.

Ma nella vita reale, ci sono molti oggetti nell'immagine. Pertanto, quando si applica la convoluzione si provoca sfocatura mescolando pixel da diversi oggetti adiacenti.

Non ci sono più sofisticati metodi di denoising come:

  • mediana denoising
  • filtro bilaterale
  • pattern matching denoising basato

non usano solo convoluzione. A proposito, anche loro non possono fare magie.

+0

Grazie. Ho visto questo compromesso durante l'implementazione e ho anche implementato il denoising mediano che funziona perfettamente per il rumore di sale e pepe ma non tanto per il rumore gaussiano. Tuttavia, come posso trovare il limite sottile tra un'immagine troppo rumorosa ma nitida e un'immagine sfocata ma con un po 'di rumore? Ho alcuni parametri con cui giocare: Dimensioni della matrice (piccoli, grandi, quadrati, rettangolari) e valori di matrice (gaussiana, uniforme, qualche altra impostazione strana). Quindi, non c'è davvero nulla di decente che posso fare con la semplice convoluzione? – shwartz

+1

@shwartz, sfortunatamente no. È necessario almeno un tipo di logica che rilevi bordi, angoli, ecc. E li tratterà di conseguenza. Che non è ** solo ** convoluzione per definizione. –

+0

In realtà, questo è un po 'incoraggiante dal momento che il compito è quello di utilizzare la convoluzione (solo, come ho capito). L'unico problema è trovare un metodo "buono" e sapere qual è il risultato migliore. C'è un modo per quantificare la qualità del risultato? Ad esempio, una certa distanza di matrice dall'immagine originale senza rumore sarà un buon modo per determinare la qualità del mio risultato? O c'è qualche altro metodo comune? – shwartz

0

Hai commesso un errore con la matrice di convoluzione gaussiana. Devi dividerlo per 16, non per 9, in modo che la somma sia uguale a 1. Ecco perché l'immagine risultante che usa quella matrice è così leggera.

+0

Grazie, lo so. Qualcuno ha già commentato sotto il post originale. – shwartz

1

è possibile utilizzare wiener2 quale funziona meglio quando il rumore è costante-potere ("bianco") additivi rumore, come il rumore gaussiano.