ANÁLISIS EXHAUSTIVO DE IMÁGENES PARA LA DETECCIÓN DE

Anuncio
ANÁLISIS EXHAUSTIVO DE IMÁGENES PARA LA
DETECCIÓN DE CABEZAS HUMANAS
Fernando Aparicio Galisteo
RESUMEN
El objetivo principal de este artículo es realizar un análisis de un conjunto de
imágenes en las que aparecen humanos ya segmentados, tratando de idenficar
aquellos blobs que únicamente contienen la cabeza. Como estrategia para realizar
la identificación, se propone un estudio detallado de un conjunto de imágenes
divididas en secuencias, pasando del nivel de imagen al nivel de blob. Tras la
elección de un conjunto de características relacionadas con las formas geométricas
que deben ser objeto de detección, se localizarán unos límites con los que acotar
los casos ya separados en positivos y negativos y ofrecer una valoración de la
calidad de cada caso. En concreto, el objeto de detección de las imágenes serán
blobs que contengan únicamente cabezas humanas, manteniendo la posibilidad de
detectar cabezas con partes del cuerpo.
Un objetivo secundario que se aborda es mostrar la complejidad y dificultad que
supone hacer un análisis exhaustivo de las propiedades de un conjunto de
imágenes, a través de algoritmos que puedan ser aplicados a tareas de vigilancia y,
por lo tanto, con grandes restricciones en lo que se refiere al esfuerzo
computacional necesario.
Por último, se propondrán un conjunto de estrategias avanzadas y relacionadas con
algoritmos clasificadores, que podrían formar parte del sistema de vigilancia
mejorando la exactitud de los resultados fruto de este estudio.
INTRODUCCIÓN
Cada vez son más los esfuerzos dedicados al análisis de imágenes, en el ámbito de
la visión artificial, acompañado por la evolución tecnológica y por el aumento de
conocimiento teórico. En este último aspecto destaca el uso cada vez más
frecuente, tanto con una finalidad púramente investigadora como de aplicación a
productos comerciales, de algoritmos obtenidos a partir de disciplinas relacionadas
con la inteligencia artificial.
Las tareas relacionadas con el seguimiento de objetos, de utilidad en muchos
campos científicos, tienen en común un conjunto de etapas que podrían agruparse
en tres pasos fundamentales: (1) Identificar los objetos de interés. (2) Seguimiento
de los objetos a lo largo de la secuencia. (3) Analizar el seguimiento para reconocer
su comportamiento. Un estado del arte lo podemos encontrar en [7].
A pesar de que las tareas de análisis de imágenes tienen una estrecha relación con
las particularidades de los objetivos, siendo dependientes del problema a resolver,
las etapas mencionadas son aplicables al seguimiento de cualquier tipo de objeto y,
en concreto, a las tareas de seguimiento de las actividades humanas, cuyo estudio
es de especial interés para el desarrollo de sistemas de vigilancia, además de otros
campos.
El sistema que es marco de referencia para este desarrollo, del que podrá formar
parte como un componente o librería, podría ser similar al descrito en [1], como
parte del sistema basado en bloques, para el reconocimiento de bloques aislados
que podrían ser una cabeza humana, o como parte de un sistema mayor de
reconocimiento, que recurriese a este módulo para este tipo de detección. El
objetivo global de este sistema es trasladar el conocimiento residente en los datos
numéricos de los píxeles de la imagen hasta el de una descripción abstracta de alto
nivel ([10], mencionado en [1]).
Una de las aproximaciones más comunes al analizar partes del cuerpo y describir su
movimiento, es realizar un estudio geométrico en 2 ó 3 dimensiones, pero también
es posible realizar un análisis de las características del objeto sin la presencia
explícita de formas geométricas (referencias encontradas en [8]). No obstante, hay
que tener en cuenta que, tal y como se propone en [4], considerar que cada blob
se corresponde con un objeto simple en movimiento puede resultar una limitación
demasiado restrictiva, por varios motivos: (1) Un blob puede contener varios
objetos (2) Un único objeto puede estar dividido en varios blobs (3) Los blobs
pueden contener píxeles de sombras y reflexiones.
La identificación de los blobs humanos resulta aún más complicada cuando los
objetos son pequeños, tal y como sucede en las tareas de vigilancia.
El punto de partida para este estudio son un conjunto de secuencias ya
segmentadas ([14]). Se realizará una clasificación de las mismas en conjuntos de
clases positivas o negativas, siendo las positivas aquellas en la que se considera la
presencia de un blob con cabeza.
Posteriormente se trasladará esta información al nivel de blob, construyendo un
conjunto de ejemplos de entrenamiento, que son objeto de un análisis detallado
basado en un estudio geométrico previo y el resultado de la medición de un
conjunto de características.
En base al análisis empírico de las características, se realizarán funciones con la
finalidad de detectar blobs con cabeza, evaluándose la calidad para cada una de las
secuencias, para posteriormente tratar de aplicar de nuevo parte del conocimiento
geométrico teórico previo, en un intento de mejorar los resultados.
Una parte importante del trabajo asociado a este artículo, es el desarrollo de una
aplicación que sirve de interfaz de apoyo, tanto en el estudio previo como para las
pruebas, así como dos hojas de cálculo que recopilan los resultados de ambos ([5]
con toda la información a nivel de blobs, [5 a] con la información recopilada
inicialmente sobre las imágenes).
En relación con el estudio geométrico, se ha optado por la búsqueda de similitudes
con formas elípticas en dos dimensiones, tratando de encontrar relaciones de
validez tanto para casos muy particulares como para cambios de escala, objetivo
para el que se consideraría fundamental el uso de algoritmos de búsqueda,
programación genética, una red neuronal o cualquier otra forma de clasificación
avanzada de patrones.
Todo este trabajo se ha estructurado como sigue:
- Estudio preliminar de las imágenes: Sección que se dividirá en una
descripción de nomenclatura de las secuencias utilizadas, un estudio de las
imágenes en las que aparecen cabezas, un análisis geométrico de algunas
de las imágenes que queremos detectar.
- Software de apoyo desarrollado: Se hace una descripción del programa
desarrollado para las pruebas ([15]).
- Detección de blobs y características: Se describe el modo en el que se
localizan los blobs, así como la extracción de las características que serán
utilizadas para llevar a cabo las funciones de detección.
- Identificación de la cabeza: Se describen, prueban y evalúan las funciones
de detección encontradas.
- Conclusiones y trabajo futuro: Se plasman las conclusiones obtenidas y se
proponen soluciones a los inconvenientes encontrados.
ESTUDIO PRELIMINAR DE LAS IMÁGENES
Secuencias de entrenamiento (14)
Las secuencias consideradas son las propuestas para este curso, a las que en este
texto nos referiremos como:
(1)
oclusionesParcialPizarra:
Aquella
que
va
desde
la
imagen
oclusionesParcialPizarra00001
hasta
la
imagen
(2)
(3)
(4)
oclusionesParcialPizarra00182, numeradas de uno en uno, dando un total
de 182 imágenes.
oclusionesTotal: Aquella que va desde la imagen oclusionesTotal00001
hasta la imagen oclusionesTotal00224, numeradas de uno en uno, dando
un total de 224 imágenes.
camCentrada-LRSalida: Aquella que va desde la imagen camCentradaLRSalida09500 hasta la imagen camCentrada-LRSalida12000, numeradas
de dos en dos, dando un total de 1251 imágenes.
camCentrada-LRSalida2: Aquella que va desde la imagen camCentradaLRSalida20600 hasta la imagen camCentrada-LRSalida21600, numeradas
de dos en dos, dando un total de 501 imágenes.
Nivel de imagen
Un primer análisis en cada una de las secuencias ha servido para fabricar los
ejemplos de entrenamiento al nivel de imagen (lo que puede significar que una
imagen marcada indique más de un blob positivo), agrupándolos en tres clases:
Negativos, Positivos (solo cabeza), Positivos (cabeza con parte del cuerpo).
Esta clasificación se trasladará al nivel de blob y nos permitirá valorar los
resultados en función de la detección de negativos del primer tipo con positivos del
primer tipo o del primer y segundo tipo juntos.
A pesar de ser algo extensos, a continuación se muestran los resultados obtenidos
del análisis visual de las imágenes originales, en las que hay que tener en cuenta
posibles errores de la manipulación manual de las mismas (los datos también se
pueden encontrar en la hoja Positivos de [5 a]):
Lo que significa que disponemos de 17 ejemplos con algún blob positivo (15 con
cabeza y 2 con cabeza + parte del cuerpo) y 165 con todos los blobs negativos.
En este caso tenemos 9 imágenes con blob positivo (todas con cabeza sin partes
significativas del cuerpo) y 215 imágenes con todos sus blobs negativos.
En el caso de la secuencia camCentrada-LRSalida tenemos 397 imágenes con algún
blob positivo (336 con cabeza y 61 con cabeza + parte del cuerpo), quedándonos
854 imágenes con todos sus blobs negativos.
En el caso de la secuencia camCentrada-LRSalida2 tenemos un total de imágenes
con algún blob positivo de 293 (50 con cabeza y 243 con cabeza + parte del
cuerpo), quedando 208 imágenes con ningún blob con cabeza.
A este estudio previo de todas las imágenes de cada una de las secuencias de
prueba utilizadas, se le ha añadido una marca para las imágenes con cabeza
cercanas a las paredes, ya que en un principio se encontraron problemas en la
detección de las zonas próximas a la pared, debido fundamentalmente a la
consideración de un exterior blanco. Posteriormente, este problema se ha
solventado filtrando las imágenes con un umbral inverso, que dados el umbral y un
valor máximo, calcula la nueva imagen con la ecuación:
0 origen( x, y ) > umbral 
destino( x, y ) = 

