Para la realizacin del proyecto era necesaria la implementacin de algoritmos de deteccin de movimiento y seguimiento del mismo, por ejemplo al tener un fondo definido es necesario detectar objetos que en subsecuentes cuadros de video sean el mismo objeto para despus poder contarlos. Uno de los algoritmos ms conocidos actualmente para seguimiento se conoce como Flujo ptico, basado en el algoritmo diseado por Lucas y Kanade [19] y [20], este tiene como objetivo encontrar los mejores puntos en los que para una matriz de auto correlacin de las segundas derivadas tengan Eigen valores altos, como las Esquinas, estos tienen la caracterstica de ser encontrados ms fcilmente en imgenes posteriores en video. Estos puntos en esencia significan la presencia de una textura o un borde en dos direcciones centrado a ese punto. El seguimiento de estos puntos hace que el algoritmo no dependa de la forma de los objetos a seguir sino la presencia de estos puntos en la imagen, que intentan garantizar la presencia de objetos sin la necesidad de detectarlos. En procesamiento de imgenes se tiene la caracterstica que la imagen est cuantizada y las coordenadas de los pixeles son valores enteros y se requiere una mayor resolucin para extraer parmetros geomtricos de la imagen, una calibracin precisa de la imagen o la deteccin precisa de puntos para hacer seguimiento. Para solucionar este inconveniente se trabaja con subpixelado, para poder realizar mediciones entre pixeles. Existe una implementacin en los ejemplos de OpenCV llamado lkdemo, que se basa en las siguientes funciones: cvGoodFeaturesToTrack, que calcula los eigenvalores de cada pxel y tiene como resultado un arreglo de puntos donde se encuentran los mayores eigenvalores, que son puntos ptimos a ser seguidos; cvFindCornersSubPix, permite tener los valores entre pixeles de las verdaderas Esquinas de la imagen; y cvCalcOpticalFlowPyrLK(), que implementa el algoritmo de Lucas Kanade de manera piramidal, ya que busca ampliar la ventana local entre imgenes para poder referenciar el punto a seguir. En esta implementacin se realiza el clculo de los puntos a ser seguidos mostrando la manera como se mueven estos puntos a medida que se mueven los objetos en la imagen, como se muestra en la Figura 1 (A). Una particularidad de este es que no posee una actualizacin de estos puntos de manera automtica, ya que los puntos se mueven acorde al movimiento del objeto, dejando una zona sin puntos de inters, como se observa en la Figura 1 (B).
Figura 1 Ejemplo lkdemo de OpenCV Esta implementacin no era aplicable para el proyecto, ya que se necesita la realizacin del seguimiento del objeto pero de manera automtica, de tal manera que fue necesario modificar esta implementacin para las necesidades del proyecto. Las modificaciones que se realizaron fueron las siguientes: Realizar la seleccin de puntos de manera automtica Aumento de nmero de puntos de inters Referenciar la trayectoria de los puntos de inters cuadro a cuadro. Intentar unir los puntos pertenecientes a un solo vehculo Para la seleccin de puntos de manera automtica se utilizaron las funciones: cvGoodFeaturesToTrack, cvFindCornersSubPix y cvCalcOpticalFlowPyrLK() en cada uno de los cuadros de video y se alternaban los puntos de inters de cuadro a cuadro. Para el aumento de nmero de puntos de inters se modifica un parmetro de entrada de estas funciones que permite tener un nmero mayor de puntos de inters, para poder abarcar ms objetos mviles en el cuadro de video. Para la referenciacin de la trayectoria de los puntos de inters, al tener los puntos de inters cuadro a cuadro se realizaba la asignacin uno a uno de estos puntos. Una imagen de muestra de los resultados de estas modificaciones se pueden observar en la (Figura 2).
Figura 2 Ejemplo de compilacin de algoritmo de flujo ptico Se puede observar que el algoritmo presenta la trayectoria de los puntos de inters en azul, pero hay puntos que cumplen con las propiedades de puntos de inters pero no pertenecen a los objetos mviles, como se muestra en la Figura 3.
Figura 3 Ejemplo de compilacin de algoritmo de flujo ptico con problemas de movimiento Esto se debe a que este algoritmo funciona con caractersticas propias de la imagen cuadro a cuadro, usando puntos ms no se preocupa por detectar al objeto, que es la finalidad de este proyecto. Una de las ventajas que posee este algoritmo es que se puede realizar un estimado de la velocidad de modo directo ya que se puede interpolar la trayectoria de cada uno de esos puntos de inters lo que podra facilitar la agrupacin de puntos a un vehculo determinado, pero dos o ms objetos que posean velocidades similares sern tomados como uno solo como se ve en la (Figura 4).
Figura 4 ejemplo de un caso en el que los vehculos tienen velocidades similares Al depender de informacin de movimiento, este algoritmo es susceptible a fallos en ambientes de poca velocidad (Figura 5 Figura 7 ) o con objetos detenidos (Figura 6)
Figura 5 vehculos movindose a una velocidad similar y muy baja
Figura 6 Ejemplo de movimiento en un semforo, en donde los carros se encuentran detenidos, pero solo una moto se mueve
Figura 7 vehculos arrancando en un semforo Las condiciones ideales que se b de la Figura 8, donde los puntos uscan en este algoritmo son las de inters se encuentran condicionados a la forma de los objetos.
Figura 8 condiciones ptimas de funcionamiento Este algoritmo se puede utilizar pueda utilizar una funcin de La idea del proyecto es detectar vehculos y realizar el seguimiento, para el posterior conteo y no mientras exista movimiento y se agrupacin de parmetros como cvSeqPartition para la posterior deteccin de los objetos, encontramos que este algoritmo fuera el mejor para este objetivo sin embargo. Si se utiliza una combinacin entre los resultados de esta implementacin con la deteccin de objetos propuesta por nosotros como una forma de asignar puntos a objetos, esta sera una buena opcin para realizar mediciones como velocidad de manera mas precisa.