miércoles, 28 de julio de 2010

Conclusiones y propuestas.

 
En las entradas anteriores se ha intentado hacer una clasificación de las formas de enfrentarse al problema del seguimiento de objetos teniendo en cuenta la condición de que la plataforma desde la que obtenemos las imágenes, no sea estacionaria.

 
Como podemos observar, en todos los estudios realizados, el objetivo final consiste en construir un seguidor de objetos (object tracker), con una serie de fases en común.

 
El propósito de un object tracker, es generar la trayectoria de un objeto a través del tiempo, localizando su posición en cada frame del video y proporcionar la región en la imagen que ocupa el objeto en cada instante.

 
La tarea de detectar el objeto y establecer su correspondencia en los frames, se puede afrontar separada o conjuntamente. En el primer caso, las posibles regiones del objeto en los frames se obtendran mediante un algoritmo de detección de objetos, y después el tracker se encargará de realizar las correspondencias de los objetos a través de los frames. En la segunda opción, ambas acciones se estiman conjuntamente actualizando en cada iteración la localización y la información de la región del objeto del frame anterior.

 
En ambos casos, el objeto tendrá que ser representado usando modelos basados en la apariencia del objeto.

 
Visto de una manera simple, el tracking consistirá en asignar etiquetas consistentes a los objetos en seguimiento en cada uno de los frames del video. Adicionalmente, dependiento del dominio del tracking, el tracker también puede ofrecer información del objeto, como su orientación, forma o area que ocupa. El seguimiento del objetos, puede resultar complicado debido a factores como:

 
- perdida de información debida a la proyección del mundo en 3D a una imagen en 2D
 
- ruido en las imágenes
 
- movimientos complejos del objeto
 
- naturaleza articulada del objeto
 
- oclusiones parciales o totales del objeto
 
- cambios de iluminación en la escena
 
- requerimientos de procesamiento en tiempo real.


 
Si seguimos un proceso ordenado para describir los aspectos a abordar para contruir un tracker, en primer lugar podriamos decir que sería necesario definir una representación adecuada del objeto. Algunas representaciones comunes son representaciones basadas en puntos, formas geométricas primitivas, contornos del objeto o apariencia del objeto.

 
El siguiento aspecto a tener en cuenta sería la selección de carácteristicas usadas como entrada al tracker, como pueden ser el color, los vertices, ... En la mayoría de los algoritmos de tracking, es necesaria una fase de detección de objetos, tanto en el primer frame como en todos los frames. En nuestro caso, esta fase estaría implementada mediante varias técnicas de substracción de fondo. En última instancia sería necesario construir un método de tracking que usará esta información. Uno de los métodos más utilizados, como hemos visto en los estudios analizados en las entradas anteriores, son diferentes implementaciones del filtro de partículas.

 
Fijándonos en el análisis que se ha hecho del campo de lás cámaras en movimiento, observamos que los estudios van enfocados a resolver problemáticas concretas, en entornos concretos, por ejemplo el seguimiento de jugadores en un campo de fútbol, el seguimiento de personas en entornos indoor con unos dispositivos concretos mediante una cámara robotizada, ... Analizando las técnicas, me parece muy costoso implementar y poco fáctible considerar éstas técnicas en la linea que estamos siguiendo hasta ahora.

 
Teniendo en cuenta que solo hemos desarrollado una fase de lo que es el tracking en sí, que sería la fase de la detección de objetos, me gustaría proponer la opción de completar todo un proceso de tracking, tocándo asi cada una de las fases necesarias. Como, según me habeis comentado, no se había tocado el tema del tracking en los pfc, podría tomarse éste como una base para proponer otros estudios en situaciones más concretas. A continuación, hago una propuesta de una linea de avance a seguir si me dais vuestro beneplácito:

 
- Cerrar la fase de técnicas de sustracción de fondo, con una comparativa y un apartado de conclusiones, señalando los pros y contras de cada una de ellas, basándonos en los experimentos realizados.

 
- Considerar e implementar algun filtro para la mejora en la detección de objetos (filtros para eliminar ruido, etc ...)

 
- Implementar algun modelo para representar el objeto detectado, que sirva de entrada al algoritmo de tracking.

 
- Implementar uno o varios algoritmos de tracking, y analizar como se comporta en diferentes condiciones, aplicándolo a diferentes videos, para llegar a conclusiones respecto a su rendimiento y aplicabilidad.

martes, 27 de julio de 2010

Consideraciones respecto a cámaras en movimiento (III)

2.2.1. -
 
Reconocimiento de patrones, como un único clasificador que detecta la persona como un todo.

 
En este caso nos fijamos en un estudio llevado a cabo por Chakravarty , que diseña un método para el tracking y la persecución de una persona mediante un robot móvil, usando dos mecanismos, una cámara fija y un telémetro láser (capaz de medir distancias de forma remota). La cámara tiene una altura que hace que su campo de visión sea básicamente las piernas de la persona.




 
El proceso de detección de las piernas es tarea del dispositivo láser, que se basa en detectarlas como arcos que forman dos ángulos iguales , con un determinado umbral para considerar una detección como una hipótesis valida. Evidentemente, si la persona se encuentra a una distancia determinada (aprox. mas de 4 metros), la detección fallaría.



 
Después de esta detección se llevaría a cabo un modelado de las piernas, haciendo uso de la información de color recuperada a través de la cámara. El modelado consistiría básicamente, en una sustracción de fondo, para extraer las piernas del fondo (con lo que estaríamos partiendo de la premisa de que para la detección el robot tendría que permanecer estático), y después se procedería a una segmentación de las piernas usando un algoritmo basado en histogramas de color .



 
Esta información se usaría para proceder al tracking haciendo uso de un filtro de partículas de una dimensión.

 
Existe otro estudio llevado a cabo por Kai O. Arras, en el que implementa una detección de piernas humanas únicamente analizando la información proveniente de un telémetro láser. La información que genera el láser es información en 2D, que resulta realmente pobre y escasa.




 
Para conseguir que la detección sea satisfactoria, este método hace uso del algoritmo de Adaboost para construir un clasificador fuerte a partir de una serie de características (features). La idea es que las medidas cercanas del dispositivo láser correspondientes a personas, tienen ciertas propiedades geométricas características. La clave sería definir un conjunto de características con significado que englobarán estas propiedades y usar un sistema de aprendizaje supervisado para crear un detector humano. En este caso, se usa el método Adaboost para seleccionar las mejores características y para crear un clasificador basado en las mismas.

 
El algoritmo de Adaboost es ,en realidad, es un clasificador estadístico que consiste en usar un conjunto de clasificadores débiles para formar un clasificador fuerte.