Maximo Otro

Lo que va a dar como resultado la imagen invertida sobre una imagen en blanco y
negro, con las zonas de los blobs en negro y el fondo blanco en el caso de las
secuencias de prueba, evitando así la detección de los blobs en contacto con los
límites de la imagen como parte de este contorno exterior.
Análisis geométrico
A continuación se muestran ejemplos de imágenes que queremos detectar
(obtenidas de las secuencias oclusionesParcialPizarra y oclusionesTotal):
a) oclusionesParcialPizarra
b) oclusionesTotal
Dentro de las formas geométricas utilizadas habitualmente para identificar
diferentes partes del cuerpo, se ha optado por las formas elípticas, dada la
semejanza de una cabeza aislada del cuerpo con una de estas formas, tanto de
frente (como los primeros ejemplos en las imágenes de oclusionesParcialPizarra)
como de perfil. Sin embargo, este análisis no es tan trivial cuando las formas
comparadas incluyen partes del cuerpo (como en las dos, o incluso tres, últimas
imágenes seleccionadas en a) de la secuencia oclusionesParcialPizarra), o cuando
tenemos tan sólo una sección de la cabeza, que además de ser pequeña puede
arrastrar las problemáticas ya comentadas en la introducción (como son los
primeros ejemplos de oclusionesTotal).
Es interesante mencionar que se han encontrado referencias del estudio a través de
elipses en multitud de áreas, siendo ejemplos interesantes los encontrados en [6]
(donde se realiza un tratamiento matemáticamente sofisticado para la identificación
de formas celulares malignas) o en [12] (con el objetivo de hacer un seguimiento
del movimiento de la cabeza). Sobre todo el primero da una idea del potencial que
tiene el uso de esta forma geométrica.
La ecuación general de la elipse se podría escribir:
 x − x0   y − y0 

 +
 = 1; a > 0, b > 0
 a   b 
2
La ecuación de la elipse:
2
2
c
b
< 1 , siendo c la distancia a los focos.
a
a
El área tiene una ecuación sencilla: Área = π ⋅ a ⋅ b
Si a > b , la excentricidad es
ε = 1−   =
El perímetro, sin embargo, requiere de una suma infinita de términos, pudiéndose
obtener aproximaciones. Por ejemplo, partiendo de su forma de serie infinita:
2
∞

 ε2 ε4 ε6

 (2n − 2)!  2 n 




ε
π
Per = π ⋅ (a + b) ⋅ 1 + ∑ 
⋅

=
⋅
(
a
+
b
)
⋅
1
+
+
+
+
...
2 n −1 

4
64
256
 n =1  n!⋅(n − 1)!⋅2





De donde podríamos extraer la aproximación:
 ε2 
Per = π ⋅ (a + b) ⋅ 1 + 
4

Cuya validez dependerá de la excentricidad, cuanto más cercana a 0 (una forma
elíptica próxima a una circunferencia) más se acercará al valor exacto.
Para la forma exacta, el círculo, la relación entre su perímetro al cuadrado y su área
es una constante:
 Per 2 
(2π ) 2 ⋅ r 2


=
≈ 12.56
2
Area
π
⋅
r

Círculo
Esto mismo sucede para el cuadrado (=16) y para el triángulo (=20.8).
Siguiendo este razonamiento se ha calculado una aproximación a esta relación para
el caso de la elipse:
 Per 2 
a b
π 2 ⋅ ( a + b) 2



