viernes, 11 de febrero de 2011

Análisis del flujo de movimiento en OpenCV

Vamos a dar un salto brusco en la línea de aprendizaje para llegar al análisis del flujo de movimiento usando la librería de visión artificial OpenCV.

En este ejemplo (algo más complejo que los anteriores) usaremos tres imágenes temporales, el fotograma actual en color sobre el que dibujaremos líneas que representarán el flujo de movimiento y una copia del fotograma anterior y actual en escala de grises, y dos imágenes de trabajo para las dos pirámides necesarias para la implementación piramidal desarrollada por Jean-Yves Bouguet del algoritmo iterativo de seguimiento de características de imagen de Lucas-Kanade.

La función usada es cvCalcOpticalFlowPyrLK.

Tiene como parámetros de entrada los dos fotogramas sobre los que deseamos estudiar el flujo de movimiento (en escala de grises), las dos imágenes temporales (pirámides), una serie de puntos sobre los que deseamos averiguar el flujo de movimiento, el vector de movimiento resultante y el criterio de parada.

El código de ejemplo es (le faltan unos retoques):


Se puede experimentar con diversos criterios de parada (número máximo de iteraciones y error permitido). Si se alcanza el número máximo de iteraciones sin haber llegado a un resultado que se ajuste al error deseado la característica será marcada como no calculada. Esto suele ocurrir, sobre todo, cuando se trabaja con zonas de color liso o durante movimientos bruscos en los que el emborronado de movimiento de la cámara (o webcam) suaviza los detalles de la imagen haciéndolos irreconocibles desde el fotograma anterior.

Por otro lado, os recuerdo que una gran mayoría de webcams entregan los fotogramas en formato JPEG, por lo que para evitar que los artefactos cuadriculados de la compresión JPEG estorben en el análisis de movimientos debe usarse una apertura superior a 16 pixeles.

No hay comentarios:

Publicar un comentario