2.2.2. –
 
Un clasificador por partes del cuerpo, siendo la detección de una persona tomada como una constelación de varias partes.

 
En este caso nos centraremos en no solo la detección de una parte del cuerpo humano, sino la detección de la estructura completa del cuerpo humano, basada en la detección por partes.

Tomaremos como origen un estudio realizado por Zoran Zivkovic y Ben Kröse , cuya finalidad, es la detección de personas por un robot móvil, equipado por un telémetro láser, al igual que el método anterior, que provee de lecturas de datos en 2D y de una cámara omnidireccional, que genera imágenes panorámicas.

 
Este método podría considerarse como una evolución del método anterior, ya que usa el algoritmo de Adaboost para detectar las piernas humanas con la información del dispositivo láser, pero también utiliza ese algoritmo para aprender la apariencia visual de la parte alta, baja y completa del cuerpo humano. Por tanto las personas son detectadas como un conjunto de diferentes partes del cuerpo a través del dispositivo láser y la cámara.

 
Para el reconocimiento de partes del cuerpo en las imágenes, se usan un conjunto de clasificadores para el reconocimiento de patrones, conocidos como “Haar-like-feature classifier”. Este sistema funciona de manera tal que frente a una matriz de píxeles puede responder si se parece o no al objeto que se está buscando. Para esto el sistema debe ser previamente entrenado.

 
El entrenamiento del sistema consiste en exponerle ejemplos positivos (es decir imágenes del tipo de objeto que se desea reconocer) y ejemplos negativos (imágenes de cualquier otra cosa). Después de exponer al sistema a sucesivas muestra de ambos tipos de ejemplos, este es capaz de reconocer patrones que se asemejan a los ejemplos positivos.

 
En este caso cada clasificador se entrena usando el algoritmo de AdaBoost. Aún así, los detectores de partes del cuerpo, pueden generar falsas detecciones .



 
La localización relative de las partes detectadas, se expresará a través de un modelo probabilístico como una distribución Gaussiana, cuyos parámetors serán aprendidos usando el algoritmo EM (Expectation Maximization) en un conjunto de imágenes de entrenamiento.

2.2.3.-
 
Detección basada en formas.

 
Nos basaremos en un estudio que presenta un sistema de visión para la detección y seguimiento de peatones en tiempo real desde un coche en movimiento. Nace para dar solución a el desarrollo de un sistema de asistencia a la conducción basado en video, que pretende detectar situaciones potencialmente peligrosas con peatones.

El sistema de detección incluye una cascada de módulos , cada uno de los cuales utiliza unos criterios visuales complementarios, para ir sucesivamente acotando la solución, equilibrando robustez y eficiencia.

Se consideran 4 módulos:
 
- (sparse) stereo-based ROI generation,
 
- detección basada en formas (los peatones se representan por un conjunto de formas o plantillas de entrenamiendo que cubren las posibles apariencias de un peatón)
 
- clasificación basada en texturas
 
- (dense) stereo-based verification.

 
Éstos estarán complementados por un módulo de tracking basado en filtros alfa-beta.



2.2.4.-
 
Detección de personas como anomalías.

 
En esta ocasión nos basamos en un estudio llevado a cabo por Punarjay Chakravarty, que propone una solución para detectar personas como anomalías, que se basan en un algoritmo visual aplicado en el seguimiento de una ruta concreta. Desde un robot móvil se capturarán imágenes panorámicas en intervalos regulares, que serán almacenadas, mientras en robot es conducido manualmente por una ruta elegida.

 
Éstas imágenes serán usadas por el robot para repetir la ruta de manera autónoma. Las personas serán, por tanto, detectadas como anomalías visuales, que no estaban presentes en la ruta de entrenamiento. Las rutas no se repiten exactamente de la misma forma, por lo tanto darán lugar a diferencias entre las imágenes captadas en la ruta de entrenamiento y las rutas posteriores. En el estudio se estudiarán dos algoritmos para mitigar este problema y se hará una comparativa de su rendimiento.

 
Por otro lado, se efectuará un seguimiento de las regiones consideradas anómalas, usando un filtro de partículas.

 
El inconveniente de este método es que sólo funciona con rutas pre-entrenadas, y que los cambios de luminosidad temporales producirán anomalías en la detección.

Consideraciones respecto a cámaras en movimiento (II)

2-
 
