2011-12-23 41 views
5

Estoy tratando de eliminar un ruido gaussiano de una imagen. He añadido el ruido a mí mismo usando:¿Cómo eliminar el ruido gaussiano de una imagen en MATLAB?

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

ahora tengo que eliminar el ruido usando mi propio filtro, o al menos reducirlo. En teoría, según tengo entendido, usar una matriz de convolución de ones(3)/9 debería ayudar y usar una matriz de convolución gaussiana como [1 2 1; 2 4 2; 1 2 1]/9 o fspecial('gaussian',3) debería ser mejor. Sin embargo, realmente no hacen tan bien el truco: enter image description here

¿Falta algo importante? Necesito usar convolución, por cierto.

+3

El filtro de promediado (el filtro "unos") es un filtro de paso bajo incorrecto. El gaussiano es un LPF mejor. La razón por la que está obteniendo distorsión en el 1 2 1; 2 4 2; 1 2 1 filtro es porque no está normalizado correctamente. –

+1

Tiene razón sobre el '1 2 1; 2 4 2; 1 2 1'. Debería haber dividido por 16 y no por 9. Aun así, no está funcionando demasiado bien: [enlace] (http://img408.imageshack.us/img408/6176/resm.png) – shwartz

Respuesta

10

¡No le falta nada! Obviamente, no puede eliminar el ruido por completo. Puede probar diferentes filtros, pero todos ellos tendrá una solución de compromiso:

Más Ruido + Menos desenfoque VS Menos Ruido + Más desenfoque

Se hace más evidente si se piensa en esto en de la siguiente manera:

Cualquier método basado en convolución asume que todos los vecinos tienen el mismo color.

Pero en la vida real, hay muchos objetos en la imagen. Por lo tanto, cuando aplicas la convolución causas desenfoque mezclando píxeles de diferentes objetos adyacentes.

hay métodos de eliminación de ruido más sofisticados como:

  • eliminación de ruido mediana de eliminación de ruido basado
  • filtro bilateral
  • patrón coincidente

No sólo se están utilizando convolución. Por cierto, incluso ellos no pueden hacer magia.

+0

Gracias. He visto esa compensación durante la implementación y también he implementado la reducción de ruido media, que funciona muy bien para el ruido de sal y pimienta, pero no tanto para el ruido gaussiano. Aún así, ¿cómo puedo encontrar el límite fino entre una imagen que es demasiado ruidosa pero nítida y una imagen demasiado borrosa pero con un poco de ruido? Tengo algunos parámetros para jugar: las dimensiones de la matriz (pequeña, grande, cuadrada, rectangular) y los valores de la matriz (gaussiana, uniforme, alguna otra configuración extraña). Entonces, ¿realmente no hay nada decente que pueda hacer con solo convolución? – shwartz

+1

@shwartz, desafortunadamente, no. Necesita al menos algún tipo de lógica que detecte los bordes, las esquinas, etc., y los tratará en consecuencia. Que no es ** solo ** convolución por definición. –

+0

En realidad, eso es algo alentador ya que la tarea es usar convolución (únicamente, según tengo entendido). El único problema es encontrar un "buen" método y saber cuál es el mejor resultado. ¿Hay alguna manera de cuantificar la calidad del resultado? Por ejemplo, ¿será una buena forma de determinar la calidad de mi resultado algún tipo de distancia de la matriz de la imagen sin ruido original? ¿O hay algún otro método común? – shwartz

0

Cometió un error con la matriz de convolución gaussiana. Necesitas dividirlo entre 16, no 9, de modo que su suma sea igual a 1. Es por eso que la imagen resultante que usa esa matriz es tan liviana.

+0

Gracias, lo sé. Alguien ya comentó debajo de la publicación original. – shwartz

1

puede usar wiener2 que funciona mejor cuando el ruido es constante-potencia ("blanco") aditivo ruido, como el ruido gaussiano.

Cuestiones relacionadas