≈
= π2 + + 
b a
π ⋅ a ⋅b

 Area  Elipse
En los cálculos realizados en el programa de pruebas, esta aproximación no se
utiliza directamente, ya que se calcula el perímetro con una aproximación hasta el
tercer término (
ε4
64
), mientras que el área se calcula con exactitud. De ambos
cálculos obtenemos la relación anterior, que tendrá mayor validez en caso de
excentricidades cercanas a 1 (caso en el que la relación obtenida diverge).
Es indudable que para acotar con este valor diferentes rangos de formas elípticas,
deberíamos recurrir a un sistema de clasificación de patrones, ya que el valor que
buscaremos en cada caso variará su posición.
Para tratar de solventar este problema, se propone una magnitud como
aproximación a un invariante ante cambios de escala. La hipótesis consiste en
suponer que:
 Per 2 
 Per 2 

 ≈ 

 Area  Blob  Area  ElipseEstimada
O de forma más genérica, considerando C un coefiente constante y cercano a 1:
 Per 2 
 Per 2 

 ≈ C ⋅ 

 Area  Blob
 Area  ElipseEstimada
Esto se realiza estudiando los valores del coeficiente C, aplicándolo a tres patrones
de elipses diferentes. Como extensión, teniendo en cuenta la irregularidad de
algunas imágenes, también se propone el estudio de la zona que nos da la unión de
todas las regiones convexas del blob:
 Per 2 
 Per 2 



≈ C ⋅ 
 Area  BlobConvexo
 Area  ElipseEstimada