En esta ocasión analizaremos la solución al problema desde el punto de vista de la detección y el seguimiento de personas desde una cámara panorámica en movimiento, como puede ser una cámara montada en un robot autopropulsado. Pensando en este problema, dada una trayectoria del robot, con un inicio y un fin, éste debería ser capaz de evitar obstáculos dinámicos como las personas, para lo cual sería necesaria su detección y seguimiento. De esta manera el robot podría planificar su movimiento teniendo en cuenta las futuras posiciones previsibles de las personas a las que se está efectuando el seguimiento.

 
Afrontaremos el problema de 5 maneras posibles, en función de las técnicas utilizadas para detectar personas desde una plataforma en movimiento:

2.1. -
 
Compensación del movimiento de la cámara (Ego motion compensation) para detectar el movimiento de entidades externas. En este caso no estaríamos limitando el proceso a la detección de personas.

2.2. –
 
En este caso nos centraremos en la detección de personas desde plataformas en movimiento. Contemplaremos 4 posibilidades:
 
2.2.1. –
 
Reconocimiento de patrones, como un único clasificador que detecta la persona como un todo.
 
2.2.2. –
 
Un clasificador por parte del cuerpo, siendo la detección de una persona tomada como una constelación de varias partes.
 
2.2.3.-
 
Detección basada en formas.
 
2.2.4.-
 
Detección de personas como anomalías.


2.1. -
 
Compensación del movimiento de la cámara (Ego motion compensation)

 
En el estudio llevado a cabo por Jung y Sukhatme se analiza el seguimiento de personas usando una sola cámara montada en una plataforma móvil en una escena de exterior.

 
La diferencia de frames (Frame differencing), que consiste en comparar dos frames consecutivos y encontrar los objetos en movimiento basándose en la diferencia, es la técnica más intuitiva, especialmente con cámaras estáticas. Sin embargo, cuando existe un movimiento de la cámara, se generan dos movimientos independientes, el propio movimiento de la cámara, y el movimiento de las entidades dinámicas del escenario. Estos dos movimientos llegarán mezclados a la cámara en una sola imagen, por tanto, habrá que eliminar el movimiento propio, para poder asociar el movimiento residual a los objetos dinámicos del contexto.

 
Se utilizara la diferencia de frames, pero el movimiento generado por la cámara en la imagen t-1 será compensado antes de compararlo con el frame actual t.



 
Teniendo en cuenta que las imágenes del exterior contienen mucho ruido, la perfecta compensación del propio movimiento será inviable. La distribución de probabilidad de los objetos en movimiento será estimada utilizando un filtro de partículas adaptativo. El número final de partículas serán agrupadas (clustered) usando una mezcla de Gaussianas para la estimación de la posición del objeto.



 
En este caso, el ego-movimiento de la cámara se estima haciendo un seguimiento de características o puntos de interés (features) entre las imágenes. Cuando se produce un movimiento de la cámara, dos imágenes consecutivas t-1 y t se encuentran en diferentes coordenadas. La compensación del ego-movimiento será una transformación de las coordenadas de la imagen t-1 a la imagen t, para poder comparar las imágenes directamente. La transformación se llevará a cabo usando dos conjuntos correspondientes de características, uno en la imagen t y otro en la t+1.

 
Se utilizara un algoritmo para la selección de características del entorno, y se aplicará el método de Lucas-Kanade (famoso método basado en la estimación del flujo óptico o Optical Flow) para hacer la correspondencia de esas características en la imagen siguiente. Una vez la correspondencia de características en ambas imágenes es conocida, utilizaremos un modelo de transformación. Existen varios modelos en este campo, affine model, usado en pequeños movimientos, bilinear model, que es el utilizado en este estudio y pseudo-perspective model.



 
Concluyendo, este método funciona correctamente para secuencias de imágenes donde la persona ocupa relativamente una pequeña parte de la imagen, lo cual no se correspondería con un robot autopropulsado que se moviera en entornos indoor.

 
Existe otro estudio llevado a cabo por Gandhi y Trivedi , en el que se usan técnicas de compensación de ego-movimiento basadas en el flujo óptico , para cámaras panorámicas omnidireccionales, que generan imágenes de 360 grados.



 
El inconveniente de la detección usando estas técnicas de compensación es que los objetivos a seguir tienen que estar en movimiento para ser detectados, a parte de que no es necesario que se trate de personas, únicamente cualquier entidad dinámica.

Consideraciones respecto a cámaras en movimiento (I)

 
Después de la última reunión del grupo del PFC, se consideró la posibilidad de cómo se podría abordar la detección de movimiento teniendo en cuenta que la cámara que capta las imágenes no fuera fija, poniendo como ejemplo las cámaras móviles instaladas en los estadios de fútbol.


 
Hasta ahora, en la fase de detección de movimiento, se han implementado varias técnicas de sustracción de fondo, sobre diferentes escenas. La limitación más importante en la sustracción de fondo es la premisa de cámaras estáticas. El movimiento de la cámara distorsiona los modelos de fondo.

 
A continuación expondré varias posibilidades de enfrentarse a este handicap, aunque normalmente estas soluciones estarán adaptadas a solucionar el problema en contextos concretos, como por ejemplo, en un partido de fútbol, o requerirán ciertas premisas, como que los movimientos sean suaves y pequeños en la sucesión de los frames.

 
En las opciones analizadas, se incluirán referencias al análisis y detección de estructuras humanas, como una propuesta a estudiar sugerida por Pablo.

1-
 
