martes, 4 de enero de 2011

Filtrado de imagen (suavizado) usando OpenCV

Uno de los problemas más comunes que nos encontramos a la hora de analizar imágenes obtenidas desde dispositivos de captura es el ruido de compresión, cuantización y de sensibilidad del sensor de captura.

Uno de los métodos existentes para reducir ese ruido es filtrar espacialmente la imagen (suavizado) aunque ello provoque pérdida del detalle de la imagen.

Realizaremos tres ejemplos usando un filtro lineal gausiano (CV_GAUSSIAN) con unos tamaños de 1x9 (filtro de suavizamiento vertical), 9x1 (suavizamiento horizontal) y 9x9 (suavizamiento normal).

La función que realiza el filtro de suavizado de imagen en OpenCV es cvSmooth.

El código fuente del ejemplo es:


El resultado de suavizar horizontalmente la imagen elimina la mayoría del ruido producido por la emisión en el aire de señales de televisión al tiempo que se pierde la definición de las imágenes en forma de columnas verticales.

Tras suavizar verticalmente la imagen se elimina el granulado debido a cuantización y codificación en muchas webcams (observar cómo prácticamente ha desaparecido el ruido en la imagen superior derecha) pero se pierde la definición de las imágenes en forma de filas horizontales (ver cómo prácticamente desaparecen las rayas del jersey).

El mejor resultado de obtiene al filtrar horizontal y verticalmente la imagen, pero al mismo tiempo es cuando se pierde mayor detalle de la imagen.

El resultado obtenido tras ejecutar el código de ejemplo es:
Captura de imagen con OpenCV

No hay comentarios:

Publicar un comentario