SOFTWARE DE APOYO DESARROLLADO ([15])
Entorno de desarrollo
El lenguaje de programación utilizado es C++, permitiendo la integración de la
librería OpenCV ([18]) y de un desarrollo para la detección de blobs cuyo buen
comportamiento ha sido comprobado en los ensayos ([19]).
El entorno de desarrollo utilizado es el eclipse, con el compilador de mingw y las
librerías de interfaz gráfico QT.
La instalación se realiza a través de un instalable, que se encarga de situar las
librerías necesarias en el directorio de instalación, evitando así instalar software
adicional. La generación de la instalación se ha llevado a cabo con el añadido
EclipseNSIS.
Características y Uso
La estructura de las clases se ha documentado en formato HTML (generada con
doxygen), dándose la posibilidad de incluir esta documentación al instalar. Para el
tema que nos ocupa, todo el desarrollo necesario se puede encontrar en los ficheros
fuente: mainFrame.cpp / .h, mainFrame.ui (QT).
El interfaz de la aplicación se muestra a continuación:
Debido a que este interfaz ha sido utilizado para el desarrollo de otras pruebas,
algunas de las funciones se pueden descartar, en concreto de la pantalla principal
utilizaremos el menú File (para seleccionar la secuencia, aceptándose los formatos
de entrada “jpg/jpeg/png”), el valor de FPS (para el caso de secuencia automática)
el marcador Thres (que es utilizado para invertir los colores), todas las opciones de
la zona marcada como Blob detection y los botones (que ofrecen una opción
automática que irá procesando las imágenes al ritmo indicado en FPS, siempre y
cuando la secuencia numérica del nombre de los archivos sea consecutiva, o la
opción paso a paso, que habilitará los botones para avanzar y retroceder).
Una vez se selecciona desde File el directorio en el que tenemos la secuencia, el
programa las podrá cargar por orden (según su nombre), mostrando la ruta en
Path y el nombre de la imagen actual en Base Name. Una configuración habitual de
pruebas es la siguiente:
Donde tras presionar el botón showStepByStep se puede, por un lado visualizar el
tratamiento de la imagen (con las opciones de Activate y Head de la zona Blob
detection marcadas, aplicándole el filtro indicado en Detection Filter que se
describen más adelante) y, por otro lado, se pueden obtener un conjunto de logs
cuyo formato dependerá de la opción Log.
En concreto, se ha llevado a cabo el desarrollo de cuatro tipos de logs distinto:
• Default: Imprime gran cantidad de propiedades que se han utilizado para el
estudio de los blobs, características y recuento.
• General: Imprime valores generales de los blobs, independientes del tipo de
filtro utilizado para la detección de la cabeza, con un formato adecuado para
exportar fácilmente a una hoja de cálculo.
• Ellipse: Imprime valores específicos y relacionados con el método de
detección (ajuste elíptico del blob), con el mismo formato del punto anterior.
• Results: Imprime 0 por cada blob detectado e identificado negativamente
como cabeza, o 1 para los identificados positivamente.
DETECCIÓN DE BLOBS
El algoritmo para la detección está basado en el código de Dave Grossman,
implementado a través de la librería BlobsLib ([19]), que consiste en una técnica de
rastreo de la imagen similar a la realizada por los televisores con rayo de
electrones. Realiza dos pasadas, en la primera se transforma la imagen en blanco y
negro en códigos, mientras que en la segunda va procesando estos códigos en filas
consecutivas, estudiando 13 propiedades para cada región.
Como ya se ha mencionado, para todas las pruebas se hace la inversión de colores,
ya que el algoritmo utilizado hace la consideración de tener un borde blanco, dando
lugar a detecciones erróneas con blobs próximos a las paredes. Para ello será
necesario mantener marcada la opción Thres. Esta opción se complementa con el
filtro incluido en la detección de los blobs, que la limita a los blobs a aquellos con su
color medio distinto de blanco, lo que evita la detección de contornos internos
blancos.
En lo que se refiere al código, la función que se encarga de la detección de los blobs
es mainFrame::applyBlob. La función utilizada para imprimir los bordes, tanto los
del blob como los de la elipse en caso de aplicar filtros elípticos (como por ejemplo
desde el filtro 1 hasta el filtro 6), es mainFrame::printBorders.
IDENTIFICACIÓN DE LA CABEZA
La función que se encarga de identificar la cabeza se ha denominado
mainFrame::headDetection,
que
es
llamada
desde
la
función
mainFrame::printBorders en caso de estar marcada la opción Head, pintando en
color rojo el marco del blob considerado como positivo, permitiendo una referencia
visual.
Nivel de Blob
Para obtener conclusiones sobre los blobs, el recuento se hace sobre los mismos,
calculando el número de blobs con cada clase y disponiendo así de porcentajes de
acierto frente al total de blobs, en lugar de hacerlo sobre el total de imágenes.
Con este objetivo, se han realizado los cambios oportunos en la aplicación para
recoger la totalidad de los blobs, además de una serie de propiedades que se
podrán comparar con un patrón elíptico.
Los cálculos realizados sobre las características de los blobs se encuentran todos en
[5]. El resultado, en lo que se refiere a la detección de cada tipo, ha variado
ligeramente sobre las consideraciones iniciales procedentes del estudio de las
imágenes, tomando esto como un proceso de depuración en una segunda
visualización de las imágenes para el recuento de blobs (la hoja Blobs de [5]):
BLOBS
POSITIVOS
(SOLO CABEZA)
oclusionesParcialPizarra
15
BLOBS
POSITIVOS
(PARTE
CUERPO)
2
oclusionesTotal
camCentrada-LRSalida
camCentrada-LRSalida2
9
337
52
0
58
240
BLOBS NEGATIVOS
(CONSIDERANDO
SOLO CASOS CON
CABEZA)
137
BLOBS NEGATIVOS
(CONSIDERANDO
BLOBS CON PARTE
CUERPO)
135
TOTAL
BLOBS
89
1967
1554
89
1909
1314
98
2304
1606
152
Para estudiar las características de cada uno de los blobs, se han llevado a cabo
varios tipos de ajuste entre el blob y una posible elipse:
(a) Ajustada a la forma del blob, facilitada por la librería BlobsLib: Forma
sugerida por los ejemplos más compactos o los distribuidos de forma poco
uniforme:
(b) Ajustada al rectángulo que recubre el blob: También sugerida por blobs
compactos, con un buen ajuste al cajón que lo recubre:
(c) Ajustada al rectángulo del doble de alto: Sugerida por blobs cuyos límites
inferiores tienen un ancho que coincide prácticamente con los del ancho
(podrían considerarse aquellos que incluyen parte de los hombros, sobre
todo si consideramos la conexión de los puntos convexos del blob):
En cada uno de ellos se permite elegir entre seleccionar una orientación de 0º para
la elipse, que con los ejes habituales (x creciente hacia la zona derecha de la
pantalla e y creciente hacia arriba) las elipses salen orientadas hacia arriba, o la
orientación indicada por los puntos del blob, que nos asegura esté en el eje del
objeto.
A continuación se muestran ejemplos con estas combinaciones:
a)
0º Orientación
Orientación blob
b)
0º Orientación
Orientación blob
c)
0º Orientación
Orientación blob
Los resultados de la orientación no han sido utilizados finalmente, a pesar de
haberse valorado en más de una ocasión.
En primer lugar se han realizado unas pruebas para obtener los valores sobre las
características generales del blob y particulares de cada ajuste elíptico, para cada
una de las secuencias. Los resultados de estas pruebas son extensos y se incluyen
en ficheros a parte, dentro del directorio pruebas del entregable (los que tienen la
extensión xls en el nombre, han sido realizados específicamente para el traslado de
los datos a la hoja de cálculo):
oclusionesParcialPizarra
oclusionesTotal
camCentrada-LRSalida
camCentrada-LRSalida2
oclusionesParcialPizarra_ElipseBlobsLib.txt
oclusionesParcialPizarra_ElipseBlobsLib_xls.txt
oclusionesParcialPizarra_ElipseCaja.txt
oclusionesParcialPizarra_ElipseCaja_xls.txt
oclusionesParcialPizarra_ElipseDobleCaja.txt
oclusionesParcialPizarra_ElipseDobleCaja_xls.txt
oclusionesParcialPizarra_Generales_xls.txt
oclusionesTotal_ElipseBlobsLib.txt
oclusionesTotal_ElipseBlobsLib_xls.txt
oclusionesTotal_ElipseCaja.txt
oclusionesTotal_ElipseCaja_xls.txt
oclusionesTotal_ElipseDobleCaja.txt
oclusionesTotal_ElipseDobleCaja_xls.txt
oclusionesTotal_Generales_xls.txt
camCentrada-LRSalida_ElipseBlobsLib.txt
camCentrada-LRSalida_ElipseBlobsLib_xls.txt
camCentrada-LRSalida_ElipseCaja.txt
camCentrada-LRSalida_ElipseCaja_xls.txt
camCentrada-LRSalida_ElipseDobleCaja.txt
camCentrada-LRSalida_ElipseDobleCaja_xls.txt
camCentrada-LRSalida_Generales_xls.txt
camCentrada-LRSalida2_ElipseBlobsLib.txt
camCentrada-LRSalida2_ElipseBlobsLib_xls.txt
camCentrada-LRSalida2_ElipseCaja.txt
camCentrada-LRSalida2_ElipseCaja_xls.txt
camCentrada-LRSalida2_ElipseDobleCaja.txt
camCentrada-LRSalida2_ElipseDobleCaja_xls.txt
camCentrada-LRSalida2_Generales_xls.txt
Los ficheros con _Generales en su nombre contienen los datos obtenidos para los
blobs de una secuencia: Área, Perímetro, Área de la zona uniendo los puntos
convexos, Perímetro de esta zona, Relación de áreas (área del blob entre área de la
zona convexa), Relación de perímetros (perímetro del blob entre perímetro de la
zona convexa), compactado o agrupapiento, relación entre el cuadrado del
perímetro y el área, Alto, Ancho y relación entre ambos.
De entre estas características se han extraido las que se van a utilizar en la hoja de
cálculo [5], donde también se incluyen los datos específicos de los distintos ajustes
elípticos. Los valores marcados en la hoja de cálculo con gris son realizados en la
propia hoja de cálculo, los demás se obtienen directamente del log de la aplicación.
Se parte de la primera secuencia oclusionesParcialPizarra, que al ser un número
reducido de ejemplos, se han obtenido las propiedades para todos los blobs
considerados como cabeza o cabeza con cuerpo, haciéndose una copia de
referencia de la imagen en la que aparece la cabeza. Al final, se hace un recuento
de blobs (que parte del análisis de las imágenes) y para el resto de propiedades se
acotan los valores de las mismas en la totalidad de los blobs en los que se ha
considerado apropiada la detección de la cabeza (hoja oclusionesParcialPizarra de
[5]) y en la totalidad de blobs sin tener en cuenta la detección (hoja
oclusionesParcialPizarra_Res de [5]).
El objetivo es partir de una acotación simple, para tratar de encontrar criterios más
complejos a medida que ensaya con el resto de secuencias, probando la eficiencia
de cada criterio con cada una de las secuencias y poder evaluar mejoras futuras.
Los datos generales obtenidos para el total de blobs de esta secuencia, anotados en
la hoja oclusionesParcialPizarra de [5], nos dan los siguientes resultados para los
casos considerados positivos:
Calculando
únicamente
los
límites
oclusionesParcialPizarra_Res de [5]):
para
estos
casos
(en
la
hoja
Con las cotas (máximo y mínimo) se lleva a cabo el primer ensayo de función de
detección, tratando de llevar a cabo un procedimiento de mejora basado en la
observación del comportamiento con los blobs de otras secuencias. Las cotas
establecidas son:
⇒ 1.3<Compactado<4.12
⇒ 14.22<(perímetro convexo)2/(Área convexa)<22.27
⇒ 16.38<(Perímetro del Blob)2/(Área del Blob)<51.74
⇒ 0.54< (área del blob)/(área convexa)<1.06
⇒ 1.05< (perímetro del blob)/(perímetro convexo)<1.24
Además, se acotará por las áreas y los perímetros límites obtenidos
experimentalmente sobre la totalidad de blobs, descartando un caso excesivamente
pequeño (de la secuencia oclusionesTotal), lo cual parece lógico por las propias
deficiencias de resolución. Esta condición establece los siguientes límites (aplicados
a la totalidad de filtros):
⇒ 62<(área del blob)<1759
⇒ 45<(perímetro del blob)<400
Para valorar la calidad de los resultados se aplica un método habitual para evaluar
la bonanza de las soluciones en problemas de clasificación similares, consistente en
[ejemplos positivos clasificados correctamente + ejemplos negativos clasificados
correctamente] / [Total ejemplos]. El resultado obtenido (todos los resultados
obtenidos de esta índole se encuentran en la hoja nombreSecuencia_Res en [5])
es:
Acertados
(Cabeza)
Acertados
(Cabeza y
Cuerpo)
0,84211
0,85526
Este filtro se considera el Filtro 0, desde la aplicación.
Es interesante notar que la calidad obtenida considerando todos los casos negativos
es de 0.9013 (sólo cabeza) y 0.8882 (cabeza y parte del cuerpo).
Para mejorar este filtro se realiza el ajuste según la elipse que mejor se ajusta al
blob, realizada a través de la librería blobsLib. Los resultados se muestran a
continuación:
Con las cotas correspondientes a los blobs positivos:
Añadiendo las relaciones obtenidas con la elipse calculada por la librería BlobsLib,
aplicándola a todos los blobs positivos:
⇒ [filtro 0]
⇒ 0.66<(área del blob)/(área elipse)<0.96
⇒ 0.9<(perímetro del blob)/(perímetro de elipse)<1.33
⇒ 12.7<(perímetro elipse)2/(área de la elipse)<25.27
⇒ 0.72<(área elipse)/(área zona convexa blob)<1.57
El resultado es notablemente mejor para esta secuencia:
Acertados
(Cabeza)
Acertados
(Cabeza y
Cuerpo)
0,86842
0,88158
A este filtro lo denominaremos Filtro 1.
Si eliminamos las tres últimas detecciones, que al contener parte del cuerpo (una
de ellas se ha anotado como cabeza por contener una pequeña porción), son las
que producen más desviaciones, las relaciones quedarían (valores máximo y
mínimo sin cuerpo):
⇒ 1.3<Compactado<1.7
⇒ 14.22<(perímetro convexo)2/(Área convexa)<16.16
⇒ 16.38<(Perímetro del Blob)2/(Área del Blob)<21.32
⇒ 0.88< (área del blob)/(área convexa)<1.06
⇒ 1.05< (perímetro del blob)/(perímetro convexo)<1.14
Denominando a este conjunto filtro 0 sin cuerpo, uniéndole las relaciones de la
elipse acotadas de la misma forma tendríamos:
⇒
⇒
⇒
⇒
⇒
[filtro 0 sin cuerpo]
0.66<(área del blob)/(área elipse)<0.96
0.9<(perímetro del blob)/(perímetro de elipse)<1.1
12.7<(perímetro elipse)2/(área de la elipse)<19.64
0.96<(área elipse)/(área zona convexa blob)<1.57
El resultado obtenido es el siguiente:
Acertados
(Cabeza)
Acertados
(Cabeza y
Cuerpo)
0,98026
0,96711
A este filtro lo denominaremos Filtro 2.
A continuación se ejecuta la aplicación para obtener las características relacionadas
con una elipse ajustada a la caja que contiene al blob, dándose los siguientes
resultados:
Con las siguientes cotas:
Utilizando estos resultados de la misma forma, fabricamos los conjuntos de
condiciones que llamaremos filtro 3 y filtro 4:
filtro 3
filtro 4
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
[filtro 0]
0.49<(área del blob)/(área elipse)<1.07
0.93<(perímetro del blob)/(perímetro de elipse)<1.16
13.23<(perímetro elipse)2/(área de la elipse)<24.99
0.93<(área elipse)/(área zona convexa blob)<1.19
[filtro 0 sin cuerpo]
0.81<(área del blob)/(área elipse)<1.07
0.95<(perímetro del blob)/(perímetro de elipse)<1.16
13.23<(perímetro elipse)2/(área de la elipse)<19.34
0.93<(área elipse)/(área zona convexa blob)<1.11
Los resultados obtenidos para esta secuencia con estos filtros son:
Filtro 3
Filtro 4
Acertados (Cabeza)
0,92105
0,98684
Acertados (Cabeza y Cuerpo)
0,93421
0,97368
De la misma forma, los valores obtenidos para la semi-elipse ajustada a la caja con
el doble de alto:
Como era de esperar, la información sobre las áreas es idéntica a la de la elipse
ajustada a la caja, ya que sus áreas mantienen la relación del doble, por lo que
media de la segunda es el área de la primera.
Las cotas obtenidas en este caso:
Fabricando las condiciones:
filtro 5
filtro 6
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
[filtro 0]
0.49<(área del blob)/(área elipse)<1.07
0.9<(perímetro del blob)/(perímetro de elipse)<1.06
17.43<(perímetro elipse)2/(área de la elipse)<26.1
0.93<(área elipse)/(área zona convexa blob)<1.19
[filtro 0 sin cuerpo]
0.81<(área del blob)/(área elipse)<1.07
0.9<(perímetro del blob)/(perímetro de elipse)<1.03
17.43<(perímetro elipse)2/(área de la elipse)<21.54
0.93<(área elipse)/(área zona convexa blob)<1.11
Que dan los siguientes resultados:
Acertados (Cabeza)
Acertados (Cabeza y Cuerpo)
0,92105
0,93421
0,98684
0,97368
Filtro 5
Filtro 6
A continuación se han aplicado estos filtros al resto de secuencias para valorarlos
en un sentido más general, se muestra todo en la siguiente tabla:
Todos Negativos
Filtro 0
Filtro 1
Filtro 2
Filtro 3
Filtro 4
Filtro 5
Filtro 6
oclusionesParcialPizarra
0,90132
0,88816
0,84211
0,85526
0,86842
0,88158
0,98026
0,96711
0,92105
0,93421
0,98684
0,97368
0,92105
0,93421
0,98684
0,97368
oclusionesTotal
0,90816
0,90816
0,85714
0,85714
0,85714
0,85714
0,90816
0,90816
0,91837
0,91837
0,90816
0,90816
0,90816
0,90816
0,90816
0,90816
camCentrada-LRSalida
0,85373
0,82856
0,81684
0,80729
0,86415
0,85113
0,86589
0,84071
0,87240
0,85503
0,86762
0,84245
0,86762
0,84939
0,86502
0,83984
camCentrada-LRSalida2
0,96762
0,81818
0,69925
0,62080
0,82565
0,72478
0,92279
0,77335
0,83873
0,71046
0,94396
0,79452
0,83499
0,70672
0,93711
0,78767
Observaciones:
• Filtros como el 2, el 4, el 5 o el 6 en la secuencia oclusionesTotal no
detectan ninguna cabeza, dando el mismo resultado, por ejemplo, que un
algoritmo que considerara todos los casos con la clase de la mayoría
(negativa). El único algoritmo que mejora la calidad, con la medida utilizada,
es el 3.
• Para la secuencia camCentrada-LRSalida únicamente no supera (en alguno u
otro caso) el resultado de un algoritmo como el mencionado en el punto
anterior, el filtro 0. No obstante la mejora es muy leve en todos los casos.
• Ninguno de los filtros nos sirve para mejorar la puntuación de la
consideración de todos los casos negativos en la secuencia camCentradaLRSalida, ya que aquellos que localizan casos positivos también localizan
casos negativos como los positivos, bajando la relación con la que se está
midiendo la calidad. Además, en especial en esta secuencia, la mayoría de
los casos considerados como positivos contienen partes substanciales del
cuerpo, por lo que será necesario hacer algún otro ajuste.
• Dos problemas fundamentales: (1) La no invarianza de las características
ante cambios de relación. (2) La limitación impuesta por las cotas
establecidas por casos de entrenamiento que no representan la totalidad.
Los mismos cálculos realizados para la primera secuencia, se repite para el resto,
los resultados obtenidos se pueden encontrar en las hojas oclusionesTotal,
camCentrada-LRSalida, camCentrada-LRSalida2 (para todos los blobs) y los
del mismo nombre pero con la finalización _Res (para los blobs que se considerados
como positivos), de [5].
A continuación se han calculado unas cotas globales, sobre los límites encontrados
para cada los blobs que queremos detectar de cada secuencia (estos valores se
pueden encontrar en la hoja Límites de [5]).
El estudio de estos límites nos muestra cierto grado de desacierto en los criterios,
debido a que los totales amplian los rangos en sus partes inferior y superior. Sin
embargo, la ampliación de estos rangos únicamente conduce a la detección de
demasiadas zonas, bajando considerablemente la calidad de la solución. Esto es un
claro indicador de que la segmentación de los dominios positivos y negativos
requiere de formulaciones más complejas a la simple división lineal que producen
las cotas encontradas. Dos formas que se consideran apropiadas para solucionar
este problema serían:
(1) Con estos mismos datos, utilizar un algoritmo de clasificación capaz de formular
una solución que cubra las instancias positivas y negativas agrupándolas en
bloques, tal y como podría ser una red neuronal de más de una capa intermedia.
(2) Replanteando el problema en término del estudio de la pertenencia de los
puntos de una zona del blob a una forma geométrica.
La primera solución podría ser una continuación de este problema, mientras que la
segunda requiere de modificaciones importantes en la lógica utilizada. Puesto que
ambas extienden en exceso el trabajo realizado, se ha optado por proceder a la
acotación manual, teniendo en cuenta los dos problemas ya mencionados a los que
nos enfrentamos (invarianza ante cambios de escala y reducción de los casos
negativos).
A pesar de que no se hayan encontrado invariantes para las elipses, tal y como se
menciona en el análisis geométrico, se toman como referencia las relaciones entre
los perímetros al cuadrado y el área, manteniendo el de tamaños límite (que
resuelve el problema de detección de pequeños puntos y de áreas demasiado
grandes).
Con este criterio se pretende poner remedio a los cambios de escala, cuestión que
afecta a imágenes semejantes de distinto tamaño a las consideradas para realizar
el filtro. Se espera que la relación entre el perímetro al cuadrado y el área del blob
(y el cubierto por sus zonas convexas conectadas) sea próxima al calculado con la
aproximación de la elipse (esta relación podría mejorarse teniendo en cuenta la
orientación). Llamamos a la relación entre, por un lado el perímetro al cuadrado del
blob entre su área y, por otro, el perímetro al cuadrado de la elipse entre su área,
“Relación Blob”; llamamos “Relación Convexa” a la de la zona convexa con la de la
elipse. Tendríamos:
Filtro 0 Invariante
(generales)
Filtro 0 Invariante Sin Cuerpo
(generales)
Filtro 1 Invariante
(blobsLib)
Filtro 2 Invariante
(blobsLib – sin cuerpo)
Filtro 3 Invariante
(AdjCaja)
Filtro 4 Invariante
(AdjCaja – sin cuerpo)
Filtro 5 Invariante
(DobleCaja)
Filtro 6 Invariante
(DobleCaja – sin cuerpo)
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
[Filtro de pequeños y grandes]
14.22<(perímetro convexo)2/(Área convexa)<22.27
16.38<(Perímetro del Blob)2/(Área del Blob)<51.74
[Filtro de pequeños y grandes]
14.22<(perímetro convexo)2/(Área convexa)<16.16
16.38<(Perímetro del Blob)2/(Área del Blob)<21.32
[filtro 0 Invariante]
0.7824<(Relación convexa)/(Relación elipse)<1.2347
1.0011<(Relación blob)/(Relación elipse)<2.3417
[filtro 0 Invariante Sin Cuerpo]
0.7824<(Relación convexa)/(Relación elipse)<1.2347
1.0011<(Relación blob)/(Relación elipse)<1.4363
[filtro 0 Invariante]
0.8263<(Relación convexa)/(Relación elipse)<1.1126
0.9548<(Relación blob)/(Relación elipse)<2.3172
[filtro 0 Invariante Sin Cuerpo]
0.8263<(Relación convexa)/(Relación elipse)<1.1126
0.9548<(Relación blob)/(Relación elipse)<1.3003
[filtro 0 Invariante]
0.7387<(Relación convexa)/(Relación elipse)<0.9273
0.8964<(Relación blob)/(Relación elipse)<2.1732
[filtro 0 Invariante Sin Cuerpo]
0.7387<(Relación convexa)/(Relación elipse)<0.9273
0.8964<(Relación blob)/(Relación elipse)< 1.0784
Los resultados obtenidos con estos filtros se pueden encontrar en las hojas de
resultados de cada secuencia (con final _Res) en [5], quedan resumidas en la tabla
que se muestra a continuación:
Todos Negativos
Filtro 0 Inv
Filtro 1 Inv
Filtro 2 Inv
Filtro 3 Inv
Filtro 4 Inv
Filtro 5 Inv
Filtro 6 Inv
oclusionesParcialPizarra
0,90132
0,88816
0,75000
0,76316
0,88816
0,90132
0,98026
0,96711
0,85526
0,86842
0,98026
0,96711
0,81579
0,82895
0,96711
0,95395
oclusionesTotal
0,90816
0,90816
0,84694
0,84694
0,85714
0,85714
0,90816
0,90816
0,84694
0,84694
0,90816
0,90816
0,85714
0,85714
0,90816
0,90816
camCentrada-LRSalida
0,85373
0,82856
0,80469
0,80295
0,84592
0,83898
0,86936
0,84418
0,83160
0,82378
0,86285
0,83854
0,81641
0,81033
0,85677
0,83247
camCentrada-LRSalida2
0,96762
0,81818
0,64197
0,59340
0,74222
0,66501
0,89601
0,74658
0,74222
0,64508
0,92279
0,77335
0,72790
0,64695
0,90349
0,75405
Observaciones:
• Es interesante notar que el rango de la relación entre la zona convexa y la
elipse no varía mucho (en el caso de la primera secuencia los valores
encontrados para las detecciones con cabeza y cuerpo no forman los límites,
como en el cálculo de otras magnitudes). Esto también es un indicador de
•
•
•
ser un parámetro muy sensible, por tanto adecuado para ser utilizado por un
sistema clasificador.
Los resultados en general parecen satisfactorios si los comparamos con los
obtenidos anteriormente con un conjunto mucho mayor de variables en
juego.
Destacan sobre los demás el comportamiento de los filtros 2, 4 y 6, siendo
éstos los más restrictivos, sugiriendo que la inclusión de un mayor número
de errores de clasificación de casos negativos en el resto, produce una
bajada en la estimación de la calidad.
En la última secuencia no se consigue mejorar la solución consistente en
clasificar todos los negativos, efecto que se produce al considerar como
casos mayoritariamente positivos a un conjunto de blobs muy desiguales,
impidiendo esto el incluirlos sin clasificar erróneamente gran parte de los
negativos.
Por último, para tratar de solventar la detección de la última secuencia con un
procedimiento similar al que se ha seguido a lo largo de todo el desarrollo,
abordando al mismo tiempo la parcialidad de las cotas encontradas a partir de la
primera secuencia, se ha realizado el promedio sobre los límites (se puede
encontrar en la hoja Límites de [5]) para verificar la desviación de la medida
considerada más sensible:
 Per 2 


entre
Area

Convexa
 Per 2 


Area

 Elipse
En concreto, se puede observar que la relación
 Per 2 


mantiene sus cotas
Area

Convexa
entre márgenes más pequeños y próximos a la relación de las elipses.
Esta observación se ha complementado con el estudio particular de la relación en el
resto de secuencias, obteniendo rangos que sin ser muy altos obtenían una calidad
baja, sobre todo por detectar en exceso (estos cálculos se pueden encontrar en las
hojas con finalización _Prueba de [5]).
Con un método de análisis de imágenes concretas de la secuencia, ensayo y error,
se han localizado límites que mejoran el resultado obtenido hasta ahora para esta
secuencia, comprobándose además que su funcionamiento también es competitivo
con el resto de secuencias de prueba.
En concreto, se han estudiado los coeficientes para las imágenes de la secuencia
que contienen una cabeza de espaldas, tales como:
El problema de detectar estas imágenes sin detectar el resto de manchas, gran
cantidad de ellas con formas similares a las elípticas, es harto difícil, habiéndose
obtenido nuevos límites (se han encontrado unos límites adecuados para la
detección basada en las dos relaciones mencionadas, incluyéndosele a posteriori un
filtro a todas las secuencias que permite restringir la detección de negativos):
Filtro 0 Sec4
(generales para la escala, incluidos a
posteriori)
Filtro 1 Invariante Sec4
(basado en blobsLib)
Filtro 2 Invariante Sec4
⇒
⇒
⇒
⇒
⇒
⇒
⇒
[Filtro de pequeños y grandes]
13<(perímetro convexo)2/(Área convexa)<16
17<(Perímetro del Blob)2/(Área del Blob)<21
[filtro 0 Sec4]
0.8<(Relación convexa)/(Relación elipse)<0.85
1<(Relación blob)/(Relación elipse)<1.2
[filtro 0 Sec4]
(basado en AdjCaja)
Filtro 3 Invariante Sec4
(basado en DobleCaja)
⇒
⇒
⇒
⇒
⇒
0.8<(Relación convexa)/(Relación elipse)<0.85
0.98<(Relación blob)/(Relación elipse)<1.1
[filtro 0 Sec4]
0.67<(Relación convexa)/(Relación elipse)<0.7
0.8<(Relación blob)/(Relación elipse)<0.9
Al ser estos filtros establecidos en rangos muy finos, se espera obtener una
clasificación más certera, también más restrictiva, que en el resto de secuencias
tendrá un efecto sobre la correcta clasificación de un número mayor de casos
negativos, obteniéndose los siguientes resultados:
Todos Negativos
Filtro 1 Inv Sec4
Filtro 2 Inv Sec4
Filtro 3 Inv Sec4
oclusionesParcialPizarra
0,90132
0,88816
0,90789
0,89474
0,91447
0,90132
0,90132
0,88816
oclusionesTotal
0,90816
0,90816
0,90816
0,90816
0,90816
0,90816
0,91837
0,91837
camCentrada-LRSalida
0,85373
0,82856
0,88108
0,85590
0,87413
0,84896
0,86675
0,84158
camCentrada-LRSalida2
0,96762
0,81818
0,97323
0,82379
0,97945
0,83001
0,98132
0,83188
Donde las peores valoraciones se obtienen precisamente para aquellos casos en los
que no se produce ninguna detección, obteniendo el mismo valor que considerando
todos negativos, los filtros 3 (en la secuencia oclusionesParcialPizarra), 1 y 2 (en la
secuencia oclusionesTotal).
Con estas relaciones más restrictivas se ha abordado, aunque sea de forma
incipiente, el problema de la ambigüedad de los rangos obtenidos de secuencias
menos restrictivas, actuando sobre características tremendamente sensibles.
CONCLUSIONES Y TRABAJO FUTURO
Una de las principales conclusiones es la tremenda dificultad que conlleva el estudio
previo de las características numéricas, a pesar de disponer de un modelo previo,
pues la desorbitada cantidad de valores acumulados (incluídos errores arrastrados
desde el preprocesado hasta los propios de la manipulación de los datos) hace la
tarea prácticamente inmanejable, sobre todo si se pretenden obtener conclusiones
empíricas sobre diferentes combinaciones de los mismos.
Desde el punto de vista computacional se ha trabajado a una velocidad de un frame
cada 50ms (20 fps), para imágenes del orden de 100 Bytes, mientras que el valor
límite estimado para imágenes del orden de 400 KB ha sido de 100ms (10 fps).
El análisis inicial parte de la exclusión de un número reducido de casos negativos, lo
que conduce hacia soluciones de baja calidad, si la medimos como el número de
aciertos entre el total de casos. Sin embargo, otras medidas serían más apropiadas
si lo que queremos es detectar la mayor parte de positivos, a pesar de la detección
de un número mayor de negativos.
Tras todas las pruebas, en el caso de estudio se ha comprobado que trabajar sobre
secuencias más restrictivas conduce a los mejores resultados desde el punto de
vista global, es decir, suponiendo un algoritmo que funcione aceptablemente para
el mayor número de secuencias posible.
El estudio con tres modelos da una idea clara del rango tan ajustado sobre el que
se situan las soluciones, obteniéndose unos resultados aceptables teniendo en
cuenta las limitaciones de no haber integrado características como el ángulo de
giro.
Destacan varios aspectos fundamentales a tener en cuenta, que podrían constituir
la evolución de este desarrollo: (1) Tratar de llevar a cabo estrategias más
reduccionistas: como por ejemplo estableciendo límites en la escena y aplicando
nuestros algoritmos a problemas muy concretos, o realizando un estudio más
acertado sobre las formas geométricas. (2) El uso de algoritmos comunes para la
clasificación de patrones con ejemplos de entrenamiento supervisados, sustituiría el
tedioso método manual de selección de características, convirtiéndola en una tarea
más eficiente. (3) El uso de algoritmos clasificadores pero con entrenamiento no
supervisado, permitiría evitar la otra gran carga de trabajo que consiste en
identificar los ejemplos de entrenamiento los positivos y los negativos, de entre
todas las imágenes para después volcarlo al nivel de blob. (4) La utilización de
algoritmos de apoyo mixtos, capaces de aprender de forma supervisada y no
supervisada, permitirían carga de nuevos patrones y al mismo tiempo eficiencia
computacional.
REFERENCIAS
[1] Encarna Folgado, Mariano Rincón, Enrique J. Carmona, Margarita Bachiller. A
block-based model for monitoring of human activity. UNED, 2007.
[2] Nakazawa, H. Kato y S. Inokuchi. Human Tracking Using Distributed Vision
Systems - Luo, Contributed Video Systems. In International Conference on
Pattern Recognition, 1998.
[3] A. Utsumi, H. Mori, J. Ohya y M. Yachida. Multiple-View-Based gid Tracking of
Multiple Humans. In International Conference on Pattern Recognition, 1998.
[4] T. Zhao y R. Nevatia. Tracking Multiple Humans in Complex Situations. PAMI,
Vol. 26, No. 9, pp. 1208-1221, 2004.
[5] Hoja excel parte del entregable ConjuntosEntrenamiento.xls. Incluido en el
directorio “pruebas”.
[a] ConjuntosEntrenamiento_BasadoEnImagenes.xls. Incluido en el directorio
“pruebas”.
[6] Asger Holbolth, Jan Pedersen y Eva B. Vedel Jensen. A Deformable Template
Model, with Special Reference to Elliptical Templates. In Journal of Mathematical
Imaging and Vision 17:131-137, 2002.
[7] Alper Yilmaz, Omar Javed y Mubarak Shah. Object Tracking: A Survey. 2006,
ACM Computing Surveys, Vol. 38,No. 4, Article 13, Publication date: December
2006.
[8] D. M. Gavrila. The Visual Analysis of Human Movement: A Survey. Computer
Vision and Image Understanding, Vol. 73, No. 1, January, pp. 82-98, 1999.
[9] Gerard Medioni, François Brémond, Somboon Hongeng y Ramakant Nevatia.
Event Detection and Analysis from Video Streams. IEEE Transactions on Pattern
analysis and machine intelligence, Vol. 23, No. 8, agosto 2001.
[10] Somboon Hongeng, Ram Nevatia, Francois Bremond. Video-based event
recognition: activity representation and probabilistic recognition methods.
Computer Vision and Image Understanding 96 (2004) 129-162. Received 15
March 2002; accepted 2 February 2004.
[11] Paul Smith, Mubarak Shah, Niels da Vitoria Lobo. Integrating multiple levels
of zoom to enable activity analysis. Computer Vision and Image Understanding
103 (2006) 33-51. Received 10 July 2004; accepted 20 February 2006.
[12] Marius D. Cordea, Emil M. Petriu, Nicolas D. Georganas, Dorina C. Petriu y
Thomas E. Whalen.
Realtime 2 D head pose recovery for model based
videocoding. IEEE Transactions on instrumentation and measurement, Vol. 50,
No. 4, August 2001.
[13] Rita Cucchiara. Multimedia Surveillance Systems. In VSSN’05, November 11,
2005, Singapore. 2005 ACM 1-59593-242-9/05/0011.
[14] Secuencias de prueba proporcionadas por equipo docente, denominadas
oclusionesParcialPizarra, oclusionesTotal, camCentrada-LRSalida, camCentradaLRSalida2.
[15] Programa de apoyo incluído en el directorio “programa” en forma de
instalable para Windows.
[16] Gang Hua, Ying Wu. A decentralized probabilistic approach to articulated
body tracking. Computer Vision and Image Understanding, disponible en
ScienceDirect. 2007 Elsevier.
[17] Stefaan Tibau, Bert Willems y Johan Wagemans. The influence of twodimensional stimulus properties in a reconstruction task with minimal
information stimuli. Spatial Vision, Vol. 13, No. 4, pp. 359–376 (2000)
[18] Open Computer Vision Library. Librería utilizada para el tratamiento digital
de imágenes, se puede descargar desde:
http://sourceforge.net/projects/opencvlibrary/
[19] BlobsLib, librería para la detección de blobs, preparada inicialmente para el
entorno Visual Studio pero incluida, en este caso, como parte de los fuentes. La
librería se puede encontrar entre los ficheros enviados a los foros de OpenCV.
Descargar