En primer lugar analizaremos una solución a el problema en un contexto acotado, como puede ser el seguimiento de los jugadores de un partido de fútbol disputado en un campo de césped, como sugirió Andrés en la última reunión. En está situación habría dos partes a las que enfrentarse, por un lado la extracción de las regiones de los jugadores , y por otro lado usar esos datos para aplicarles un método de tracking para estimar y mantener la posición de los jugadores mientras estén dentro de la escena.

 
La técnica más usada en estos casos, básicamente consiste en extraer las regiones que difieran del color verde distintivo del campo.

 
El color del campo se representará como un histograma en un espacio de color HSV. Ese histograma se proyectará sobre cada frame y después de aplicar un umbral, obtendremos una máscara binaria del campo. Para estimar la región total del campo, los píxeles de la imagen binaria se agruparán en regiones y calculando la envolvente convexa (convex hull) de las regiones mas grandes, estimaremos el área de la imagen que cubre el campo.

 
Como el color del campo puede dispersarse durante el partido, el histograma puede ser actualizado recursivamente, recalculando el histograma de la región del campo, excluyendo las regiones de los jugadores.

 
Teniendo la imagen binaria, las regiones correspondientes a los colores que no corresponden al campo, dentro de la región del campo, corresponderían a las posibles posiciones de los jugadores. Para reducir el ruido, podrían aplicarse operaciones de erosión y dilatación.

 
Las regiones de los pixeles de los jugadores se agruparán, y formarán la entrada de datos al filtro de partículas para proceder al tracking.


martes, 29 de junio de 2010

Tests (II)

Ya que en indoor ya poseeemos videos de testing, y hemos visto que Runnin Gaussian se comportaría correctamente para modelar esta escena, se han estado buscando videos de outdoor, que pudieran sernos de utilidad para comprobar como se comporta el último método.

Se han conseguido varios ejemplos de cámaras de seguridad instaladas en espacios publicos, aunque los tamaños de los videos eran demasiado elevados.

Se han recomprimido los videos con diversos codecs, y he perdido algunos dias, testeando y reprogramando el interfaz y el algoritmo, ya que se producían efectos extraños en algunos frames de los videos, y he pensado que eran fallos de programación, pero algunos dias después me he percatado (por fin ¡¡¡) que eran debido al ruido que produce la compresión en función de los codecs, y eso impacta sobre la detección del fondo.

Finalmente, los videos se han comprimido en utilizando el codec MJPEG, que después de varias pruebas era el que menos ruido añadía a los frames. En el proceso de recompresión, también se han redimensionado a 420 x 340.

Se muestra a continuación, varias capturas de algunas pruebas realizadas:

1 - Cambios repentinos en la luminosidad de la escena:

En este test se quiere demostrar como se adapta el método a un posible cambio de claridad en el entorno, siempre con el fin de conseguir que se den las mínimas falsas detecciones posibles.






Respecto a los valores de inicialización del algoritmo, la intención es conseguir una tabla de valores aceptables que se adapten a las condiciones de una escena outdoor.

Los valores utilizados son el resultado de varias pruebas, partiendo de los valores que aconsejaban para un entorno indoor.

Como se puede observar, a partir del fram 950 empieza a cambiar la claridad de la escena, de izquierda a derecha, con un número despreciable de falsas detecciones.


2- Pequeños movimientos rápidos y constantes

En este test se añade a la situación del cambio de lumonosidad, la existencia de árboles en la escena sometidos a viento, lo que originará movimientos constantes.





Como podemos observar, en los momentos con más viento, no se produce un número de falsas detecciones excesiva en las áreas de los árboles, ya que el número de gaussianas por pixel en esa zona, amortizarán y se adaptarán a los cambios de valores de los píxeles.





Resultados:

Como se puede observar, esté método sería una buena elección para incluir en un proceso de tracking, además de por su tradición histórica, por la calidad de los resultados en un amplio caso de escenas. Por tanto, teniendo en cuenta que en facetas de precisión en entornos heterogéneos es aceptable, una posible mejora sería en aspectos de rendimiento.

Zivkovic en el estudio Efficient adaptive density estimation per image pixel for the task of background subtraction, propone una mejora de este método par que se comporte de forma adaptativa, en cuanto al número de guassianas por pixel, con la consecuente mejora de rendimiento.

Por otro lado, para perfeccionar la precisión de los métodos, otra posible opción sería estudiar algunos filtros a aplicar despues del procesado del frame, para eliminar falsas detecciones y sombras.

domingo, 27 de junio de 2010

Parámetros del modelo y pruebas

Examinando el documento de Wayne y Schoonees, Understanding Background Mixture Models for Foreground Segmentation, se han realizado algunas modificaciones, principalmente en las ecuaciones de actualización de parámetros del modelo.

Este documento hace un análisis del modelo propuesto por Stauffer-Grimson sobre el que estamos trabajando, a partir de varias pruebas empíricas, e intenta mostrar algunas aproximaciones al modelo teórico propuesto, mejorando algunas de sus partes, y proponiendo algunos valores de inicialización del modelo.

Principalmente, propone nuevas aproximaciones en los métodos de actualización. Si recordamos las fórmulas propuesto por Stauffer-Grimson :


Podemos observar que los valores carácteristicos de la gaussiana media y varianza, el parámetro de absorción que marca la velocidad de aprendizaje (p) , comunmente 0,01, es diferente al utilizado para actualizar los pesos de la Gaussiana que ha encajado (alfa), normalmente 0,05.

En este estudio Wayne y Schoonees, basándose en conceptos de probabilidad del teorema Bayesiano, redefinen las fórmulas de actualización de la media y la varianza, para que el parámetro de absorción se calcule en función de Alfa y el peso:



donde para evitar calcular la función de probabilidad en cada actualización propone:



en función si la gaussiana ha encajado o no.

Teniendo en cuenta que uno de los factores principales es una buena inicialización de los parámetros de las gaussianas, dado que no siempre se dará en caso de obtener un contexto donde podamos obtener una escena unicamente con el fondo, se provee una tabla con valores prácticos de los parámetros esenciales para una escena indoor.



A continuación se hará una serie de tests, para probar como se comporta el método en entornos indoor y outdoor, teniendo en cuenta la mayoría de las posibles escenas que se puedan dar en la vida real. Se harán pruebas con distintos parámetros de inicialización para extrapolar un conjunto de valores que se comporten bien en la moyoria de las condiciones.

Los parámetros más significativos son:

1- K (presentado en nuestro interfaz como Num Gaussianas)

Teniendo en cuenta que nuestro método, modela tanto el background como el foreground, el valor mínimo a tener en cuenta sería K=3, para modelar dos superficies de bakground y una de foreground por pixel. Considerar menos de 2 gaussianas para el background, el algoritmo sería innecesariamente complejo, y sería más recomendable usar el método de la media.
Se han hecho pruebas con hasta K=7, pero se ha comprobado que con un valor superior a 5 gaussianas, la mejora no es muy apreciable.

2- T

Es una medida de la mínima proporción de los datos que hay que tener en cuenta para formar parte del fondo. Elegiremos un valor pequeño, para fondos unimodales, y valores altos para fondos multimodales, provocados por pequeños movimientos repetitivos (movimiento de hojas,banderines,...), para asi poder incluir más de un color en el modelo del fondo.

3- Alfa

Velocidad de actualización.

4- Umbral

Podemos pensar en ello como el numero de varianzas alejadas de la media, para considerar a un valor como foreground.



TESTS

Se realizarán varios tests sobre escenas en el exterior, probando como se comporta el método en condiciones de cambios de luminosidad, modificaciones de la escena (objetos que pasan a ser parte del fondo) y movimientos constantes de pequeñas areas (hojas de los árboles).

sábado, 26 de junio de 2010

Implementación

1 - Estructuras de datos

- La estructura de la gaussiana en este caso, estará compuesta de una media para cada uno de los canales RGB, de una varianza común para los tres canales, de un peso asociado a esa gaussiana y de un factor de “importancia” para esa gaussiana (calculado como el peso entre la desviación estandar). El hecho de que exista una varianza común, se debe a una propuesta del documento de Stauffer & Grimson, para reducir el coste excesivo de la matriz, con la penalización de perder un poco de precisión.




- La estructura para almacenar las gaussianas del modelo, consistirá en una estructura de array con dimensión [alto X ancho X numeroGuassuinasMaximo] de estructuras del tipo comentado anteriormente.

arrayGaussianas = new Gaussiana[tamanio*numGaussianas]

- Para conocer el número de gaussianas por pixel en cada momento, construiremos una matriz gaussinasPorPixel donde almacenaremos en cada momento ese dato.

- En este caso se avitará la fase de entrenamiento. Para conseguirlo, las gaussianas iniciales se generarán con unos valores de media equivalentes a los valores que toma cada canal de ese pixel , una varianza inicial igual a un valor experimental elegido por nosotros y un peso igual a 1 (en el caso de ser la primera gaussiana generada). Estos valores se irán refinando con las posteriores actualizaciones.

2- Algoritmo de procesado

2.1. - En primer lugar, calcularemos, de las gaussianas que hay asociadas al pixel, el número de ellas q van a modelar el background, en funcion de que la suma de los pesos sea menor que T . Teniendo en cuenta que las gaussianas van ordenadas de mayor a menos, en funcion del parametro orden (peso/desviacion estandar).



2.2.- Recorremos todas las gaussianas asociadas a ese pixel . Para cada una:

2.2.1. - Calculamos la distancia del valor del pixel a la media, para comprobar si el valor encaja con la gaussiana en funcion de si la distancia es menor que la varianza * umbral

2.2.2.- Si encaja y la gaussiana pertence a el grupo de gaussianas que modelan el fondo, actualizamos sus parametros de media , varianza, peso y orden para esa gaussiana, y para las demás, actualizaremos el peso y el orden, en función de las fórmulas vistas en el post anterior.

Después renormalizamos los pesos para que sumen 1, y ordenamos las gaussianas de ese pixel de mayor a menos en función del parámetro orden.

2.2.3.- Si no encajara a ninguna generamos una nueva con los valores de inicializacion y recalculamos pesos y orden para todas.

2.2.4. - En función a la gaussiana que haya encajado con ese valor de pixel, decidiremos si el pixel corresponde a Background o Foreground

- Si ha encajado con alguna de las B primeras gaussianas que modelan el fondo, decidimos Background

- Si ha encajado con alguna gaussiana existente que no modela el fondo, o si ha habido que generar una nueva gaussiana, decidiremos Foreground.

jueves, 24 de junio de 2010

Mixture of Gaussians ( II )

En este método se propone como sistema de modelado, la suma ponderada de funciones Gaussianas por canal y píxel:



donde K es el número máximo de Gaussianas utilizadas para realizar la estimación del modelo (normalmente varía entre tres y cinco funciones distintas), G() representa cada una de las Gaussianas utilizadas, w son las ponderaciones que tienen cada una de las curvas, le media y la varianza son los parámetros estadísticos y Z es el valor del píxel en cuestión (magnitud vectorial perteneciente a R3).

Si asumieramos que trabajamos con imágenes en escala de grises, y el valor de K=5, el histórico de un pixel sería algo así:




Dicha estimación se utiliza para obtener un modelo de fondo y decidir si el píxel en cuestión se corresponde con el modelo de fondo o con un objeto de primer plano. En este caso, las Gaussianas representan tanto el fondo como el primer plano. Para decidirlo se aplicará un criterio de manera dinámica. De esta forma será posible introducir los objetos de primer plano en el modelo de fondo cuando permanezcan estáticos en la escena, asignando la Gaussiana correspondiente a fondo.

Para ello, cada píxel (i,j) de la imagen (donde i y j son los índices que representan la posición de fila y columna que ocupa el píxel dentro de la imagen) se modela como una combinación de distribuciones Gaussianas , relacionándose entre sí a partir de los factores de ponderación , que se modifican iterativamente en función de las veces que se da el valor que recogen, formando así el modelo probabilístico del píxel.

Los factores de ponderación se normalizan a fin de conseguir que el sumatorio total sea 1:



Consideramos que el fondo queda modelado por las B distribuciones Gaussianas de mayor peso y menor varianza



donde T es el umbral de decisión asignado (usualmente 0.6), y B es el número mínimo de distribuciones a incluir en el sumatorio , para que se cumpla la inecuación. Las distribuciones que ordenadas según el criterio del factor de ponderación entre la varianza. Este valor aumentará tanto si la evidencia de la distribución aumenta, como si su varianza disminuye.

El valor de T mide la mínima proporción de los datos que debe ser contemplada como background. Un valor bajo de T se usaría para fondos unimodales, y un valor elevado de T para distribuciones multimodales producidas por movimientos repetitivos en el fondo (arboles, banderas,…).

Las B primeras distribuciones Gaussianas serán las que modelarán la función de densidad de probabilidad del fondo, puesto que normalmente es más estático y aparece con más frecuencia, correspondiéndose con aquellas Gaussianas que han sido utilizadas más veces y que son más compactas.

Para comprobar si el valor del píxel de entrada encaja en alguna distribución Gaussiana del modelo probabilístico del píxel, se evalúa la siguiente inecuación:



Xt es el valor de un canal de color del píxel estudiado en el fotograma t, Ui,t es la media de la Gaussiana i-ésima y Oi,t la desviación estándar de la Gaussiana i-ésima.

Pueden darse dos casos, o que la inecuación de cumpla para todas las Gaussianas, o que no se cumple para alguna Gaussina. La forma de actuar sería la siguiente:

1- Si se cumple para todas las Gaussianas, se decide que el pixel es primer plano, puesto que no encaja con el modelo probabilístico del píxel aprendido hasta el momento. En este caso, se generará una nueva Gaussiana con el fin de permitir adaptar el modelo al fondo, eliminando la distribución con menor peso.

2- Si no se cumple para una Gaussiana, se supone que el valor encaja con el modelo probabilístico modelado mediante la misma (si la inecuación no se cumple para más de una Gaussiana, se supondrá que la función que mejor representa al píxel es la de menor varianza). En este caso, pueden darse dos casuísticas:

2.1.- si el valor del píxel encaja con una de las B primeras distribuciones Gaussianas se asignará a fondo, debido a que la frecuencia con la que ha aparecido es lo suficientemente elevada como para que sea considerado fondo.

2.2.- sino, se decidirá que pertenece al primer plano.


En cuanto a la actualización del modelo, se tendrán en cuenta las siguientes ecuaciones:

1- Actualización de la media y la varianza, que afecta sólo a la distribución Gaussiana que haya encajado




2- Actualización de los pesos , que afectará a todas las distribuciones que conforman el modelo

Siguiente método: Mixture of Gaussians ( I )

Este método supone una evolución notable del método anterior (Running Gaussian Average), ya que en lugar de utilizar una Gaussiana por canal, como hacía el anterior, en este método utilizamos hasta K Gaussianas por canal, para estimar el modelo probabilístico de cada pixel del background. Fue propuesto por Stauffer & Grimson en la publicación titulada Adaptive background mixture models for real-time tracking .

Aparece con la intención de mejorar y conseguir buenos resultados en condiciones de :

- Fondos Multimodales

- Escenas que contienen gran cantidad de pequeños objetos con movimientos lentos (por ejemplo banderas, hojas de los árboles), que suponen variaciones periodicas del fondo.

- Objetos rápidos en fame rates lentos.

- Escenas en las que haya cambios en las condiciones de iluminación.


Si tomamos con que cada pixel modela una superficie estática, con unas condiciones constantes de luz, una Gaussiana sería suficiente para modelar el modelo contra el ruido. Si solamente las condiciones de luz cambiaran en el tiempo, una sola Gaussiana adaptativa sería suficiente, como en el método anterior. Estaríamos hablando de entornos de interior (indoor).

En la práctica, aparecerán varias superficies o texturas en la misma región del background, bajo condiciones variables de iluminación. Será necesario múltiples Gaussianas adaptativas para afrontar esta situación.

Definimos el “pixel process” de un pixel X, como su histórico de valores desde el frame 1 al frame t. Lo representaríamos como:



En las siguientes dos figuras se representan dos “pixel processes” en una diagrama de los valores Red y Green del espacio de color:








En la primera se muestra la distribución multimodal valores de un pixel durante el parpadeo de un monitor, y en la segunda se muestra la distribución bimodal de los valores de un pixel durante los reflejos de la superficie del agua. En estos ejemplo queda patente la necesidad, por un lado de un sistema adaptativo con umbrales automáticos, y la necesidad de una representación multimodal.

martes, 22 de junio de 2010

Extracción de objetos de primer plano y actualización

1 - Extracción de objetos de Foreground:

Una vez que finaliza el periodo de entrenamiento, es decir que t>N, siendo N el número de frames de entrenamiento que hemos elegido, para cada uno de los píxeles de la imagen:

- Hayamos la distancia euclídea de cada pixel respecto a la media de la Gaussiana de referencia, mediante la siguiente formula:



Como podemos observar, habría que calcular la distancia de cada uno de los canales por separado.


- Comparamos la distancia calculada con el umbral. En este caso, el umbral consta de la varianza de la gaussiana en ese pixel multiplicada por el factor k.




La utilidad de k es aumentar el area de aceptación de un pixel de fondo. Un valor correcto suele variar entre 2 y 3, dependiendo del contexto.

Esta asociado al campo Umbral del interfaz, y se ha modificado para que acepte valores decimales.

Si la fórmula anterior se cumpliera, significaría que ese pixel ha variado lo suficiente como para considerarlo como pixel de Foreground, sino se consideraría como pixel de fondo, y se utilizaría para actualizar los parámetros de la Gaussiana.

2 - Actualización de valores de la Gaussiana.

Por cada pixel considerado como de fondo, habría que actualizar los valores de la Gaussiana asociada teniendo en cuenta las ecuaciones:


Se tiene en cuenta la casuística propuesta por D.Koller de solo actualizar los parámetros de las Gaussianas de los pixeles detectados como pertenecientes al Background.
Adjunto a continuación una muestra del funcionamiento del método implementado:

Como se puede observar existen falsas detecciones debidas al ruido del video, generado por la compresión. Sería planteable aplicar técnicas de post-procesado de imagenes, tanto para eliminar el ruido, como para eliminación de sombras.


lunes, 21 de junio de 2010

De vuelta a las estadística y las matemáticas ...

Como primer paso para implementar este método, hay que tratar la fase de Inicialización de los parámetros de la función de probabilidad, en este caso, la media y la varianza.

En primer lugar, señalar que al tomar como referencia que vamos a trabajar con frames representados mediate el espacio de color RGB, consideramos que cada canal es estadísticamente independiente, por lo tanto habra que estimar, para cada pixel, una pdf por separado para cada uno de los canales. Una vez estimada cada Gaussiana marginal, se obtendrá la pdf del pixel como producto de éstas. Esto se traducirá en que a cada pixel, habrá que asociarle una estructura de datos que contemple una media y una varianza por cada canal RGB:




El método requiere un periodo de inicialización, en el cual no se realizarán extracciones de objetos de primer plano, sino que se usará para inicializar los parámetros (las distribuciones Gaussianas que modelarán el fondo).

La inicialización es una de las ambigüedades que presenta el algoritmo. En muchos casos se limita a tomar como media el valor del pixel del primer frame. Esto podría resultar problemático, si el primer frame presentara elementos que no corresponden al fondo.

En nuestro caso, vamos a realizar el proceso de una forma adecuada, calculando los valores media y varianza a partir de los frames de entrenamiento.

En el caso de la media, la fórmula esta clara:



La varianza, mide la dispersión o desviación respecto de la media y es igual a la suma de los cuadrados de las desviaciones individuales, dividida por el número de observaciones:



Esto supone un problema, ya que habría que realizar una primera pasada por los frames de entrenamiento para estimar la media de las Gaussianas, y una segunda pasada para estimar las varianzas, ya que utilizan el valor de la media calculada anteriormente.

Esto presenta dos posibilidades:

1- Almacenar en una estructura en memoria (podríamos usar una cola como en el método anterior) los frames del periodo de entrenamiento, para poder hacer este segundo barrido. Esto sería poco eficiente.

2- Encontrar una manera para calcular todos los parámetros en un solo barrido.


Centrándome en la segunda solución, y después de intentar despejar las variables de la fórmula de la varianza para hacerlo en una iteración ( recordando que el cuadrado de la diferencia no es lo mismo que la diferencia de los cuadrados ;) ), en unos apuntes de estadística di con la fórmula de la varianza valida para estos propositos:



Asi pues haremos iterativamente, el sumatorio de los cuadrados de valores de cada pixel de los frames de entrenamiento, para finalmente dividirlo entre el numero de frames y restarle el cuadrado de la media.

Como muestra del resultado, adjunto un par de videos, donde se ha adaptado el interfaz para, dado un archivo de video, muestren en el primer caso , la imagen creada como imagen de media, y en el segundo caso la imagen con los valores de las varianzas. La imagen se mostrará una vez alcanzado el numero de frames de entrenamiento, en el ejemplo, el frame 60.




domingo, 20 de junio de 2010

Running Gaussian Average

En esta técnica se propone modelar el fondo de cada píxel mediante una función de densidad de probabilidad (pdf) conocida: la función Gaussiana. Esta función se determina mediante los parámetros media y varianza, como se observa en la siguiente imagen:





Habría, pues, que calcular estos parametros a partir de las muestras del periodo de entrenamiento. Tendriamos entonces una pdf estimada para cada uno de los pixeles del frame, que representa una Gaussiana asociada a cada uno.

Para decidir si un pixel corresponde o no a el modelo estimado, para cada frame en un tiempo t, el valor del pixel X se puede clasificar como pixel de primer plano si:



El método utilizado para realizar la actualización de los valores de la Gaussiana, seguiría las siguientes ecuaciones, que habría que aplicar por cada frame de entrada de la secuencia:




El nuevo parámetro que aparece en estas ecuaciones, se denomina parámetro de absorción, y determina la velocidad de actualización del modelo con cada nuevo frame. Esto permitiría compensar los cambios de luz o incluso el movimiento de objetos de fondo. Por ejemplo, si se modificará un libro de lugar, esto supondría un cambio en la textura del background, tanto en el lugar donde se encontrara el libro, como en su nuevo emplazamiento. Este cambio sería compensado recursivamente en pocos segundos. El valor de este parametro se escogera para conseguir un equilibrio entre rápida actualización y estabilidad.

Cabe la posibilidad, para mejorar el método, de solo actualizar el modelo, en caso de que se haya decidido que el pixel pertenece al background. Este apunte fue sugerido en un estudio publicado por D.Koller.


Este método es destacable por sus bajos requerimientos de memoria, y por su velocidad de procesado, pero sería aplicable unicamente a fondos casi estáticos, en los que el ruido introducido fuera el perteneciente al modelo de la cámara.


Esté método fue propuesto en un estudio realizado por C. Wren sobre un sistema de tracking de personas, denominado Pfinder.

Propuesta de siguientes métodos de estudio

Como consecución al método anterior, me centrare en analizar dos métodos muy utilizados en este sector. Podriamos considerarlos como métodos Recursivos, ya que, en referencia al uso de la memoría, éstos no requieren mantener un buffer en memoria para la estimación del fondo. Diriamos, por tanto que:

- Métodos recursivos: No requieren de un buffer de frames para la estimación, unicamente, actualizan recursivamente un unico modelo de background por cada frame entrante.

- Métodos no-recursivos: Utilizan un buffer para almacenar los N frames anteriores, y estimar el modelo de fondo en función de la variación temporal de cada pixel dentro de los frames de ese buffer.


Como digo, me centraré en dos famosos métodos recursivos, que se basan en crear un modelo estadístico del fondo, estimando una función de densidad de probabilidad (probability density function) para detectar los objetos de primer plano.

En primer lugar se analizara la técnica conocida como Running Gaussian Average, y después la famosa Mixture of Gaussians.

Error en el método de la media

Haciendo pruebas comparativas con diferentes videos, entre el metodo simple y el método de la media, me di cuenta que no observaba apenas diferencias. Repasando las fórmulas, y el código fuente me di cuenta de que había un error.

La idea que se plantea en el método de la media (Average), como mejora del método simple, consiste en una continua renovación del modelo de background, como la media aritmética de los N anteriores frames al frame actual.

En mi caso, estaba confundiendo el planteamiento, y me había limitado a generar la media de los N primeros frames (llamaremos a N, frames de entrenamiento), y a partir de ahi no actualizar el modelo de fondo.

A partir de este caso, había que plantearse una estructura de datos para almacenar el memoria en cada instante t, los N frames anteriores, y en cada iteración regenerar el modelo de fondo, calculando el average background a partir de los frames almacenados el memoria.

Volviendo a retomar manuales y referencias online de C++ , para refrescar un poco mi memoria de hace años, me plantee la posibilidad de implementar una estructura Cola, ya que el comportamiento del buffer de frames debía seguir una estructura FIFO.

Encontré que C++ provee de una libreria de plantillas (Standard Template Library), donde se proporcionan estructuras de datos genéricas, entre ellas una llamada QUEUE , que implementa una cola.

Después de hacer pruebas me percaté de que no me era de utilidad, ya que necesitaba tener acceso en cada instante, a todos los frames almacenados en la cola, y esta estructura solo permite acciones push() y pop(), pero no acceso aleatorio a la estructura.

La solución ha consistido en utilizar la estructura DEQUE (Double ended queue), que consiste en una cola de doble final, que además de las operaciones típicas de una cola, permite el acceso aleatorio mediante la instruccion at().

En el resultado práctico, se puede observar que, al ser el modelo de fondo actualizado en cada iteración (no es constante como en el caso anterior), las falsas detecciones disminuyen , pero se puede observar como los requerimientos de memoria aumentan, y afectan a la velocidad de proceso.

Para visualizar los videos de muestra aconsejo su reproducción en pantalla completa, para apreciar los detalles.

jueves, 17 de junio de 2010

Organización del código fuente

Se ha realizado una reorganización y recodificación de gran parte del código siguiente el paradigma de orientación a objetos, generando los correspondiente archivos cabecera .h y .cpp.

He separado la parte correspondiente a la contrucción y control de eventos del interfaz, aislándola en una clase denominada interfaz. Se ha creado otra clase para el control de los flujos de video, y una clase para cada una de las técnicas implementadas de sustracción de fondo (simple y media).

La colección de clases queda como se muestra a continuación:




En el método de ejecución principal se ha planteado de una forma estructurada que sigue el siguiente pseudocódigo:


Reestructuración del interfaz

Después de mucho pelearme con los Sizers, e investigar las posibilidades de adicción de nuevos componentes, y su correcto anidamiento dentro de la estructura, el resultado de la nueva interfaz cuenta con las siguientes características:




- Adicción de un nuevo area de video paralela a la anterior, donde se representará el video resultado del procesado de la técnica de sustracción elegida. Tanto este area como la anterior se adaptarán al tamaño del video seleccionado.

- Adicción de una GroupBox donde se enumerarán en forma de RadioButtons, una serie de métodos a aplicar. Actualmente solo hay dos. Se han añadido 4 más para futuras implementaciones.

- Adicción de un area donde aparecen las propiedades configurables de la técnica elegida en el GropBox anterior. Este área se comportará de forma dinámica, mostrando y ocultando las opciones apropiadas según el algoritmo seleccionado en los RadioButton.

- Todos los componentes del interfaz se autoorganizarán, en función del tamaño que adopten las áreas de video.


Por otro lado también se ha adaptado el funcionamiento de los algoritmos implementados, para que el resultado se muestre en el interfaz creado, y dejar de usar las ventanas de prueba de OpenCV.

El resultado es el siguiente: