ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE...

117
ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE SEVILLA Ingeniería Superior de Telecomunicación Proyecto Fin de Carrera Evaluación de prestaciones en la detección de movimiento y seguimiento de objetos con plataformas convencionales de procesamiento digital de imágenes. Autor del proyecto: Raúl González Marcelo Tutor del proyecto: Ricardo Carmona Galán Ponente del proyecto: Óscar Guerra Vinuesa Departamento de Electrónica y Electromagnetismo Universidad de Sevilla Instituto de Microelectrónica de Sevilla-CNM-CSIC Sevilla, 14 de Julio de 2006

Transcript of ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE...

Page 1: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE SEVILLA

Ingeniería Superior de Telecomunicación

Proyecto Fin de Carrera

Evaluación de prestaciones en la detección de

movimiento y seguimiento de objetos con plataformas convencionales de procesamiento digital de imágenes.

Autor del proyecto:

Raúl González Marcelo

Tutor del proyecto: Ricardo Carmona Galán

Ponente del proyecto:

Óscar Guerra Vinuesa

Departamento de Electrónica y Electromagnetismo Universidad de Sevilla

Instituto de Microelectrónica de Sevilla-CNM-CSIC

Sevilla, 14 de Julio de 2006

Page 2: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

6

Page 3: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

7

Page 4: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

8

Page 5: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

9

Agradecimientos: Que este proyecto haya llegado a buen término sólo ha sido posible gracias a la los buenos consejos, paciencia y dirección de Ricardo Carmona, del que he aprendido mucho más de lo que reflejan unas pocas líneas. Gracias a mis compañeros de facultad, en especial a Pablo, Fernando y Antonio, porque siempre estuvieron cuando los necesité. Gracias a mi familia por su apoyo incondicional durante tanto tiempo, en especial a mi padre Julián y a mi hermano David. Gracias a Isa, porque estar a mi lado y sacar siempre lo mejor de mí. Este proyecto está especialmente dedicado a la persona que me enseñó a tener mi propia idea del mundo y a luchar por lo que de verdad sientes o crees, a mi madre Cristina, en recuerdo.

Page 6: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

10

Page 7: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

11

ÍNDICE 1. Introducción …………………………………………………………………... 14 1.1 Motivaciones para la implementación de algoritmos de visión en

plataformas integradas…………………………………………………….. 14 1.2 Dificultades para la evaluación y establecimiento de benchmarks……….. 15 1.3 Propuesta y estructura de la memoria………………………………………16

2. Propuesta de aplicación típica: detección de movimiento y seguimiento de objetos……………………………………………………………………….17 2.1. Planteamiento de problema tipo…………………………………………... 17 2.1.1 Detección de movimiento……………………………………………19 2.1.1.1 Filtrado de la imagen digital ……………………………….. 19 2.1.1.2 Detección de movimiento…………………………………… 21 2.1.1.3 Segmentación de los objetos que se han movido…………….26 2.1.2 Seguimiento de objetivos…………………………………………….27 2.2. Esquema general de los algoritmos a implementar………………………...32 3. Descripción de la plataforma para el desarrollo de sistemas de visión…………33 3.1 Matlab 6.5…………………………………………………………………..33 3.2 Code Componer Studio……………………………………………………..34 3.3 Cámara digital HP Photosmart 735…………………………………………36 3.4 Cámara digital monocroma VC2065……………………………………….38 3.5 DSP TMSC6210…………………………………………………………… 39 4. Implementación de los algoritmos de detección de movimiento y de seguimiento de objetos………………………………………………………41 4.1 Implementación de las funciones del flujo de procesamiento………………44 4.1.1 Filtrado………………………………………………………………..44 4.1.1.1 Filtrado por el método de la media……………………………44 4.1.1.2 Filtrado por el método de la mediana…………………………45 4.1.1.3 Filtrado utilizando filtros gaussianos………………………….45 4.1.1.4 Filtrado paso de alta……………………………………………47 4.1.1.5 Conclusiones del los filtros probados………………………….48 4.1.2 Detección de movimiento……………………………………………..48 4.1.2.1 Detección de movimiento basado en comparación de patrones (Correspondencias)……………………………….48 4.1.2.2 Detección de movimiento basado en la imagen diferencia………………………………………………………59 4.1.2.3 Conclusiones del estudio para determinados

algoritmos de detección de movimiento……………………….63 4.1.3 Cálculo del umbral dinámico para binarizado post diferencia………..64 4.1.4 Crecimiento…………………………………………………………...66 4.1.5 Segmentación…………………………………………………………67 4.1.6 Determinación del centro de masas…………………………………. 68 4.1.7 Filtro de Kalman………………………………………………………70 4.1.8 Actualización de la ventana de búsqueda…………………………… 71

4.2 Resultados experimentales obtenidos a partir del análisis de distintas secuencias de imágenes………………………………………….72 4.2.1 Seguimiento a un solo objeto en movimiento…………………………..73

Page 8: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

12

4.2.2 Seguimiento de varios objetos en movimiento………………………….79 4.2.3 Resultados con una ventana de predicción menor que la ventana de posición………………………………………………82 4.2.4 Resultados obtenidos en la estimación del centro de masas usando el filtro de Kalman………………………………………………83 4.3 Programación del DSP TMSC6210 en el simulador de Code Composer Studio……………………………………………………………...84 5. Evaluación de las prestaciones y propuestas de superación de las limitaciones…………………………………………………………………86 5.1 Estimaciones sobre el comportamiento en la plataforma de Vision Components………………………………………86 5.2 Resultados de la ejecución del código en un DSP emulado…………………..87 5.3 Conclusiones…………………………………………………………………..89 6. Referencias……………………………………………………………………… 90 7. Anexos…………………………………………………………………………….92 7.1 Código Matlab………………………………………………………………...92 7.2 Código C ……………………………………………………………………..105

Page 9: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

13

Page 10: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

14

1. INTRODUCCIÓN 1.1 MOTIVACIONES PARA LA IMPLEMENTACIÓN DE ALGORITMOS DEVISIÓN EN PLATAFORMAS INTEGRADAS La aparición sucesiva, durante las últimas décadas del siglo XX, del microprocesador, por un lado, y de los láseres semiconductores y la fibra óptica por otro, permitió la expansión del uso del ordenador, tanto el los ámbitos laboral como doméstico, y la interconexión de estos ordenadores y de medios de almacenamiento masivo para la creación de redes de computadoras de escala planetaria. Después de las olas del procesamiento y de las comunicaciones, el mundo virtual soportado por las redes de ordenadores empieza a asomarse al mundo físico en lo que sería una tercera ola de innovación caracterizada por la interacción con el mundo real: la ola de los sensores [1]. En una primera fase, la aparición de nuevos materiales y el desarrollo de nuevas estructuras sensoras compatibles con las tecnologías convencionales de fabricación de circuitos integrados está posibilitando el desarrollo de nuevos sensores y la aplicación del procesamiento de señal a problemas clásicos de la ingeniería mecánica, aeronáutica, de la construcción, etc., la computación ubicua [2]. Pero en una fase más avanzada se trataría de llevar este procesamiento a todos los dispositivos que median en nuestra relación cotidiana con el entorno, o sea, dotar de cierta capacidad de cómputo a los objetos que nos rodean, y proporcionarles la capacidad de facilitarnos la vida. Es lo que viene a llamarse la inteligencia ambiental [3]. Pues bien, los objetos inteligentes que van a sustentar estos entornos inteligentes deben poder comunicarse entre ellos y ser capaces de procesar información, pero también, y esto es lo que los distingue del tipo de máquinas que se han venido desarrollando hasta ahora, deben ser capaces, de una manera pro-activa, de detectar cualquier cambio en el entorno que pueda disparar su actividad. Dicho de otro modo, estos objetos inteligentes deben poseer sensores que les permitan percibir estos cambios en el mundo físico que los rodea.

Una de las capacidades sensoras menos explotada hasta el momento en la implementación de redes inalámbricas de sensores es la visión, a pesar de que para nosotros los humanos, como primates superiores, se trata de la modalidad sensorial dominante [4], esto es, nuestra principal vía para la adquisición de información procedente del entorno. Los motivos están en la dificultad de manejar el flujo masivo de datos contenido inicialmente en el estímulo visual. En un esquema convencional, de procesamiento digital serializado, para un sistema de visión artificial, un sensor CMOS o CCD captura entre 25 y 40 imágenes por segundo, que, por mantener un tamaño práctico de las mismas, deben ser como mínimo de unos 176x144 píxeles (QCIF [5]). Esto representa un flujo de información de 0.63Mpixels/s y, si nos restringimos a imágenes en escala de grises y codificadas con una profundidad de 8 bits, tendremos una tasa de transmisión de datos de 5.04Mbps. Ya de entrada, encontramos que este flujo está por encima de la capacidad soportada por algunos protocolos estándar de comunicación inalámbrica; por ejemplo, la tasa máxima de transmisión en Bluetooth (IEEE 802.15) es de 732kbps [6]. Por otro lado, en el caso del procesamiento de imágenes, realizar la capacidad de cómputo requerida para la operación en tiempo real en medio de restricciones de consumo de potencia no es tan sencillo, y si estamos pensando en dotar de la capacidad de visión a dispositivos autónomos la eficiencia energética es una prioridad. Supongamos una aplicación hipotética en la que necesitásemos detectar los puntos más brillantes de la imagen captada por un sensor QCIF. Mediante el procesamiento a nivel local puede reducirse de manera drástica el

Page 11: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

15

flujo de datos a transmitir. Por ejemplo, sobre las imágenes capturadas puede realizarse un primer filtrado para eliminar ruido, mediante una convolución con una máscara de 3x3 pesos, y a continuación una umbralización para detectar los puntos con mayor luminancia, cuya localización en el plano focal va a ser la única información que finalmente se transmitirá por la red. Este proceso necesita, sin contar con los accesos a memoria, 9 multiplicaciones, 8 sumas y una comparación por cada elemento de la imagen. Para el flujo de píxeles del que estamos hablando, la potencia de cómputo requerida es de 11.34 MOPS1 [7]. Si nos fijamos en los microprocesadores de propósito general más recientes, el Intel Pentium 4EE (EE de Extreme Edition) [8], es capaz de realizar 9726MIPS2 operando a una frecuencia de reloj de 3.2GHz y consumiendo para ello 103W.

Se plantea entonces como una necesidad el desarrollo de hardware específico para la implementación del procesamiento de imágenes, en primer término, y de algoritmos de visión artificial, en los dispositivos autónomos inteligentes que van a constituir la infraestructura de la inteligencia ambiental. Si no se reduce el coste energético de cada operación, estos dispositivos serán inteligentes o autónomos, pero nunca las dos cosas a la vez.

1.2 DIFICULTADES PARA LA EVALUACIÓN Y ESTABLECIMIENTO DE BENCHMARKS

El desarrollo de hardware específico para el procesamiento de imágenes en tiempo real no puede plantearse en términos del esquema convencional de procesamiento serializado. Esto desemboca en la mayoría de los casos en limitaciones a la hora de cumplir las especificaciones temporales de la aplicación. Una aproximación alternativa es el desarrollo de arquitecturas adaptadas a la naturaleza del problema. Se trata básicamente de extraer la información útil del estímulo visual y nos encontramos con dificultades a la hora de poner en juego la capacidad de cómputo necesaria para trabajar con señales multidimensionales masivas. El uso de modelos de procesamiento inspirados en la biología [9], en los que la emulación se da tanto a nivel arquitectural como circuital [10], puede conducirnos a implementaciones muy eficientes desde el punto de vista energético [11]. Uno de los problemas que nos encontramos en el desarrollo de esquemas de procesamiento de la información visual alternativos es la dificultad de evaluar correctamente la bondad de la implementación propuesta. En lo concerniente a la calidad de la imagen percibida, a pesar de la componente subjetiva de la percepción, puede decirse que si la función principal del ojo humano es extraer información estructural de la escena, una medida de la distorsión estructural de la imagen debe ser una buena aproximación a la medida de la calidad de la misma [12]. Pero más allá de esto, la evaluación de las prestaciones de un sistema de visión estará muy ligada a las características de la aplicación en concreto. Va a ser muy difícil por tanto establecer unos estándares de calidad genéricos para sistemas de visión, sin tener en cuenta la aplicación, y por otro lado, determinar cómo la operación de cada uno de los elementos del sistema va a influir en los índices de operación globales. En un esfuerzo por intentar establecer un patrón con el que comparar estos sistemas basados en arquitecturas y

1 MOPS: Millones de operaciones (sumas, multiplicaciones, ) por segundo. 2 MIPS: Millones de instrucciones por segundo. Esta medida no es muy exacta dado que una instrucción puede precisar de un número variable de ciclos de reloj, y además, en la comparación con la figura expresada con anterioridad, una operación aritmética puede necesitar de varias instrucciones para ser realizada.

Page 12: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

16

circuitos alternativos, vamos en este proyecto a desarrollar una aplicación típica, de interés en muchos campos, y vamos a evaluar el comportamiento un sistema basado en una plataforma convencional: sensor + convertidor + DSP. La identificación de las limitaciones de este sistema nos servirá además para proponer líneas de mejora a la aproximación convencional.

1.3 PROPUESTA Y ESTRUCTURA DE LA MEMORIA El problema que nos planteamos es la detección de movimiento y el seguimiento de los objetos que se mueven dentro del campo de visión de una cámara fija. Estos algoritmos van a diseñarse y testarse en Matlab antes de implementarse en una cámara de Vision Components con sensor CCD y DSP TSMC6210 de Texas Instruments. En la siguiente sección vamos a tratar de los algoritmos, dividiendo el problema en las tareas y rutinas correspondientes y estudiando el abanico de posibilidades reportado en la literatura para la realización de las mismas. En la Secc. 3ª se detallarán las características de las herramientas hardware y software que se han utilizado en el desarrollo del proyecto. En la Secc. 4ª se expondrán los problemas y dificultades encontrados en la implementación de los algoritmos y se mostrarán diferentes visualizaciones del procesamiento realizado por el sistema. Finalmente, en la Secc. 5ª, realizaremos una evaluación de los resultados obtenidos y emitiremos nuestras conclusiones.

Page 13: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

17

2. PROPUESTA DE APLICACIÓN TÍPICA: DETECCIÓN DE MOVIMIENTO Y SEGUIMIENTO DE OBJETOS 2.1. PLANTEAMIENTO DE PROBLEMA TIPO En este apartado se va a analizar la forma y en la que se va a desarrollar nuestra aplicación. Por un lado, tenemos que distinguir entre la detección del movimiento y el seguimiento de objetos. Son conceptos que están relacionados entre sí, aunque tienen formas diferentes de tratarse, sobre todo cuando intentamos realizar una aplicación basada en el desarrollo de técnicas de visión. • En este trabajo entendemos como detección de movimiento el cambio de posición

de los distintos objetos que componen una escena a partir del análisis de dos o más cuadros (frames) de la secuencia de imágenes digitales.

• El seguimiento de objetos, consistirá en la identificación y etiquetado de uno o más objetos móviles, a lo largo de una secuencia de imágenes digitales, tomadas en distintos momentos.

Conceptualmente, resumimos en el siguiente esquema la forma en la que se van a tratar estos elementos.

Figura 1. Esquema conceptual de trabajo propuesto

En esta figura ),,( tyxf representa una secuencia de imágenes capturada por la cámara. Por lo general, esta función (.)f no es válida para cualquier instante de tiempo, sino que asignará un valor de intensidad luminosa a cada punto del plano de la imagen

),( yx sólo en determinados instantes, 1t y 2t . La matriz ),( jicm tiene dos columnas que representan las coordenadas de los centros de masas de cada uno de los objetos móviles de la escena. Finalmente la matriz ),( jis contiene en las cuatro columnas que posee, las coordenadas de los vértices de las regiones en las que se buscará a los objetos móviles en el siguiente fotograma. Vamos a estudiar el entorno del problema que se tratará de resolver a lo largo de este estudio

• Elementos y problemática asociados a la detección de movimiento:

Imágenes de Movimiento Objeto Entrada Detectado Identificado f(x,y,t1) cm(i,j) s(i,j) f(x,y,t2)

SENSOR

DETECCIÓN DE

MOVIMIENTO

SEGUIMIENTO

Page 14: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

18

- Como sensor en este tipo de sistemas, se suelen utilizar cámaras digitales, o

cámaras analógicas convencionales con capturadora de vídeo integrado en un PC. Por lo tanto el elemento fundamental con el que vamos a tratar van a ser imágenes digitales discretizadas en el espacio, en el tiempo y en magnitud, compuestas por un grupo de píxeles. En nuestro caso en concreto se ha usado una cámara digital

- El análisis del movimiento se hace por comparación de los objetos en

movimiento dentro de la escena, con un fondo fijo que se toma como referencia. Suponemos además una posición fija de la cámara. De otra forma habría que analizar el movimiento relativo de la cámara con respecto al entorno, además del análisis del movimiento de los, habitualmente pocos, objetos móviles de la escena.

- Las imágenes a analizar serán fotografías y secuencias de vídeo tomadas de la

realidad, con los problemas típicos asociados al proceso de la captura y de la tecnología aplicada. En este sentido, damos por supuesto que las imágenes se encontrarán en un entorno ruidoso en el que la propia óptica de la cámara y el mismo proceso de digitalización añaden componentes de ruido no estacionarias, como falsos reflejos, degradación de la imagen, etc., que hacen más complejo el proceso de análisis.

- La información proporcionada por nuestra cámara será en dos dimensiones,

tanto de los objetos como del entorno. Aquí se considera que los resultados obtenidos nos darán información en dos coordenadas espaciales, que se corresponden con el plano focal de la cámara, pero no se obtendrán referencias directas de profundidad, ya que el sistema a utilizar no es un modelo estéreo (compuesto por dos cámaras) no existe otro elemento externo que nos de una idea de profundidad ni se usa un sistema de iluminación activo que nos aporte información al respecto.

- Los problemas a resolver en esta parte, comprenden los relacionados con el

tratamiento inicial que se debe dar a la imagen digital con el fin de disponer de una imagen nítida, y la separación de forma correcta del objeto en movimiento del resto del entorno.

• Elementos y problemática asociados al seguimiento de objetos:

- Los móviles a seguir serán identificados con una etiqueta software, de forma que

puedan ser reconocidos en una secuencia larga de imágenes.

- Se consideran los casos en los que se pueda identificar a un objeto individualmente (tracking), pero también a un conjunto de ellos (multitracking).

- Se tendrá que tener en cuenta la resolución de problemas típicos, como la

identificación correcta del patrón de cada móvil, la desaparición de objetos en un momento dado (oclusión), la unión de dos móviles en uno solo. A todo esto hay que añadir que dependiendo de las especificaciones temporales de la aplicación

Page 15: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

19

podemos encontrarnos con dificultades serias para conseguir realizar el procesamiento en tiempo real.

2.1.1. DETECCIÓN DEL MOVIMIENTO Como en la mayoría de los casos en los que se trabaja con aplicaciones basadas en el análisis de imágenes digitales, normalmente es necesario realizar un preprocesado previo que permita extraer las características necesarias para, en este caso, la posterior detección del movimiento. El esquema que vamos a seguir se muestra a continuación: - Primero vamos a analizar distintas técnicas de filtrado de imágenes, que la preparan

para poder empezar a desarrollar nuestros algoritmos. - A continuación se expondrán algunos métodos conocidos y utilizados actualmente

para la detección de movimiento entre dos fotogramas consecutivos. - Finalmente se tratará la forma de distinguir a los objetos en movimiento entre los

distintos elementos que constituyen la escena.

Figura 2. Esquema seguido para la detección de movimiento en una secuencia de imágenes digitales

2.1.1.1. FILTRADO DE LA IMAGEN DIGITAL. Uno de los problemas más frecuentes e importantes en el tratamiento digital de imágenes, es el ruido que llevan aparejadas. En nuestro caso definimos “ruido”, como todo proceso perjudicial, añadido a la imagen y que en la mayoría de los casos impide un análisis directo de la misma [13]. En una cámara digital, el ruido suele estar vinculado al proceso de captura y digitalización de imágenes. Podemos distinguir entre el ruido inherente a la toma de la medida, relacionada con la óptica de la cámara, con los dispositivos fotosensores y la implementación electrónica, y el ruido debido al proceso de digitalización. A lo largo de este proyecto se han utilizado dos cámaras diferentes con distinto tipo de tecnología y modos de operación. Una de ellas es una cámara digital a color de uso doméstico y la otra una cámara digital monocromo, que se suele utilizar en aplicaciones industriales, que serán descritas en apartados posteriores.

Imagen Ruidosa f(x,y,t1) Imagen Filtrada f(x,y,t2) g(x,y,t1) g(x,y,t2) Estimación de movimiento h(x,y)

cm(x,y)

Movimiento

Detectado

1. FILTRADO (§ 2.1.1.1)

2. ALGORITMODE DETECCIÓN DE MOVIMIENTO (§ 2.1.1.2)

3. SEGMENTACIÓN PARA DETECCIÓN DEL MOVIMIENTO (§ 2.1.1.3.)

Page 16: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

20

En este contexto, el elemento más pequeño en que se puede dividir una imagen digital tomada por la cámara es el píxel. Cada píxel posee un determinado nivel de brillo y se codifica mediante un conjunto de bits de longitud determinada. Para imágenes monocromas es muy habitual que cada píxel este representado con 8 bits, con lo que podemos distinguir entre 256 niveles de gris para codificar un determinado valor de brillo, aunque hoy en día la representación puede llegar a ser de 10 y 12 bits en cámaras de alto rango dinámico. De esta forma podemos considerar que el tipo de imágenes que estamos analizado se puede representar como una matriz rectangular de píxeles que codifican los valores de brillo de la escena que estamos analizando [14]. El proceso de filtrado se podría aliviar si se tuviera un conocimiento previo del tipo de ruido predominante en la imagen. En la mayoría de los casos esta circunstancia es poco realista fuera de entornos controlados, ya que normalmente una misma imagen se ve afectada por la suma de más de un tipo de fuente ruidosa. En la literatura encontramos un conjunto diverso de técnicas de filtrado, casi tantas como tipos de ruido presentes en la imagen. A continuación vamos a reseñar algunas de ellas, considerando principalmente las técnicas más extendidas y que además puedan adaptarse mejor al tipo de ruido que encontramos en nuestras imágenes. (a) Promediado del Entorno de Vecindad (Filtro de la Media) Es un filtro lineal (se realizan operaciones lineales de promedio con los píxeles de un entorno de vecindad) en el que a partir de la imagen de entrada f(x,y), se genera una imagen de salida g(x,y) en la que la intensidad de cada nuevo píxel se consigue realizando una media de los valores de intensidad de los píxeles de la imagen de entrada que pertenecen a un entorno de vecindad de tamaño MxN [13].

∑−=

++=rrji

jyixfMN

yxg,,

),(1),( (1)

(b) Filtro de la Mediana Una de las dificultades principales del filtrado por la media es que desdibuja los contornos. Para solventar este inconveniente, se suelen utilizar filtros basados en la mediana. En ellos sustituimos la media de las intensidades por la mediana en un entorno de vecindad predefinido de cada píxel. Por lo tanto, esta clase de filtros es no lineal, quiere esto decir que el resultado no se consigue a partir de una operación lineal con las intensidades de los píxeles del entorno de vecindad. La principal función de filtrado por este método es hacer que los puntos con intensidades muy distintas se hagan más parecidos a sus vecinos, eliminando así los picos de intensidad que aparezcan aislados en el área de la máscara del filtro. Es especialmente indicado en el caso de ruido aleatorio (como por ejemplo el ruido de sal y pimienta) [15]. (c) Filtros Gaussianos: Consisten en aproximar la máscara de convolución a aplicar en el entorno de vecindad, por discretización de una función gaussiana de media cero y varianza sigma [13].

Page 17: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

21

2

22

2)(

21),( σ

σπ

yx

eyxg+−

= (2)

Por ejemplo la siguiente máscara realiza este cometido: ⎥⎥⎥

⎢⎢⎢

1,2,12,4,2

1,2,1

161

Este tipo de filtros es aconsejado para disminuir especialmente el ruido gaussiano. Como contrapartida, disminuyen la nitidez, aumentan la borrosidad y repercuten en la pérdida de detalles de la imagen. (d) Filtros Paso de Alta: Son filtros que eliminan componentes de baja frecuencia a partir del diseño de máscaras de convolución con valores positivos cerca del píxel considerado y negativos en su periferia. De esta forma se obtienen imágenes con mayor realce en las zonas con alto contraste, como pueden ser los bordes de los objetos. Como principal inconveniente tienen el de realzar las componentes aisladas más ruidosas presentes en la imagen [13]. Más adelante veremos como en nuestro caso se utilizó una máscara de convolución de 3x3 elementos para diseñar este tipo de filtro. 2.1.1.2. DETECCIÓN DE MOVIMIENTO. En general podemos decir que como entrada a nuestro sistema de análisis de movimiento, tendremos una secuencia de fotogramas de imagen, tomados con una cámara fija, en instantes sucesivos de tiempo. Por lo tanto, los cambios entre un fotograma y otro serán debidos al movimiento de los objetos de la escena en el mejor de los casos y a cambios en la iluminación o debidos al ruido. Una vez analizadas las características del ruido en imágenes digitales y expuestas las técnicas más habituales para su filtrado, pasamos a analizar varias de las soluciones aportadas para la detección de movimiento en secuencias de imágenes digitales, entrando con mayor nivel de detalle en las soluciones que aportan más ventajas y que están más relacionadas con nuestro trabajo. (a) Detección de Movimiento Basado en la Imagen Diferencia: Vamos a estudiar con especial detalle este método, ya que ha sido una de las técnicas que fundamentan nuestro trabajo. Se basa en la detección de cambios entre dos fotogramas o una secuencia de imágenes, haciendo la diferencia píxel a píxel entre las dos imágenes digitales. De esta forma se cancelarán las componentes estacionarias comunes a ambas y aparecerán únicamente las componentes debidas al movimiento. Normalmente se suele establecer un umbral mínimo superior al del fondo, a partir del cual la diferencia entre ambas imágenes tiene sentido Considerando ),,( 1tyxg y ),,( 2tyxg como dos imágenes tomadas de forma consecutivas y filtradas anteriormente, y ),( yxh como la imagen de salida una vez aplicado este método, definimos:

Page 18: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

22

),,(),,(),( 21 tyxgtyxgyxh −= (3) Para entender mejor este método consideramos el siguiente ejemplo:

Figura 3. Esquema de detección de movimiento basado en la imagen diferencia

La primera figura representa un fotograma que podemos considerar de referencia, tomado en 1t . Esta imagen contiene un solo objeto de intensidad constante que se mueve con una velocidad uniforme sobre un fondo, también con intensidad constante. La siguiente figura representa el fotograma tomado en un instante consecutivo 2t . La primera figura representa un fotograma que podemos considerar de referencia, tomado en 1t . Esta imagen contiene un solo objeto de intensidad constante que se mueve con una velocidad uniforme sobre un fondo, también con intensidad constante. La siguiente figura representa el fotograma tomado en un instante consecutivo 2t . La tercera figura representa la imagen valor absoluto de la diferencia entre ambos fotogramas.

),,( 1tyxg ),,( 2tyxg ),( yxh

Page 19: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

23

Este caso ideal sólo es aplicable para imágenes con buena calidad, en las que el fondo es siempre uniforme y las condiciones de iluminación son relativamente constantes. En los casos reales analizados, muchos de los píxeles con valor distinto de cero son debidos principalmente a ruido, que normalmente suelen aparecer como puntos aislados dispuestos de forma aleatoria en cualquier zona de la imagen. Por eso un buen método para eliminarlos consiste en agrupar regiones con un número determinado de píxeles e ignorar cualquier región que tenga menor cantidad de puntos que un valor predeterminado. Como inconveniente, se tiene el ignorar objetos en movimiento de pequeño tamaño o de movimiento lento. Una técnica adecuada para solventar el inconveniente anterior es considerar los cambios en cada posición de píxel sobre varios fotogramas, introduciendo así una “memoria” en el proceso. De esta forma, no se tendrán en cuenta los cambios que tengan lugar esporádicamente y que puedan ser candidatos a ruido aleatorio. A esta técnica se le denomina cálculo de imágenes de diferencias acumuladas. Normalmente se definen tres tipos de imágenes de diferencias acumuladas. Positivas (PADI), negativas (NADI), y absolutas (AADI).La creación de estas imágenes de referencia sigue los mismos pasos expuestos anteriormente, solo que si la diferencia es positiva, la comparación se realiza con un umbral positivo y si es negativa, la diferencia se compara con un umbral negativo. En definitiva, y como conclusión a los distintos métodos expuestos, encontramos que la mayor ventaja de la técnica de detección de movimiento basada en la imagen diferencia es su simplicidad y reducido coste computacional. Como inconveniente encontramos que ofrecen menor precisión a la hora de reconocer la forma de los objetos, y son muy sensibles a los cambios de iluminación y al movimiento lento de objetos pequeños. (b) Detección de Movimiento Basada en Comparación de Patrones. Es una técnica que se utiliza cuando sabemos que el desplazamiento de los objetos móviles dentro de la escena entre cada par de secuencias, es relativamente grande. De esta forma es posible identificar rasgos característicos del objeto en movimiento para luego ir buscándolos a lo largo de las siguientes secuencias. Consideremos que tenemos dos fotogramas tomados por nuestra cámara de vídeo, correspondientes a dos instantes consecutivos en el tiempo. Dividimos ambos fotogramas en regiones de igual tamaño, es decir, establecemos un mayado uniforme en ambos fotogramas, con el mismo número de regiones y el mismo tamaño por región. Comparamos cada bloque de la primera imagen, a al que llamamos patrón, con los bloques de la segunda que se encuentren en un entorno de vecindad, según un determinado criterio. Consideramos que el bloque de la segunda imagen que más se parezca al patrón, es el bloque que se ha movido de un fotograma a otro. Para ilustrarlo mejor, vemos la siguiente figura en las que ),,( 1tyxg y ),,( 2tyxg son dos imágenes tomadas de forma consecutiva y sometidas a un proceso anterior de filtrado.

Page 20: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

24

Figura 4. Método de detección de movimiento basado en comparación de patrones

Un problema en este tipo de métodos se da cuando el móvil a seguir cambia de características a lo largo de su movimiento debido a efectos de la iluminación, a deformaciones, a rotaciones, etc. que también provocan cambios en los píxeles de la imagen y que tanto modifican la característica intrínseca del patrón. En estas situaciones no va a ser fácil localizar el patrón original en las siguientes secuencias de imágenes. En estos casos la solución más sencilla es considerar un umbral, por encima del cual sabemos que nuestro bloque ha cambiado de forma significativamente. De esta forma, se deshecha el patrón original y se coge un nuevo patrón en la siguiente imagen. A partir de aquí se sigue el mismo procedimiento comentado. En generar los parámetros a ajustar en los algoritmos basados en comparación de patrones, definen también los distintos tipos de algoritmos a utilizar [19]. Podemos distinguir algunos de estos parámetros como siguen: - Criterio de Comparación: por el cual decidimos cuál de los bloques en la siguiente

imagen, se ajusta mejor al patrón que estamos buscando. En nuestro caso hemos probado 3 posibles comparadores:

- Estimador de Mínimo Error Cuadrático:

⎭⎬⎫

⎩⎨⎧

++−= ∑∈Bnn

tdydxgtyxgMM

rIndiceErro21 ,

22211

21

)),,(),,((1min (4)

- Estimador de Mínima Diferencia Absoluta Media:

Page 21: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

25

⎭⎬⎫

⎩⎨⎧

++−= ∑∈Bnn

tdydxgtyxgMM

rIndiceErro21 ,

221121

|),,(),,(|1min (5)

- Estimador de Máxima Correlación: utilizamos la definición de correlación de Pearson de forma que los valores obtenidos estarán comprendidos entre –1 y 1.

(6) - Método de búsqueda: La búsqueda puede ser exhaustiva alrededor de un entorno de vecindad del bloque considerado o también se pueden utilizar algoritmos rápidos de búsqueda que no analizan todos los píxeles, y que tienen la ventaja de disminuir el tiempo de proceso, a costa de obtener una solución parecida a la general. En nuestras experiencias, hemos optado en principio por realizar una búsqueda exhaustiva en la región 21xMM en un entorno de vecindad reducido del bloque considerado. - Características del patrón: el mayado puede ser constante o variable. El patrón puede estar compuesto por un grupo grande o pequeños de píxeles (en el caso extremo el patrón se puede reducir a un píxel). Normalmente no conviene trabajar con regiones cercanas al tamaño del píxel porque aumenta el tiempo de procesado, por eso las regiones típicas con las que se ha trabajado en nuestro caso han sido de 16x16 y de 32x32 píxeles. (c) Métodos Basados en la Resolución de la Ecuación de Flujo Óptico. Podemos plantear una imagen en movimiento, como una función ),,( tyxg . que depende de las coordenadas espaciales x e y, y del tiempo. Evaluando las variaciones espacio-temporal de esta función, podemos obtener la velocidad de movimiento en el plano de la imagen. Teniendo en cuenta una serie de restricciones, podemos recuperar parte de la información de los objetos en movimiento [17]. La estimación de la posición y velocidad es muy precisa, y esto hace que en la actualidad sea uno de los métodos más utilizados en diversos tipos de aplicaciones. Para poder usar este método, se tendrían que imponer algunas restricciones sobre los objetos en movimiento que van a ser detectados. En la mayoría de las aplicaciones basta con una restricción de suavizado que supone que la intensidad de un píxel que ocupa la misma posición dentro del objeto, no cambia cuando pasa de una imagen a otra, aunque éste se haya cambiado su posición relativa dentro del plano focal. Por otro lado hay que tener en cuenta problemas típicos cuando se intenta resolver la ecuación de flujo óptico. Entre ellos destacamos el problema de la oclusión, que se da cuando se tapan o destapan superficies del móvil debido a rotaciones en la escena real. En este caso hay zonas en la imagen actual que no se corresponden con zonas del siguiente cuadro. Por lo tanto hay regiones de la imagen donde no se pueden hacer predicciones. Por otro lado encontramos el problema de la apertura, que consiste en que

[ ] [ ]

[ ] [ ]∑∑

∈∈

++−++⋅−

++−++⋅−=

MyxMyx

Myx

tdxdxgtdydxgtyxgtyxg

tdxdxgtdydxgtyxgtyxgrIndiceErro

,

2

221121

2

,21

,22112121

),,(),,(),,(),,(

),,(),,(),,(),,(max

Page 22: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

26

solo se puede estimar la componente del flujo en la dirección del gradiente, pero no en la dirección perpendicular. Hemos definido a grandes rasgos cuáles son los fundamentos de este método por ser uno de los más utilizados en la actualidad. Nosotros no hemos utilizado este método porque lleva aparejado un gran volumen de cálculo, y esto resulta excesivo a la hora de desarrollar aplicaciones en tiempo real dentro de nuestra plataforma de trabajo. 2.1.1.3. SEGMENTACIÓN DE LOS OBJETOS QUE SE HAN MOVIDO. Una vez se ha hecho un tratamiento de la imagen y se ha aplicado alguna técnica como las comentadas en el apartado anterior, necesitamos distinguir los objetos en movimiento en el plano de la imagen, del entorno que les rodea . En nuestro caso, cada región segmentada se corresponde con un objeto en movimiento y nuestro objetivo final en esta sección fue calcular para cada uno su centro de masas. Restricciones adicionales o el conocimiento cierto del objeto que se está buscando, suelen facilitar mucho esta labor. Por ejemplo no es lo mismo buscar un objeto que sabemos que es cuadrado y de color rojo, en movimiento sobre un fondo homogéneo, que buscar una persona en una secuencia de vídeo tomada en un cruce. En este apartado describiremos una serie de métodos atendiendo al criterio de ser los que más se utilizan en la actualidad.Vamos a tratar la segmentación basada en fronteras, basada en umbralización y basada en regiones. Segmentación basada en fronteras: Llamamos borde o frontera a la línea que delimita el contorno de los objetos en una imagen. La característica principal de un borde es el cambio de intensidad que se da a uno y otro lado del mismo. Para detectar la dirección en la que se produce el cambio, es decir detectar si el objeto está a un lado o al otro del borde, se suele resolver una ecuación basada en el gradiente, o recurrir a operadores que aproximan estas derivadas y que se aplican de como máscaras de convolución sobre la imagen. Aquí hacemos referencia a los operadores de Sobel y Roberts como los más utilizados para aproximar las primeras derivadas. Como complemento existen métodos que utilizan la segunda derivada, el Laplaciano, para discernir si un píxel se encuentra en el lado oscuro o en el lado claro del borde [15]. Como desventaja, debido a efectos espúreos como el ruido o los cambios en la iluminación, no se produce la detección completa del borde del objeto en el primer paso, por eso se suelen utilizar algoritmos de detección de fronteras que unen los distintos bordes hasta determinar a la postre el contorno de los objetos. Este es el motivo principal por la que no se ha utilizado este tipo de métodos en nuestro trabajo. (b) Segmentación basada en umbralización: Es una técnica en la que el valor de la intensidad de los píxeles que componen la imagen define si estos forman parte o no de los objetos que buscamos. Esta técnica se basa principalmente en la realización del histograma de la imagen completa, o por lo menos de un entorno menor definido. El objetivo es encontrar un valor umbral de intensidad a partir del cual podamos diferenciar los objetos, del entorno [15]. Si existe una diferencia clara entre los valores de intensidad del objeto buscado y su entorno, el histograma representará una función con máximos distintos, de forma que es posible encontrar un umbral entre ambos, para realizar la distinción. Una vez determinado el umbral y de

Page 23: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

27

forma iterativa, se irá etiquetando cada píxel de la región como perteneciente al objeto o al fondo. Este tipo de métodos es muy útil cuando en la imagen se encuentran objetos con dos niveles de grises muy distintos, ya que en estos casos al realizar el histograma se obtienen dos máximos claramente diferenciados. En estos casos podemos hallar fácilmente un umbral que distinga entre dos tonos. Sin embargo si los objetos de la imagen presentan varios niveles de grises, es más difícil hallar los valores umbrales que distingan entre uno y otro. Segmentación basada en Regiones: Es un método que trata de encontrar directamente la región que ocupa el objeto dentro de la imagen. Se basan en criterios de relación entre los distintos píxeles considerando que las regiones a buscar son homogéneas [15]. En nuestro caso se utilizó un método basado en agregación de píxeles, que se detallará posteriormente, para discriminar cuáles de los píxeles de la imagen pertenecían a una región de movimiento y cuáles formaban parte del fondo estático. Una vez identificada la región de píxeles que pertenecían a nuestro móvil, se pasó a definir un rectángulo que lo englobara en su totalidad. De esta manera se pudo calcular el centro de masas del objeto en movimiento, entendido como el punto en el que se cruzaban las dos diagonales del rectángulo. Dependiendo del tratamiento que hagamos de la relación entre los píxeles, vamos a considerar tres métodos: de unión de regiones, de agregación de píxeles y de separación y unión de regiones. Método de Unión de Regiones: es un método iterativo que consiste en dividir a la imagen en regiones (normalmente del mismo tamaño). De forma general, se considera en un principio que cada píxel es una región individual. Se definen un criterio de homogeneidad y un criterio de unión de regiones. Sólo se unen regiones adyacentes que cumplan el criterio de unión. A medida que el método avanza, se etiqueta cada píxel como perteneciente a una región. El proceso se detiene cuando para unir dos regiones, se tiene que violar el criterio de homogeneidad. Método de agregación de Píxeles: se basa en ir seleccionando píxeles y agrupándolos en regiones, que van creciendo a medida que se desarrolla el método. Se suele empezar definiendo lo que se llaman puntos semilla o puntos de inicio, que suelen ser píxeles significativos dentro de la imagen. A continuación se analiza el entorno de vecindad de cada uno y se seleccionan los píxeles que se pueden añadir a la región a partir de un determinado criterio de similitud. Métodos de Separación y Unión de Regiones: en este caso no tenemos que determinar puntos de inicio concretos, sino que en el primer momento se subdivide la imagen en un número cualquiera de regiones separadas. Se estipula también un criterio de homogeneidad y de unión de regiones. Considerando a la imagen como una especie de puzzle, el método consiste en ir uniendo y desuniendo regiones que cumplan o no el criterio de unión y que cada una de ellas esté conectada. Al final del procedimiento la unión de las regiones deben cubrir toda la imagen. 2.1.2. SEGUIMIENTO DE OBJETIVOS

Page 24: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

28

Tras describir las distintas formas en la que podemos detectar el movimiento de los objetos a partir de dos o más imágenes digitales, vamos a hacer un análisis de los distintos métodos que podemos utilizar para realizar el seguimiento de estos móviles a partir de los centros de masas de los objetos móviles detectados en el paso anterior. En primer lugar, definimos lo que se ha entendido como seguimiento de objetivos (en inglés se suele utilizar el término tracking) en este proyecto. Lo entendemos como la monitorización de una serie de parámetros obtenidos en un análisis previo de la imagen digital y que tiene como objetivo reconocer a los móviles presentes en una secuencia de vídeo digital. (a) Seguimiento Basado en Contornos Se realiza una búsqueda del contorno del móvil en cada fotograma. Por lo tanto la búsqueda se restringe a los bordes y líneas de los objetos en movimiento. En este caso es necesario una buena segmentación basada en bordes y en unión de fronteras (recordar el último apartado visto de segmentación en el punto anterior). Suele ser poco costoso computacionalmente pero problemático en ambientes ruidosos, en los que tras un procesado inicial de la imagen no quedan bien definidos los bordes y se dejan líneas abiertas. (b) Seguimiento Basado en Modelos Este tipo de técnicas se basan en un conocimiento a priori de un modelo del objeto que se quiere localizar. El modelo se puede obtener a partir de proyecciones del objeto o la explotación de alguna característica o rasgo distintivo. En general son mucho más precisas que las técnicas basadas en las características de los objetos, ya que se tiene una representación única del modelo, que lo distingue del entorno. (c) Seguimiento Basado en Métodos en el Dominio de la Frecuencia: Los métodos en el dominio de la frecuencia realizan la transformada de Fourier sobre la imagen que se pasa como entrada. Dentro de ellos, tienen principal importancia los métodos basados en fases, en los que se distinguen los cambios debido a movimiento en el espacio, a partir del análisis de la fase en el dominio frecuencial. Como ventaja tienen el ser conceptualmente sencillos, pero lo más importante es que suelen robustos, en el sentido en el que se obtienen muy buenos resultados: son menos sensibles al ruido y a los cambios de iluminación. El principal inconveniente reside en que hay que realizar computacionalmente la transformada de Fourier de un gran número de datos, lo que aumenta considerablemente el tiempo de procesado cuando lo comparamos con los métodos vistos en el dominio espacial (d) Seguimiento Basado en la Predicción de la Trayectoria: Son métodos que se utilizan cuando disponemos de un conjunto de imágenes, en el que se tienen uno o varios objetos moviéndose continuamente. En estos casos podemos plantearnos el realizar una predicción de la siguiente posición que ocupará el objeto dentro de la escena, a partir de la información obtenida mediante el análisis de sus trayectorias anteriores. Pero sin lugar a duda, los modelos que más se están utilizando en la actualidad son los llamados filtros de partículas. La idea básica es que dentro de un sistema dinámico

Page 25: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

29

podemos obtener estimaciones de una serie de variables a las que se le denominan partículas a partir de las observaciones que se hacen de ellas dentro del sistema al que pertenecen [16]. Entre este tipo de filtros, el más utilizado es el llamado Filtro de Kalman. Como finalmente es el método que se ha utilizado en nuestros trabajos para realizar el seguimiento de objetos, pasamos a detallar un poco más los conceptos más relevantes, para una mejor comprensión de los algoritmos desarrollados que veremos posteriormente. Filtro de Kalman Como cualquier tipo de filtro, podemos decir que el Filtro de Kalman es un sistema en el que a partir de una serie de excitación de entrada, se generan una respuesta de salida a partir de un proceso de discriminación, que depende de las características de configuración del mismo. En concreto, con este tipo de filtro podemos realizar la estimación en un instante determinado de una variable (que en nuestro caso será el centro de masas de cada objeto) dentro de un sistema dinámico y lineal, a partir de las informaciones que tenemos en instantes anteriores. En nuestro caso la aplicación de este método es muy interesante, ya que pretendemos realizar una estimación de la posición del centro de masas en el siguiente instante, a partir del cálculo del centro de masas en el instante actual. De esta forma pretendemos buscar al objeto en movimiento en un entorno reducido del siguiente fotograma. Además, como sabemos, el entorno en el que se quiere realizar la estimación es un entorno de movimiento dinámico. Por eso además de tener claro cuáles son las variables a estimar, el esquema del filtro necesita tener un modelo de nuestro sistema. Por otro lado, como sabemos que las medidas reales que obtenemos del centro de masas no son exactas, el filtro también tiene en cuenta en su esquema una serie de parámetros que modelan el ruido de la medida. El modelo matemático se basa en la actualización recursiva de dos conjuntos de ecuaciones: unas ecuaciones de predicción que nos dan la estimación de la variable en el siguiente instante al considerado, y otras ecuaciones de actualización que van corrigiendo el error en la estimación en cada paso [18],[19]. Concretando un poco más, definimos los parámetros y las ecuaciones que modelarán nuestro predictor:

• Parámetros:

- CM : centro de masas - E : error entre la medida del centro de masas y la estimación anterior - V : covarianza del error - G : factor de ganancia

• Símbolos

- Representación de una estimación: .~ : - Representación de una corrección sobre la estimación previa : .̂

• Modelo del sistema:

Page 26: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

30

yy

xx

yyy

xxx

vv

vv

tvyy

tvxx

k

k

kk

kk

=

=

+=

+=

+

+

+

+

1

1

1

1

(7)

De esta forma, obtenemos las matrices A y H:

⎥⎥⎥⎥

⎢⎢⎢⎢

=

1,0,0,00,1,0,01,0,1,00,1,0,1

A , ⎥⎦

⎤⎢⎣

⎡=

0,0,1,00,0,0,1

H

Por otro lado también se tendrán en cuenta las matrices Q y R que modelan el ruido de la determinación del centro de masas y de la estimación del centro de masas, respectivamente.

• Ecuaciones que rigen el comportamiento del filtro:

- Ecuaciones que actualizan los parámetros:

nnn

nnnn

nnn

Tn

Tnn

VHGIV

EGmcmcmcHCME

RHVHHVG

~)..(ˆ.~ˆ

~.).~.(.~ 1

−=

+=−=

+= −

(8)

- Ecuaciones de predicción del nuevo centro de masas y covarianza del error:

QAVAV

mcAmcT

nn

nn

+=

=

+

+

ˆ.~ˆ.~

1

1 (9)

En el siguiente esquema mostramos la forma en la que se ha utilizado este método en la realización de nuestro trabajo. En él se muestra cómo la predicción del centro de masas se calcula a partir de la medida calculada en el instante actual, y el error cometido en la predicción en el instante anterior, multiplicado por un factor de ganancia. Este factor de ganancia se calcula a partir de la covarianza del error predicho para el instante anterior y del modelo que se tiene del sistema. De modo que esta ganancia evoluciona en el tiempo para ayudar a la convergencia del predictor.

Page 27: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

31

Figura 5. Diagrama de flujo de señal del Filtro de Kalman

Por último, queremos exponer la serie de ventajas e inconvenientes que se observaron con la utilización de este método en nuestro sistema. - Como ventajas importantes, destacamos por un lado el que pudimos hacer una

predicción acertada del centro de masas en instantes posteriores, gracias a la corrección recursiva del error, que tiene en cuenta el valor de la medición y los errores pasados. De esta forma nuestro sistema fue poco sensible a cambios esporádicos debido a una mala medida del centro de masas en el instante actual. Por otro lado, se utilizaron pocas ecuaciones, que fueron fáciles de resolver a la hora de programar nuestros algoritmos. De esta forma los tiempos de procesamiento fueron muy cortos, siendo esta circunstancia es beneficiosa para nosotros, en el sentido de que queríamos encontrar una aplicación lo más rápida posible.

- Como principal inconveniente está el necesitamos una estimación inicial, tanto de la medida como de la covarianza del error en el primer instante de tiempo. Esto hace

nmc ~ nE 1

~+nmc

nCM nmc ˆ nG nV̂ 1

~+nV

nV~

1).( −+ RHHH TT )( HI − QAVA Tn +ˆ.

1−z

A G

1−z H−

Page 28: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

32

que las primeras predicciones del centro de masas sean las peores, como veremos en algunas representaciones gráficas posteriormente.

2.2. ESQUEMA GENERAL DE LOS ALGORITMOS A IMPLEMENTAR En primer lugar en nuestro caso, se plantea la detección de los objetos en movimiento en la escena, y del seguimiento en tiempo real de los mismos, a partir de los algoritmos programados en el DSP de una cámara comercial. Tal como se ha analizado el problema, el análisis de cada imagen capturada por la cámara consiste en un análisis de cada uno de los píxeles de los que está compuesta, tras someterla a un proceso de filtrado. En la mayoría de los casos, esta tarea consume un tiempo prohibitivo de procesado, teniendo en cuenta los tamaños de imagen y la resolución de píxel que se manejan actualmente. Las formas que se disponen para poder resolver el problema utilizando soluciones convencionales, consisten en optimizar las funciones de las que se componen los distintos algoritmos por un lado, y el análisis de sólo algunos píxeles de la imagen por otro. Para poder realizar un tratamiento local del movimiento, es necesario además de conocer dónde se encuentra el móvil en la actualidad, saber también cuál es la región en la que se puede encontrar el mismo objeto en el futuro. Para ello necesitamos una estimación de la posición de los móviles en secuencias futuras. La idea será analizar únicamente un entorno de píxeles en el siguiente fotograma, para disminuir así el tiempo de cómputo. Teniendo en cuenta otras aproximaciones que hemos revisado para resolver este tipo de problemas, nosotros vamos a plantear una solución típica que va a seguir el siguiente esquema:

Figura 6. Propuesta de aplicación típica

INPUT PROCESAMIENTO OUTPUT

Centro de Masas Calculado en el instante n Centro de Masas estimado para el intante n+1

SELECCIÓN DE

VENTANA

CÁLCULO CENTRO DE MASAS

DETECCIÓN DE MOVIMIENTO

PREDICTOR BASADO

EN EL FILTRO DE KALMAN

SENSOR

Page 29: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

33

3.DESCRIPCIÓN DE LA PLATAFORMA PARA EL DESARROLLO DE APLICACIONES DE VISIÓN 3.1. MATLAB 6.5 Fue el primer entorno donde se desarrollaron y simularon las distintas funciones que implementaban nuestros algoritmos. Matlab es una aplicación compatible con el entorno Windows que es muy conocida y utilizada en el mundo científico [21], de hecho en algunos entornos se ha convertido prácticamente en un estándar: incluye una serie de librerías llamadas toolbox en las que están desarrollados paquetes de programas para trabajar con señales digitales, sistemas clásicos de control, lógica borrosa, estadística, etc. La principal potencialidad de este programa reside en la capacidad de realizar cálculos complicados con vectores y matrices, de una forma muy sencilla, además de operar sobre otro tipo de datos, como números reales, números complejos, estructuras y cadenas de caracteres. A esta potencia de cálculo se le une el de disponer de un lenguaje de programación de propósito general parecido al C, para el diseño de nuestras propias funciones y librerías. Un elemento que lo distingue de otros programas de cálculo matemático es que posee un entorno para generar gráficos en dos y tres dimensiones con distintos tipos de texturas, mayados colores, etc., de forma fácil, a partir de los datos contenidos en vectores y matrices. Estos aspectos junto con la capacidad de programar en un lenguaje de alto nivel, hacen que también sea un programa muy utilizado en ingeniería, En nuestro caso se utilizó Matlab para la importación de las secuencias de imágenes almacenadas en el disco duro, la generación del código para las distintas funciones y para la presentación de los resultados del algoritmo diseñado por pantalla. Se intentó no aprovechar demasiado las capacidades de Matlab a la hora de tratar los datos sobre todo las funciones built-in para operaciones con matrices, de forma que el código generado en este entorno fuera más fácil de migrar cuando se programara el DSP de la cámara de Visión Components. Por eso siempre se tuvo en mente una programación estructurada (uso de estructuras for, if, while, etc), aunque hubiera sido más fácil aprovechar algunas funciones típicas ya desarrolladas, como por ejemplo las relacionadas con convoluciones y tratamiento de matrices. En este sentido el principal inconveniente que encontramos fue que el tiempo que se tardaba en ejecutar una función era relativamente alto, ya que este lenguaje de programación es interpretado. Por otro lado el tratamiento que hace del paso de parámetros por valor y por referencia es parecido, pero distinto al del lenguaje C, y esto motivó algún cambio en las llamadas a función cuando se migró el código al lenguaje de programación del DSP.

Page 30: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

34

Figura 7. Ejemplo de parte del código en el editor de Matlab 6.5

3.2 CODE COMPOSER STUDIO Code Composer Studio es un paquete de simulación software proporcionado por Texas Instruments para depurar, programar y hacer análisis en tiempo real en los DSP´s de la familia TMS320C6000. [23] El paquete software del que está compuesto Code Composer Studio proporciona un entorno potente para la creación, simulación, estudio y carga de programas en los DSP de esta familia, ya que está adaptado a esta plataforma y la aprovecha al máximo. Sin embargo encontramos por otro lado, que el entorno es poco intuitivo para una persona que no haya trabajado con esta gama de productos. Por ejemplo en muchas ocasiones ha sido difícil encontrar los errores en la codificación a partir tan solo de los mensajes del depurador. Otras veces hemos tenido problemas a la hora de visualizar el paso de arrays a funciones. Dado que este entorno es menos conocido, detallamos algunos de sus principales componentes, de forma que se pueda tener una referencia para comprender la forma en la que se han programado y depurado nuestras funciones: • Herramientas para la generación de código para la gama de DSP´s de la familia

TMS320C600.

- Compilador en C: acepta código C y produce código fuente en lenguaje ensamblador

- Ensamblador: traduce los ficheros fuentes, desde lenguaje ensamblador al formato de fichero objeto de la plataforma

- Linkador: combina ficheros objetos en un solo módulo objeto ejecutable. - Archivador: permite colocar un conjunto de ficheros, en una librería. - Utilidad de Construcción de Librerías: permite crear librerías propias. - Soporte de Librerías en Tiempo de Ejecución: conjunto de paquetes estándar,

como funciones ANSI o funciones para el compilador en C.

Page 31: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

35

• Entorno de Desarrollo Integrado de Code Composer Studio (IDE): es un entorno diseñado para proporcionar la edición, la construcción y el depurado de programas en el DSP. Entre sus elementos destacan:

- Editor de Código: permite editar código en C y en ensamblador. - Entorno de Construcción de Aplicación: Permite crear una aplicación, añadiendo

ficheros a un proyecto. - Entorno de Depuración: Se proporcionan herramientas para desarrollar las

distintas posibilidades de depurado: • DSP/BIOS plug-ins y API: Con este conjunto de herramientas, se puede probar y

monitorizar una aplicación, sin afectar aparentemente al desarrollo en tiempo real de la misma. - Seguimiento: testeo de los eventos que se producen en el sistema y el control del

flujo dinámico en tiempo de ejecución. - Monitorización: estadísticas que reflejan el uso de los recursos, como pueden ser

la carga del procesador.

• Emulador de Hardware e Intercambio de Datos en Tiempo Real: normalmente, los DSP´s de Texas Instrumentes proporcionan un soporte de emulación on-chip que permiten al Code Composer Studio controlar la ejecución y la monitorización de la actividad del programa en tiempo real. Esta herramienta es de gran utilidad en la fase final de desarrollo y prueba de las aplicaciones.

Figura 8. Ventana del entorno de desarrollo IDE en Code Composer Studio

Page 32: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

36

3.3 CÁMARA DIGITAL HP PHOTOSMART 735

Figura 9. Cámara HP Photosmart 735 Se trata de una cámara digital, orientada al uso doméstico y con un conjunto de características técnicas y de imagen. Resumimos a continuación las prestaciones más sobresalientes que proporciona el fabricante: • Dimensiones: 105 x 46 x 71 mm y 235 gramos de peso • Resolución:

- Para imágenes fijas: - 3,34 Megapixel (recuento de píxeles total de 2.140x1.560) - 3,24 Megapixel (recuento de píxeles efectivo de 2.088x1550)

- Video clips: - Recuento total de píxeles de 320x320

• Sensor: CCD diagonal de 6,67 mm • Intensidad de color: 30 bits (10 bits por 3 canal) • Almacenamiento:

- 16 MB de FLASH interno - Ranura para tarjeta de memoria compatible con las tarjetas Secure Digital (SD) o

MultiMediaCard (MMC) (todos los tamaños hasta 512 MB) • Objetivo:

- Distancia focal: - Gran ángulo: 5,8mm-17,4mm

- Teleobjetivo:17,4 mm - Valor de Diafragma:

- Gran Angulo: f/2,6 a f/4,9

Page 33: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

37

- Teleobjetivo: f/5,0 a f/9,0 • Zoom: zoom óptico de 3 aumentos, digital de 5 aumentos

- Gran ángulo: 38 mm - Teleobjetivo: 114 mm

• Enfoque: enfoque automático a través del objetivo - Normal (predeterminado): intervalo de enfoque automático de 0,4 a infinito - Macro: intervalo de enfoque automático de 0,1 a 0,5 m, intervalo de zoom de 1x

a 5x • Velocidad del obturador: 1/1.500 a 1/3 segundos • Flash: incorporado, con distancia de funcionamiento a 3m, con zoom de gran

ángulo. • Pantalla de imagen: LED con retroiluminación de 3,75 cm, LCD TFT con 61.380

píxeles • Modos de captura de imágenes:

- Fija (Predeterminado) - Temporización automático: 10 segundos de demora estándar (fija y de vídeo) - Ráfaga: 0,9 fotogramas por segundo, máximo de 6 imágenes - Vídeo: flujo a memoria de 19 fotogramas por segundo.

• Captura de audio: para imágenes fijas y vídeo. • Compensación de la exposición: ajuste manual de –2,0 a+2,0 EV ( valor de

exposición) en aumentos de 0,5 EV • Ajustes de equilibrio de blancos: Automático (predeterminado), sol, Sombra,

Tugsteno, Fluorescente • Ajustes de velocidad:

- Automático (predeterminado) - Manual: 100, 200, 400

• Contraste: no ajustable • Formato de compresión:

- JPEG (EXIF) para imágenes fijas - AVI para vidoclips

• Interfaces: - USB - Salida de audio/vídeo a TV - Entrada de cc de 3,3 a 3,7 Vcc a 2.500 mAs

• Sistemas operativos soportados: Microsoft® Windows® 98, Me, XP, 2000 u ordenador Macintosh con Mac OS 9.1, OS X 10.1.5 o superior.

Page 34: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

38

3.4 CÁMARA MONOCROMA VC2065

Figura 10. Cámara monocromo VC1065 La cámara VC2065 es una cámara monocroma de la casa Visión Components [22]. En su arquitectura integra un sensor CCD de alta resolución y un DSP de procesado de imágenes de 32 bits (en concreto el TMS320C6211 de Texas Instruments). Tiene una memoria SDRAM que se utiliza para alojar el código del programa, datos e imágenes de vídeo. No necesita de un sistema de procesamiento externo o de un PC con una capturadora de vídeo, sino que todo lo necesario para la captura y el tratamiento de las imágenes se encuentran integrados en su sistema. La imagen se forma a partir de la señal proporcionada por un sensor CCD que es guardada en una memoria SDRAM utilizando uno de los 16 canales de DMA. Posteriormente los datos son transferidos a un buffer de refresco gráfico (SGRAM) que se lee periódicamente La circuitería electrónica de la cámara está compuesta por cuatro placas de circuito impreso (PCB) que detallamos a continuación: • Placa del Sensor: C6SEN415: Esta placa controla el sensor CCD y procesa la señal

analógica. Las características del sensor CCD son las siguientes:

- Sensor de 1/2’’ - Alta resolución: 782x582 píxel - Formato de píxel cuadrado - Obturador full-frame - Puede ser disparado externamente vía software. - Lectura del sensor en full-mode (no entrelazado) - Velocidad del obturador desde 5 microsegundos a 20 segundos configurable

externamente vía software - Velocidad máxima de captura de vídeo a 45 frames por segundo - Se proporciona un control programable de la ganancia y del offset,

compensación del nivel de negro y conversión analógica a digital de 10 bits.

Page 35: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

39

• Placa de CPU (C6CPU): integra la circuitería necesaria para el DSP

TMS320C6211 de Texas Instruments. Este DSP será descrito con mucho más detalle en el apartado 3.5, pero como características generales, podemos decir que es un procesador de 32 bit con arquitectura RISC, de forma que se pueden ejecutar 8 instrucciones en paralelo.

- Integra dos memorias caches de 4Kbytes cada una, y una memoria cache on chip

de 64 Kbytes. - La frecuencia de refresco del procesador es de 150 MHz - Como memoria principal, utiliza una memoria externa SDRAM. - Una memoria flash EPROM y una tarjeta multi-media hacen el papel de

memoria no volátil. - Posee 16 canales independientes de acceso directo a memoria (DMA)

• Placa del Conversor Analógico Digital (C6DAC):Es prácticamente un periférico

de la placa de CPU. Entre las funciones principales que es capaz de dispensar destacamos: - Captura de vídeo - Salida de gráficos con 16 Mbytes de refresco de memoria - 3x8 bit de vídeo para el convertidor digital analógico (salida SVGA) - UART y driver para RS232 - Señales de disparo (trigger) de entrada y salida - Interfaz de comunicación con PLC´s - Registros de control y estado - Interrupciones controladas por la CPU

• Placa de Alimentación (C6PWR): Proporciona la alimentación para toda la cámara y es también responsable de la separación galvánica de los distintos elementos.

3.5 DSP TMSC6210: Es un DSP´s de la familia TMS320C6000 [24] que como característica especial usa una arquitectura denominada VelociTI, que es un entorno avanzado VLIW (Very Long Instruction Word), que proporciona altas prestaciones para desarrollar aplicaciones multifunción y multicanal [24]. Esta arquitectura combina la ejecución en paralelo de múltiples instrucciones en un solo ciclo de reloj, pero además introduce capacidades adicionales para la reducción del código y la organización de la ejecución. Como resumen, detallamos a continuación las características principales de la arquitectura interna de los dispositivos de la gama C6000:

• Unidad Central de Proceso (CPU):

- CPU VLIW avanzada, con 8 unidades funcionales, incluyendo 2 multiplicadores y 6 unidades aritméticas. Estas características permiten:

- Ejecuta hasta 8 instrucciones por ciclo de reloj. - Permite a los diseñadores desarrollar códigos para aplicaciones rápidas.

Page 36: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

40

- Empaquetado de instrucciones: reduce el tamaño del código, longitud del programa y consumo de potencia.

- Ejecución condicional de todas las instrucciones: incrementa el paralelismo para mantener un alto rendimiento en la realización.

- Ejecución eficiente de código en unidades funcionales independientes: aumenta la eficiencia a la hora de compilar el código C y optimiza el código ensamblador

- 32 bit de datos que proporcionan soporte de memoria más eficiente para una gran variedad de aplicaciones.

- Soporte para operaciones aritméticas. • Memoria Interna: está dividida en registros de 32 bit. Está dividida físicamente en

bloques de datos e instrucciones separados entre sí, sin embargo cuando la memoria es usada, estos bloques son organizados de forma lógica en un único espacio de memoria. El acceso a los datos se realiza a través de un puerto interno de 32 bits.

• Memoria Externa y Opciones de Periféricos:

- 7 Mbits de RAM - Cache programable - Cache de 2 niveles - Interfaz de memoria externa de 32 bit soportando memorias SDRAM,

SBSRAM, SRAM y otras memorias asíncronas. - Control de transferencia de datos para DMA sin intervención de la CPU. El

controlador de DMA tiene cuatro canales programables y un quinto auxiliar. - Controlador EDMA, de 16 canales, que proporciona las mismas funciones que el

controlador de DMA. - Dos relojes de 32 bit, de propósito general, usados para: eventos temporales,

contadores, generador de pulsos, interrupciones de CPU y eventos de sincronización entre los controladores de DMA/EDMA.

Page 37: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

41

4. IMPLEMENTACIÓN DE LOS ALGORITMOS DE DETECCIÓN DE MOVIMIENTO Y DE SEGUIMIENTO DE OBJETOS Se distinguen dos formas de operación: análisis global de toda la imagen y análisis local alrededor de una ventana de búsqueda. El análisis global de toda la imagen se realizará al comienzo del proceso, para detectar todos los móviles presentes en ese momento y cada cierto tiempo, para discernir si un nuevo objeto ha entrado en la secuencia o evaluar si un objeto ha salido definitivamente de ella. Es en esta forma de operación donde se etiqueta a cada uno de los móviles. El análisis local será la forma de procedimiento normal en la que se seguirá por separado a cada uno de los objetos en movimiento presentes en la escena. Se han utilizado las mismas funciones tanto para el análisis global, como para el análisis local de las distintas imágenes. Este fue uno de los objetivos desde el punto de vista de la programación: optimizar el diseño de los distintos algoritmos de forma que fueran lo más sencillos posibles para intentar disminuir el tiempo de cómputo. Por otro lado, se ha intentado que el código sea reutilizable, de forma que las funciones que se utilizan en el análisis global de la imagen son las mismas que utilizamos para el análisis local de la región que encuadra al móvil. Se puede resumir el proceso en el siguiente esquema:

Figura 11. Esquema general de operación

A continuación, se expone un diagrama de flujo que contiene las distintas funciones que se han venido desarrollando para conformar tanto el análisis global como local.

SI NO

ANÁLISIS GLOBAL

ANÁLISIS LOCAL

t= Tciclo

INICIO DE BUCLE

Page 38: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

42

Figura 12. Esquema funcional propuesto

Vamos a analizar en detalle cuál es el cometido específico de cada función. Para poder ver con claridad cada uno de los procesos, vamos a utilizar como ejemplo una secuencia

INICIO

CAPTURA DE FRAME 1

4.1.1 FILTRADO

4.1.2 CAPTURA FRAME 2

4.1.3 FILTRADO

4.1.4 DETECCIÓN MOVIMIENTO

4.1.5 UMBRALIZADO DINÁMICO Y BINARIZADO

4.5 CRECIMIENTO

4.6 SEGMENTACIÓN

4.8 FILTRO DE KALMAN

4.9 ACTUALIZACIÓN DE LA VENTANA DE BÚSQUEDA

4.7 CÁLCULO DEL CENTRO DE MASAS

ACTUALIZACIÓN FRAME 1 CON FRAME 2

Page 39: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

43

de imágenes correspondientes a una bola en movimiento, que desplaza por encima de una mesa. La secuencia, pertenece a una toma de vídeo en formato.AVI realizada con una cámara HP Photosmart 735, aunque después la toma de cada fotograma se realizó con un programa que resituyó las imágenes y las convirtió al formato .JPG.

Figura 13. Secuencia de imágenes de “Bola”

Page 40: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

44

4.1 IMPLEMENTACIÓN DE LAS FUNCIONES DEL FLUJO DE PROCESAMIENTO 4.1.1 FILTRADO 4.1.1.1 Filtrado por el Método de la Media

Utilizando la siguiente máscara ⎥⎥⎥

⎢⎢⎢

1,1,11,1,11,1,1

91 , se obtuvieron los siguientes resultados

Figura 14: (a) Primer fotograma filtrado por la media; (b) Segundo fotograma filtrado por la media; (c) Imagen diferencia de (a) y (b); (d) Binarizado de (c)

Page 41: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

45

4.1.1.2 Filtrado por el Método de la Mediana

Figura 15. (a) Primer fotograma filtrado por la mediana; (b) Segundo fotograma filtrado por la

mediana; (c) Imagen diferencia de (a) y (b); (d) Binarizado de (c) 4.1.1.3Filtrado utilizando Filtros Gaussianos Se diseñaron dos filtros gaussianos diseñando dos máscaras de convolución, utilizando ambos, como filtros lineales en un entorno de vecindad. Las máscaras usadas fueron las siguientes.

- Máscara rectangular 3x3: ⎥⎥⎥

⎢⎢⎢

1,2,12,4,2

1,2,1

161

- Máscara rectangular 5x5:

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

3,6,8,6,36,14,19,14,68,19,25,19,86,14,19,14,6

3,6,8,6,3

2491

Los resultados obtenidos con ambas máscaras se muestran a continuación:

Page 42: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

46

Figura 16. (a) Primer fotograma filtrado por la primera máscara; (b) Segundo fotograma filtrado por la primera máscara; (c) Imagen diferencia de (a) y (b); (d) Binarizado de (c)

Figura 17. (a) Primer fotograma filtrado por la segunda máscara; (b) Segundo fotograma filtrado por

la segunda máscara; (c) Imagen diferencia de (a) y (b); (d) Binarizado de (c)

Page 43: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

47

4.1.1.4 Filtrado Paso de Alta En nuestro caso, utilizamos una máscara de convolución de 3x3 elementos:

- Máscara para filtrado paso de alta

⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢

−−−

−−

−−−

81,

81,

81

81,1,

81

81,

81,

81

Los resultados obtenidos, se muestran a continuación

Figura 18. (a) Primer fotograma filtrado paso de alta; (b) Segundo fotograma filtrado paso de alta; (c) Imagen diferencia de (a) y (b); (d) Binarizado de (c)

Page 44: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

48

4.1.1.5 Conclusiones de los Filtros Probados En los distintos ensayos encontramos que el filtro de la mediana proporcionaba la mejor solución entre las diseñadas porque desdibuja menos los contornos. Esta propiedad es muy interesante a la hora de realizar la segmentación y la diferenciación posterior de cada fotograma. Como contrapartida, también presentaba el mayor tiempo de procesado. Como otra opción, se analizaron los resultados obtenidos cuando se utilizó el filtro de media. Es el más rápido que el filtro de la mediana y por lo tanto era una buena opción a tener en cuenta cuando buscamos alta velocidad de procesado. Como inconveniente, presenta un desdibujamiento de los bordes de los objetos. Teniendo estas dos opciones complementarias en velocidad de proceso y en definición de los objetos, se ha pensado en utilizar ambas, en vez de elegir solo entre una de ellas. De esta forma se sacarán conclusiones realistas a la hora de integrar todo el sistema en nuestra plataforma. Se tendrá que llegar a un compromiso entre la precisión del seguimiento y el tiempo necesario para poder dar una respuesta válida en tiempo real por parte del DSP. Por esta razón, en los siguientes apartados se expondrán los resultados obtenidos con cada algoritmo, para cada uno de los filtros. 4.1.2. DETECCIÓN DE MOVIMIENTO Por ser este uno de los puntos fundamentales de este trabajo, antes de detallar los resultados obtenidos con la secuencia de la bola, vamos a discutir las dos técnicas ensayadas para la detección de movimiento, que fueron el método basado en la imagen diferencia y el método basado en comparación de patrones. Queremos destacar que se ha intentado desarrollar soluciones que podamos implementar fácilmente en tiempo real. Esta consideración es crítica, ya que la solución obtenida en este punto nos determinarán sobre qué modelos de la realidad son aplicables nuestros resultados. Por eso se ha optado por descartar los imágenes sintéticas (figuras geométricas sobre fondos homogéneos, por ejemplo) y se han elegido escenarios tomados directamente de la realidad. Por este motivo se ha elegido como medio para tomar las imágenes una cámara comercial (modelo HP-735). Esta cámara tiene unas prestaciones muy buenas para realizar fotografías y grabar algún minuto de vídeo a nivel de usuario, pero su óptica, resolución y arquitectura interna son bastante peores que las de la cámara de laboratorio que finalmente utilizaremos. 4.1.2.1 Detección de Movimiento Basado en Comparación de Patrones (Correspondencias) Por tener características parecidas, hicimos primero una comparación entre los criterios de mínimo error cuadrático medio y mínima diferencia absoluta media. A continuación se compararon éstos con el criterio de máxima correlación. Como primeras imágenes, tomamos los siguientes dos fotogramas:

Page 45: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

49

Figura 19. Primera imagen del “Payaso”

Figura 20 . Segunda imagen del “Payaso”

El resultado tras aplicar el criterio de mínimo error cuadrático, utilizando un tamaño de bloque de 16x16 fue:

Page 46: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

50

Figura 21. Detección de movimiento por comparación de patrones usando el método de MSE, para “payaso”

Si existe movimiento de un bloque de una posición a otra, se representa con una flecha roja con principio en la situación anterior del bloque y final en la nueva posición. La región que no sufre movimiento se representa con un punto. Se puede observar cómo el resultado obtenido nos indica que todas las regiones han sufrido desplazamiento de una imagen a otra (si bien en torno al payaso parece que los vectores están algo más correlacionados), aunque nosotros sepamos que el único objeto que se ha movido en la escena hacia la izquierda, ha sido el payaso. Con el criterio de mínima diferencia absoluta media se obtiene un resultado muy parecido (por eso no lo incluimos aquí de forma innecesaria) Lo siguiente que se pensó es que el nivel de ruido y las pequeñas variaciones de intensidad de los píxeles de ambas imágenes, determinaban que las regiones de ambos fotogramas fueran muy diferentes entre sí. Por eso se diseño un filtro de suavizado a la entrada, con el fin de salvar estos inconvenientes. Se decidió realizar un filtro basado en la mediana del entorno de vecindad de cada píxel. Este tipo de implementación tiene la ventaja de filtrar el ruido de la imagen, suavizándola, pero sin desdibujar en exceso los contornos (otro tipo de filtros, como por ejemplo el de la media, realiza también esta función de suavizado de forma más sencilla computacionalmente, pero desdibujando algo más los contornos). El resultado que obtuvimos fue el que mostramos a continuación:

Page 47: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

51

Figura 22. Detección de movimiento por comparación de patrones usando el método de MSE, con prefiltrado, para “Payaso”

Como se ve, aún cuando la introducción del filtro suaviza la imagen eliminando parte del ruido e igualando cada píxel con su entorno de vecindad, los resultados siguen siendo malos. Se sigue poniendo de manifiesto que hay un gran cambio en todas las regiones de los dos fotogramas.

El siguiente paso que se dio para probar los dos criterios, fue el de segmentar la imagen en blanco y negro. Para ello utilizamos un umbral de negro, que en nuestro caso fue el nivel de gris medio del objeto que queríamos seguir (aunque también se experimentó de forma manual con otro tipo de umbrales para ver los resultados que se obtenían). De esta manera dividimos la escena en dos regiones: la primera se corresponde con aquellas partes cuyos píxeles están por encima del nivel de gris determinado manualmente para el payaso, y que quedaron representadas en negro. La segunda se corresponde con aquellos píxeles que están por debajo de este nivel de gris y que quedaron representadas en blanco. Fueron los primero experimentos que se hicieron y como conclusiones se sacaron que el umbralizado propuesto lo único que hacía era eliminar la pared del fondo, y las regiones representadas por flechas simplemente eran debidas cambios de brillo. Mostramos las dos nuevas imágenes tomadas a continuación.

Page 48: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

52

Figura 23. Primera imagen de “Payaso y otros”

Figura 24. Segunda imagen de “Payaso y otros”

Los resultados aplicando el criterio de mínimo error cuadrático medio fueron:

Page 49: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

53

Figura 25. Detección de movimiento por comparación de patrones usando el método MSE, con binarizado, para “Payaso y otros”

Los resultados aplicando el criterio de mínima diferencia absoluta media fueron:

Figura 26. Detección de movimiento por comparación de patrones usando el método MDA, con binarizado, para “Payaso”

Vemos que tras la segmentación los resultados siguen siendo los mismos. Ahora no se detecta movimiento en todas las regiones del cuadro como en los casos anteriores porque se ha eliminado la pared del fondo, de hecho, la mayoría de las regiones de la imagen no tienen vectores de movimiento asociadas (están representadas por un punto) porque se ha eliminado todo nivel de brillo en ellas. Lo que en principio pensamos eran

Page 50: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

54

4 zonas de movimiento: el payaso, el libro, el cable junto con el enchufe y la colcha donde se apoya todo el conjunto eran tan solo la variación del brillo de aquellas zonas que no se habían umbralizado, de hecho las flechas que indican hacia dónde se ha movido cada zona están poco correlacionadas entre sí. A continuación vamos ver cuáles han sido los resultados aplicando el criterio de correlación cuando hemos hecho un prefiltrado sobre las mismas imágenes, pero después no se las ha sometido a un proceso de umbralizado.

Figura 27 . Detección de movimiento por comparación de patrones usando el método de correlación, para “Payaso “

Figura 28 . Detección de movimiento por comparación de patrones usando el método de correlación, para “Payaso y otros”

Page 51: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

55

En la primera figura sólo tenemos unos pocos vectores de movimiento que indican que el payaso se ha desplazado hacia la izquierda. El resto del cuadro ha permanecido inalterado entre las dos imágenes y por eso no existen más vectores de movimiento en ninguna otra zona. En la segunda figura observamos que las zonas de movimiento también son mucho más realistas y están mejor determinadas. Tenemos unos vectores que nos indican que el payaso se ha desplazado hacia la izquierda y otros que representan el movimiento longitudinal de la colcha. Prácticamente no existe detección de movimiento en el enchufe y no hay vectores en el cable. La única zona conflictiva sigue siendo el brillo y las sombras sobre el libro (tenemos que decir que su portada es satinada) debido al cambio de iluminación entre los dos instantes en que se realizaron las dos fotografías. Con todo ello el número de vectores y su longitud son menores que en los casos anteriores. Tras el análisis de estos resultados, es evidente que el criterio de correlación es con diferencia el mejor de los tres vistos. No solamente nos da un resultado más realistas de cuáles han sido los objetos que se han movido dentro de la escena, sino que además no tenemos que hacer una segmentación por umbralizado de la imagen. Es por esto que lo hemos elegido como elemento principal en la resolución del algoritmo de correspondencia de regiones. Después de la elección del criterio, pensamos en probar con una mayor exigencia la robustez del mismo. Hemos comentado que la toma de los dos fotogramas utilizados para probar nuestros algoritmos se ha hecho con una cámara hp photosmart 735. Esta cámara hace un tratamiento (filtrado y preprocesado) de la imagen capturada antes de presentarla por la salida, de forma que las fotografías suelen tener una gran nitidez. Esto supone un inconveniente para nosotros, ya que querríamos saber cómo de bien funciona nuestro algoritmo en el peor de los casos: no ya para dos fotografías consecutivas, sino para una grabación de vídeo. Por eso, el siguiente paso consistió en usar el modo de vídeo que también incorpora esta cámara. Hacemos notar que estas imágenes no son directamente los fotogramas .AVI tomados por la cámara, sino que sufrieron un tratamiento posterior para pasarlos a formato .JPG. El modo de vídeo presenta una peor calidad de imagen, ya que los resultados se presentan tal como se toman de la realidad, limitados por la precisión de la óptica de las lentes y el sensor CCD de la cámara. A continuación presentamos aquí tres fotogramas consecutivos de la secuencia.

Page 52: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

56

Figura 29 a. Primer fotograma de “Bote”

Figura 29 b . Segundo fotograma de “Bote”

Page 53: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

57

Figura 29 c. Tercer fotograma de “Bote”

Podemos comprobar cómo entre las tres imágenes existen grandes cambios en cuanto a grado de luminosidad, sombras en la escena, que afecta a cada imagen.Vemos que el único objeto en movimiento es el bote rojo, a lo largo de toda la escena. En su interior hay bolígrafos, lápices, rotuladores que se pueden ver a través de los orificios. Vamos a ver cuáles fueron los resultados tras aplicar el algoritmo de correspondencia de regiones usando el criterio de correlación.

Figura 30 a. Detección de movimiento por comparación de patrones usando el método de correlación, para “Bote”

Page 54: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

58

Figura 30 b. Detección de movimiento por comparación de patrones usando el método de correlación, para “Bote”

Figura 30 c. Detección de movimiento por comparación de patrones usando el método de correlación, para “Bote”

A pesar de que la iluminación, el ruido y la variación en las sombras en estas secuencias de vídeo sean peores que en los casos analizado de dos fotografías, el algoritmo nos ha servido en esta ocasión. Salvo algunos vectores de movimiento aislados, tenemos prácticamente todos los vectores de movimiento en las zonas correctas: en la zona del bote, moviéndose hacia la izquierda y en la sombra proyectada por el bote, también hacia la izquierda. El hecho de que también obtengamos vectores en la borde de la zona de sombra proyectada por el bote, no se puede considerar como un error, al contrario, ya que esta sombra forma parte del bote, es decir, cuando se mueve el bote, la sombra

Page 55: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

59

también es arrastrada, con lo cual detectamos movimiento en su borde. Esto es lo que debía de esperarse (observar que dentro de la sombra no existe movimiento). 4.1.2.2 Detección de Movimiento Basado en la imagen diferencia. Vamos a detallar los resultados experimentales que obtuvimos utilizando este método, cuando se sometió a la imagen a un prefiltrado por el método de la mediana, se le realizó la imagen diferencia y posteriormente se la sometió a un umbralizado.

Figura 31. Imagen diferencia para “Payaso”

Figura 32 a. Binarizado del resultado de la imagen difencia para “Payaso” con umbral de 4.

Page 56: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

60

Figura 32 b. Binarizado del resultado de la imagen difencia para “Payaso” con umbral de 10.

Una vez aplicado el método de detección de movimiento basado en la diferencia entre dos imágenes consecutivas, se puede apreciar fácilmente cuáles son los píxeles que han cambiado de una imagen a otra (y por lo tanto su diferencia es distinta de cero). En nuestro caso, se puede apreciar, que el objeto que se ha movido entre un instante y otro es el “Payaso”.Teóricamente, los píxeles de las regiones de ambas imágenes que no hubieran sufrido cambios (por ejemplo el fondo) tendrían un valor igual a cero. Sin embargo esta es una idealización que sólo se cumple en imágenes sintéticas generadas por ordenador o en casos muy particulares de imágenes reales. Lo normal es que los píxeles de las regiones que no han sufrido movimiento, tengan un valor muy bajo en la imagen diferencia, mientras que los que se encuentran en zonas de movimiento tienen valores mucho mayores. Para ilustrar esto último, se sometió a la imagen diferencia resultante a un binarizado utilizando dos umbrales. En el primero, se estipuló que el nivel de blanco lo tendrían los píxeles cuyo valor en la imagen diferencia fuera mayor a 4, los píxeles que no lo sobrepasaran (es decir, entre 0 y 3), estarían a negro.En la siguiente se consideró que el umbral de blanco estaría ahora en 10. Exponemos los resultados obtenidos siguiendo el mismo criterio para la secuencia de dos fotogramas “Payaso y otros”, utilizados anteriormente cuando se analizaron las técnicas de detección de movimiento basadas en correlación.

Page 57: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

61

Figura 33 a. Binarizado del resultado de la imagen difencia para “Payaso y otros” con umbral de 4.

Figura 33 b. Binarizado del resultado de la imagen difencia para “Payaso y otros” con umbral de 10 Una vez binarizada la imagen, podemos observar que las figuras que se mueven en la escena son el payaso, la colcha, el cable y el libro.En la segunda figura se puede apreciar una mayor presencia de ruido en toda la escena. Este se elimina en gran medida utilizando un umbral más alto de filtrado a la hora de binarizar (en este caso 10) como se observa en la figura.

Page 58: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

62

Al igual que se hizo en el apartado anterior, se analizarán los resultados que estos algoritmos producen sobre una secuencia de vídeo tomada por la cámara HP Photosmart 735.

Figura 34 a. Binarizado de la imagen diferencia para dos secuencias de vídeos de “Bote”, con umbral de 30

Figura 34 b. Binarizado de la imagen diferencia para dos secuencias de vídeos de “Bote” , con umbral de 30 Los resultados obtenidos en este caso, son muy parecidos a los recogidos cuando se aplicó el algoritmo de comparación de patrones basado en correlación. Las partes de la escena que se mueven, de un fotograma a otro son: el bote, y la sombra que “arrastra” a

Page 59: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

63

lo largo del desplazamiento, ambos hacia la izquierda. Se observa cómo, de nuevo, dentro de la sombra no existe movimiento, sino que éste se detecta en la periferia. Lo que sí es importante destacar, es que se ha tenido que utilizar un umbral de 30 para realizar el binarizado de ambas imágenes, es decir, tres veces más de lo que habíamos estado utilizando hasta ahora. Se confirmó de esta manera, que las secuencias de vídeo de las que dispusimos tenían las mismas componentes de ruido pero de mayor amplitud que las de las fotografías, necesitando entonces un umbral de filtrado mucho más alto, a la hora de hacer el binarizado, de forma que componentes no deseadas no influyeran en el resultado final. 4.1.2.3 Conclusiones del Estudio de Determinados Algoritmos para la Detección de Movimiento

Sin una buena estimación inicial de las zonas de la escena en movimiento, los otras partes de la solución diseñada, darían resultados erróneos o por lo bastante peores. Además de encontrar una solución adecuada para la detección precisa de las zonas en movimiento, es necesario encontrar una solución que consumiera el mínimo de recursos, ya que, como se ha dicho, el fin último de diseño es realizar un seguimiento en tiempo real dentro de una plataforma convencional. Es por esto que se ha realizado un estudio tan amplio de las técnicas de detección de movimiento. Con el mismo espíritu se han probado los distintos diseños con varios tipos de imágenes y entornos. Tras un análisis, se comprobó que si bien los algoritmos basados en comparación de patrones nos permiten encontrar las zonas de movimiento de imagen, también consumen más recursos y tardan más tiempo en generar un resultado que las basadas en el algoritmo de diferencia. Si recordamos, los algoritmos de comparación de patrones dividen cada imagen en distintas (en nuestro caso de geometría fija) de forma que no tuviéramos que trabajar a nivel de píxel. Posteriormente, y para cada región, se busca en el siguiente fotograma cuál es la región más parecida a la considerada dentro de su entorno de vecindad, utilizando cualquiera de los métodos vistos (correlación, diferencia media o mínima diferencia absoluta media). A partir de aquí, se encontraban las regiones que se habían movido. Este proceso conllevaba comparar cada región con ella misma y con su entorno de vecindad en el siguiente fotograma. Es decir, como mínimo se tenían que realizar nueve comparaciones para cada una de las regiones (que no estuvieran situadas en los bordes) en que dividimos la imagen. Normalmente las imágenes anteriores tenían un tamaño de 640x480 píxeles. En el mejor de los casos se hicieron divisiones de 32x32 píxeles como tamaño mayor de región y se consideró solamente el entorno de vecindad de las regiones vecinas a la considerada. Por lo tanto el número de iteraciones que se tenían que realizar en este caso fueron 4x3+18x5x2+13x5x2+18x13x9. Es decir, se tenían que hacer un total de 2428 búsquedas. Como estas búsquedas estaban restringiadas a entornos pequeños de 32x32 píxeles, el tiempo de ejecución no era excesivamente grande. En total para una imagen de 640x480, se analizaron de forma iterativa 2.486.272 píxeles haciendo varias llamadas a función. Este proceso sería más rápido si la comparación entre dos regiones se hiciera en paralelo, en lugar de secuencialmente (recorriendo uno a uno los píxeles de cada región) como ha sido en nuestro caso. Por el contrario, el método basado en la diferencia entre dos fotogramas es más sencillo de programar (tiene muchas menos líneas de código en cada bucle) y compartivamente es mucho más rápido. Tan sólo consistía en recorrer en paralelo los píxeles de ambas imágenes y hacer la diferencia entre ellos. Para una imagen de 640x480, se analizaron

Page 60: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

64

307.200 píxeles. Quiere esto decir, que se analizaron bastante menos píxeles, teniendo un bucle con menos líneas de código que el método anterior. Este método desarrolla lo que nosotros hemos acordado en definir como una búsqueda pasiva del movimiento. Por estas razones, el algoritmo basado en la imagen diferencia nos dio prestaciones de tiempo mucho mejores que los métodos basados en comparación de patrones. Se decidió, por tanto, tomarlo como el mejor de los criterios experimentados y el método elegido para la realización de la detección de movimiento en la solución global propuesta. A continuación mostramos los resultados al aplicar este métodos sobre las imágenes de la bola, filtrando primero con el método de la mediana y después con el de la media.

Figura 35. Imagen diferencia con prefiltrado por la mediana

Figura 36. Imagen diferencia con prefiltrado por la media

4.1.3. CÁLCULO DEL UMBRAL DINÁMICO PARA BINARIZADO POST DIFERENCIA Una primera opción fue establecer este umbral manualmente a partir de las experiencias previas que se realizaron con cada una de las secuencias de imágenes vistas hasta ahora. Sin embargo nos dimos cuenta de que aunque la binarización de las imágenes se realizaba de forma correcta, esta forma haría poco general la solución general adoptada. Para este fin se ha diseñado y probado un método de obtención del umbral para el binarizado, de forma dinámica. La obtención del umbral es posterior a la realización de la imagen diferencia. Está basado en las características de la propia imagen diferencia. Sabemos que en esta imagen los píxeles situados en zonas de movimiento tienen un valor de intensidad cercano a uno, o por lo menos, valores bastante alejados de cero. Por

Page 61: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

65

el contrario, las zonas sin movimiento o los objetos estáticos, presentan valores en esos píxeles que idealmente deberían ser igual a cero. Sin embargo, observamos que en la realidad los píxeles de regiones estáticas presentan niveles de gris muy distintos a los esperados. Para distinguir entre unas y otras zonas se ha analizado el histograma de la imagen diferencia. En nuestro caso, la determinación del umbral de separación T, se realizó a partir del análisis de ocurrencia del patrón fundamental. Como se ha analizado anteriormente, en la imagen diferencia el nivel de gris predominante corresponde con valores cercanos a cero, ya que estos son los niveles de intensidad que presentan el fondo y los objetos estáticos. Por lo tanto serán estos los valores de grises predominantes que darán como resultado el mayor pico en el análisis del histograma. Por otro lado, los píxeles que presentan valores distintos de cero y que se corresponden con ruido, suelen estar cercanos a este nivel máximo. Por lo tanto, se ha elegido como criterio, que sólo los píxeles que estén un 8% por debajo del nivel máximo del histograma sean considerados como parte de la escena en movimiento y sean etiquetados en la imagen binarizada a uno. Los demás pasan a valer desde ese momento cero. A continuación se presentan los histogramas y los umbrales obtenidos en el análisis de la imagen diferencia, tomando como criterios de preprocesado el filtrado por la mediana y el filtrado por el método de la media.

Figura 37 . Histograma para binarización usando un prefiltrado por la mediana. Umbral obtenido: 6

Page 62: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

66

Figura 38. Histograma para binarización usando un prefiltrado por la mediana. Umbral obtenido: 6

Se consiguieron umbrales muy parecidos a los fijados manualmente de forma experimental, lo que sirvió para comprobar la eficacia del método. 4.1.4. CRECIMIENTO Una vez se ha realizado la diferenciación entre los dos fotogramas y el binarizado de la imagen resultante, es usual que nos encontremos zonas aisladas pertenecientes regiones de movimiento. Estas zonas aisladas suelen tener varios orígenes. En primer lugar, la mayoría de las mismas suelen corresponder con parte del ruido que no se ha conseguido filtrar previamente. Consiste en dar un valor de uno binario a píxeles que podían o no pertenecer a zonas de movimiento, pero que tienen un peso poco importante, a nivel de gris, en la imagen que se analiza. De aquí el hecho de elegir convenientemente el umbral de binarizado adecuado en niveles anteriores. Estos efectos se solucionan en gran medida, realizando un análisis local de cada imagen, en los algoritmos de preprocesado. Es decir, dividir el fotograma en un número constante de regiones y aplicar a cada una de ellas un filtrado a nivel local y binarizado con umbrales diferentes, también a nivel local. Con esto se consigue realizar un preprocesado adaptable a las necesidades de cada parte de la imagen (mejor cuanto más pequeño sea el tamaño de región a analizar). Sin embargo también esta forma es sumamente costosa a nivel computacional y ni siquiera se ha considerado para nuestros algoritmos. En segundo lugar, parte de las zonas aisladas son debidas al propio proceso de cálculo de la imagen diferencia. Este algoritmo analiza cada píxel y los que pertenecen a sus regiones vecinas, en la imagen binarizada. Los píxeles que tienen una conectividad mayor que un umbral fijado, son considerados y los píxeles que pertenecen a su región de vecindad que están a cero binario son cambiados a uno binario. Lo contrario ocurre con los píxeles que no tienen un nivel de conectividad alto: son eliminados de la imagen. De esta manera, las zonas aisladas consecuencia de alguna de las clases de ruido comentadas, desaparecen de la imagen. El efecto contrario se pretende conseguir con zonas aisladas próximas y que pertenecen al objeto en movimiento. A continuación se presentan los resultados obtenidos para una imagen diferencia. Primero considerando un prefiltrado por el método de la mediana y después por el método de la media. Nuestro algoritmo realiza dos crecimientos consecutivos de cada fotograma de entrada, para conseguir un efecto mucho más sólido en la imagen resultante.

Figura 39. Crecimiento cuando se utiliza prefiltrado por la mediana

Page 63: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

67

Figura 40. Crecimiento cuando se utiliza prefiltrado por la media

4.1.5. SEGMENTACIÓN En nuestro caso se desarrolló un algoritmo basado en conectividad. Se analizan de forma secuencial, e iterativavmente por filas y columnas, los píxeles de la imagen resultado del algoritmo de crecimiento. Analizando los 8 vecinos de cada píxel, podemos determinar la situación que ocupa éste en relación con los demás. Según hemos diseñado este procedimiento, podemos considerar tres casos que exponemos seguidamente:

- En el primero, encontramos que tras analizar a los 8 vecinos del píxel en

cuestión, ninguno de ellos pertenezca a alguna región. Esto significa que el píxel que estamos analizando es el primero de un nuevo objeto. Por tanto lo etiquetamos, y pasamos a analizar el siguiente.

- El segundo caso se nos plantea cuando alguno de los 8-vecinos del píxel a analizar pertenece a una región ya considerada. En este caso, nuestro píxel tendrá la misma etiqueta, y formará parte de dicha región.

- El tercer caso es más complejo y se produce si tras analizar los 8-vecinos de nuestro píxel, nos encontramos con que uno o más de ellos pertenecen a regiones distintas. Entonces consideramos que nuestro píxel sirve de nudo de conexión entre las regiones, y por lo tanto las regiones que hasta ese momento se etiquetaban de forma distinta, tendrán ahora una misma etiqueta, ya que realmente son el mismo objeto. Recordemos que el análisis de la imagen se realiza de forma secuencial por filas y columnas. Si la imagen a segmentar fuera la letra “V”, al comienzo del algoritmo se detectarían los dos extremos superiores como regiones distintas. El vértice sería en este caso, el píxel que serviría de unión a ambas regiones y daría lugar a la definición de un único objeto. Circunstancias parecidas ocurren cuando se analiza la letra X o muchos de los objetos en movimiento de la vida real.

A continuación presentamos los resultados que obtuvimos al probar este diseño con las imágenes de salida del algoritmo de crecimiento de regiones. La primera, como se está viendo hasta ahora, sometida a un prefiltrado por el método de la mediana y la siguiente sometida a un prefiltrado por el método de la media.

Page 64: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

68

Figura 41. Segmentación con prefiltrado de mediana

Figura 42. Segmentación con prefiltrado de media

Tras una evaluación del algoritmo, se ha determinado que es el más tedioso computacionalmente, de los diseñados a lo largo de todo el proyecto. El motivo es que aparte de realizar un análisis de cada uno de los píxeles de la imagen, antes de dar un valor en la imagen de salida, se hace también un análisis de cada uno de los 8 vecinos que le rodean. Si nos encontramos con el caso más complejo de unión de varias regiones, el algoritmo pierde bastante tiempo en volver a redefinir la etiqueta de cada punto de la matriz de salida del proceso, cada vez que nos encontramos que las regiones se unen en una sola. Desde nuestro punto de vista, la parte del diseño donde podríamos ganar tiempo, sería precisamente en esta última de redefinición de etiquetas. Proponemos que el cambio se haga una sola vez al final del algoritmo. Para ello se podrían usar estructuras basadas en grafos, ya que una misma región puede ser redefinida más de una vez. 4.1.6. DETERMINACIÓN DEL CENTRO DE MASAS En nuestro caso se ha optado por la opción de determinar el centro de masas, a partir de los extremos del objeto considerado. Nos ha parecido más intuitiva esta opción, una vez determinados correctamente los distintos objetos que componen el cuadro, mediante el proceso de segmentación. El algoritmo simplemente discrimina la posición de los píxeles inicial y final de cada móvil, fijando la fila y la columna de los mismos. El centro de masas tendrá como componente x, la suma de la componente x del píxel que pertenece al objeto, situado en el extremo más izquierdo, más la mitad de la distancia

Page 65: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

69

que existe entre este extremo y el situado más a la derecha y que también pertenece al objeto Análogamente, la componente y, será la suma de la componente y del píxel situado más a la izquierda, más la mitad de la distancia que existe entre el extremo superior y el inferior. El centro de masas será por tanto el centro del rectángulo en el que nuestro objeto está circunscrito.

Figura 43. Determinación teórica del centro de masas de un objeto

2)12(,

2)(

112

1yyyyxxxx cmcm

−+=

−+= (10)

Aprovechando que tenemos localizados la posición extrema hacia derecha, izquierda, arriba y debajo de los píxeles de cada móvil, mostramos gráficamente lo que hemos denominado ventana de localización del objeto, que engloba a cada móvil dentro de un rectángulo. Esta ventana no interviene en ninguno de los cálculos en los distintos algoritmos, pero permite visualizar de forma más intuitiva cada objeto en el cuadro. Seguidamente presentamos los resultados de los centros de masas hallados para la figura que venimos analizando. El centro de masas está representado por un aspa roja, y la ventana de localización de color azul, sobre la imagen original tomada por la cámara. La primera considera un prefiltrado por el método de la mediana y el segundo por el método de la media.

),( 11 yxA ),( 21 yxB CM ),( 12 yxC ),( 22 yxD

Page 66: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

70

Figura 44 . Centro de masas considerando un prefiltrado inicial por la mediana

Figura 45. Centro de masas considerando un prefiltrado inicial por la media

4.1.7. FILTRO DE KALMAN Una vez calculado el centro de masas de cada una de las imágenes segmentadas, tenemos la posición de los objetos en movimiento, en el instante actual. Se podría repetir el mismo proceso para la siguiente pareja de fotogramas y calcular los nuevos centros de masas en el siguiente instante. Sin embargo, como se ha venido defendiendo hasta ahora, este proceso puede resultar costoso computacionalmente. Como ya se vio una solución mejor consiste en disponer de una estimación de la posición de cada uno de los móviles en el siguiente instante. De esta manera, no se tendrá que buscar cada objeto a lo largo de toda la imagen, esto sólo se hará una vez cada cierto tiempo, en nuestro caso lo único necesario será analizar un entorno de vecindad alrededor de la posición predicha, para buscar de nuevo el objeto dentro de esta región más pequeña. De esta forma, el proceso es mucho más rápido y se puede considerar la posibilidad de que nuestro DSP lo ejecute en tiempo real. Para ello, hemos utilizado como predictor el filtro de Kalman Considerando las matrices Ay H, que representan el modelo de nuestro sistema y el modelo de la estimación, respectivamente, exponemos los resultados de la predicción de los centros de masas hallados para los dos frames. El primero considera un prefiltrado por el método de la mediana y el segundo por el método de la media. En la figura, la predicción del nuevo centro de masas estará representada por un círculo azul.

Page 67: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

71

Figura 46 . Predicción del nuevo centro de masas (Prefiltrado por mediana)

Figura 47. Predicción del nuevo centro de masas (Prefiltrado por media)

4.1.8 ACTUALIZACIÓN DE LA VENTANA DE BÚSQUEDA Una vez tenemos la una estimación actual de la posición de cada uno de los objetos móviles dentro de la escena, representados por sus centros de masas respectivos, y una predicción de los centros de masas en el siguiente instante de tiempo, necesitamos definir las características de la ventana de búsqueda en el siguiente fotograma. En nuestro caso, hemos considerado que la ventana de búsqueda es función del error cometido en la estimación a priori del centro de masas. Además del tamaño del objeto considerado. De esta forma, consideramos una ventana de búsqueda de tamaño variable en cada caso, que dependerá de los parámetros calculados en cada instante. Así, se ha obtenido el tamaño de la ventana de búsqueda como una relación ponderada entre 1

~+nV y

la longitud de la ventana de localización del objeto, en cada eje (eje de ordenadas y eje de abcisas).Tomando como punto medio de la ventana de búsqueda la posición correspondiente al centro de masas estimado, podemos definir los siguientes parámetros: - DistanciaDerecha=DistanciaIzquierda= XLongitudkVk n _~

211 ⋅+⋅ +

- DistanciaArriba=DistanciaAbajo= YLongitudkVk n _~413 ⋅+⋅ +

Longitud_X y Longitud_Y son las longitudes de la ventana de posición del objeto, en cada uno de los ejes, respectivamente. 4321 ,,, kkkk son factores de ponderación.

Page 68: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

72

Configurando estos valores, podremos elegir qué elementos tendrán más peso en la definición de la ventana: el error cometido en la estimación o el tamaño del objeto encontrado. Normalmente se ha considerado que ambos elementos tienen la misma importancia, de manera que se han tomado los factores de ponderación igual a uno en cada eje. Por otro lado, hacemos notar que en prácticamente todos los casos analizados, la ventana de búsqueda engloba a la ventana de localización del objeto. Sin embargo, puede haber situaciones en que ocurra lo contrario y nos encontremos que la ventana que define al objeto englobe a la de búsqueda. Estos casos no son coherentes, ya que la región de búsqueda del objeto no puede ser menor que el tamaño del mismo. Por eso, en situaciones como esta, el algoritmo contempla una redefinición de todos los parámetros del la ventana. En las figuras siguientes podemos observar las ventanas de localización para cada objeto. La exterior representa la ventana de búsqueda para el siguiente fotograma, la interior, la ventana de localización del objeto.

Figura 48. Actualización de la ventana de búsqueda (Prefiltrado por mediana)

Figura 49. Actualización de la ventana de búsqueda (Prefiltrado por media)

4.2. RESULTADOS EXPERIMENTALES OBTENIDOS A PARTIR DEL ANÁLISIS DE DISTINTAS SECUENCIAS DE IMÁGENES. Una vez expuesto el procedimiento seguido para encontrar cualquier objeto en movimiento en el plano de la cámara, vamos a analizar diversos casos obtenidos a partir de las secuencias de imágenes que hemos ido tomando a lo largo de todo el trabajo, formada por objetos en movimiento en distintos entornos, con condiciones diferentes en la toma y en la iluminación. Analizaremos el caso del movimiento de un solo objeto en

Page 69: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

73

el plano de la imagen, el de varios objetos en movimiento, y la respuesta del algoritmo ante la variación de los parámetros más importantes del modelo. Se ha usado principalmente la herramienta Matlab para importar las imágenes de la galería, realizar los cálculos y presentar los resultados por pantalla, y además se ha aprovechado para obtener una medida de tiempos que nos han dado una idea previa de cuánto tarda en ejecutarse cada una de las funciones. La representación de las variables más importante se ha hecho siguiendo el criterio que se ha mantenido en el apartado anterior: el centro de masas actual se representa como un aspa roja, el centro de masas estimado se representa con un círculo azul, la ventana de detección del objeto es la interior y la ventana de búsqueda del objeto en el siguiente fotograma, la exterior. Ha sido muy importante el análisis de los resultados expuestos en este apartado para la elección de una técnica, que proporcione un método sencillo para la detección de movimiento en secuencias de vídeo en tiempo real. Se han comparado los distintos algoritmos entre sí y se han sacado conclusiones, referentes sobre todo al tiempo de procesado y al tratamiento previo de la imagen. Cada técnica tiene una serie de ventajas e inconvenientes que serán disentidas en los apartados siguientes. Por último, hacemos notar que la calidad de las secuencias de vídeo de las que se han tomado los fotogramas que se muestran, es bastante baja. Este hecho habla en favor del algoritmo, ya que no necesitamos una calidad alta en las imágenes para que el algoritmo funcione correctamente.

4.2.1. SEGUIMIENTO A UN SOLO OBJETO EN MOVIMIENTO (a) Bola En primer lugar, vamos a aplicar el algoritmo a la secuencia completa de imágenes de la bola en movimiento a lo largo de una mesa de madera, que nos ha servido de ejemplo en el apartado anterior, para explicar el funcionamiento de cada función.

Page 70: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

74

Figura 50 . Detección de movimiento para “Bola” usando un prefiltrado de mediana

Page 71: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

75

Figura 51 . Detección de movimiento para “Bola” usando un prefiltrado de media

Como se puede comprobar, se realiza un seguimiento completo del móvil a lo largo de toda la escena, utilizando cualquiera de los dos métodos de prefiltrado conocidos. Lo que podemos destacar es que el filtrado de la mediana permite definir mucho mejor las fronteras del objeto además de servir como filtro paso de baja de ruido aleatorio. Es por esta razón por lo que a lo largo del movimiento la ventana de localización del objeto centra a la bola mucho mejor que en el segundo caso en el que utilizamos el filtro de la media. (b) Rinoceronte A continuación mostramos el resultado para otra serie de imágenes que muestran a una figura (un rinoceronte) en movimiento cerca del plano de la cámara.

Page 72: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

76

Figura 52. Detección de movimiento para “Rinoceronte” usando un prefiltrado de mediana

Figura 53. Detección de movimiento para “Rinoceronte” usando un prefiltrado de media

Page 73: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

77

Al igual que en el caso anterior, podemos decir que se consigue de forma satisfactoria un seguimiento del objeto en movimiento en la escena, cuando utilizamos en el preprocesado cualquiera de los dos algoritmos de filtrado vistos. En este caso se puede apreciar mejor que el filtrado utilizando el método de la mediana realiza un seguimiento y una localización del móvil de mayor calidad que cuando se realiza el filtrado utilizando el método de la media. Sin embargo, la ventaja de este último, es su mayor rapidez cuando se lo compara con el primero. Repasando las simulaciones, nos dimos cuenta de que habría que llegar a algún compromiso entre calidad y rapidez de la respuesta en el seguimiento. (c) Persona

Por último, mostramos el resultado obtenido para una secuencia de imágenes que muestran a una persona moviéndose a lo largo de una estancia. Se puede comprobar que el entorno es relativamente más complejo que en las otras dos secuencias analizadas. En este caso, en la escena se puede observar que aparte de la persona en movimiento, se encuentran a su espalda un par de cuadros, y delante una mesa y varias sillas.

Page 74: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

78

Figura 54 . Detección de movimiento para “Persona” utilizando usando un prefiltrado de mediana

Page 75: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

79

Figura 55. Detección de movimiento para “Persona” utilizando usando un prefiltrado de media

Tras el análisis de esta secuencia de imágenes, se observó que el seguimiento de la persona en movimiento se realizaba de forma muy parecida utilizando cualquiera de los dos métodos de prefiltrado. Además, los resultados numéricos finales obtenidos por ambos, eran muy similares. Como conclusión principal, destacamos que cuando los objetos en movimiento son grandes y las condiciones de iluminación no son muy desfavorables, los resultados finales presentados por el algoritmo, son muy parecidos tanto si usamos como método de prefiltrado el algoritmo de la mediana o el de la media. Esto es así porque en este caso, el tamaño y la calidad de las imágenes permiten que el filtro de la media distinga mejor la parte de ruido de la imagen, de la parte de movimiento y presenta resultados más depurados parecidos a los que da normalmente el filtro de la mediana. 4.2.2 SEGUIMIENTO DE VARIOS OBJETOS EN MOVIMIENTO Hasta el momento sólo hemos analizado cuál es el resultado del algoritmo cuando hay un solo objeto en movimiento en la escena. Sin embargo, a partir de las funciones propuestas, no es difícil generalizar el algoritmo para que pueda detectar los distintos objetos en movimiento, que puedan existir en un instante determinado en una secuencia de vídeo. De esta forma, se puede etiquetar cada objeto en movimiento, abriéndose para

Page 76: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

80

cada uno, una ventana de posición y una ventana de búsqueda en el siguiente fotograma. Para cada región se aplican de forma independiente todas las funciones de filtrado, diferenciado, binarizado, etc. vistas anteriormente y utilizadas para el caso de un solo móvil dentro de la escena. Como salida, tendremos la posición del centro de masas actual y predicho, así como las ventanas de localización y de búsqueda, para cada objeto etiquetado. En este apartado analizamos una secuencia de imágenes de vídeo que muestra a dos personas que están separadas y que después se acercan y se dan la mano. La secuencia de vídeo fue tomada en un entorno complejo, en el que se tenía como fondo distintos objetos (una diana, un póster, una puerta, un telefonillo, ...), de distinto color y tamaño. Como dificultad añadida, el fondo de la persona que viste de negro es oscuro, presentando al algoritmo de la diferencia mayor dificultad para la detección de movimiento. Además, la entrada de luz en la estancia hace que se generen sombras.

Figura 56. Seguimiento para dos personas utilizando prefiltrado por mediana

Page 77: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

81

Figura 57. Seguimiento de dos personas utilizando prefiltrado de media

Como se puede comprobar, tras la aplicación del algoritmo se obtuvieron resultados satisfactorios tanto en el caso en el que se utilizó como método de prefiltrado el algoritmo de la media, como cuando se utilizó el algoritmo de la mediana. Los resultados numéricos obtenidos fueron menos parecidos entre sí comparados con los resultados analizados cuando se consideró el caso de una persona en movimiento. Seguimos comprobando que un prefiltrado por la mediana elimina de forma mucho mejor el ruido de la escena, a la vez que no desdibuja la frontera de los objetos en movimiento. De esta forma, los resultados que se obtienen al aplicar posteriormente las distintas funciones, son mucho más exactos y se ajustan mejor a la realidad. Sin embargo con ambos métodos podemos tener un seguimiento bastante correcto de los objetos en movimiento que componen la escena. Se puede observar que en los primeros fotogramas, el algoritmo se centra por completo en el conjunto de ambas personas en movimiento a medida que se van acercando. Sin embargo, hay un momento en el que las dos personas se detienen, dejan de desplazarse longitudinalmente por la escena, y mueven sólo los brazos. En este caso, los algoritmos siguen al objeto en movimiento y dejan de encuadrar a la persona completa. Se ha comentado anteriormente, pero es necesario recordar en este apartado, que tras realizar un análisis local de cada uno de los objetos etiquetados, se vuelve a realizar un

Page 78: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

82

análisis general del fotograma entero. En los casos en los que sepamos que sólo hay un objeto en movimiento, no sería necesario analizar otra vez todo el fotograma, pero en aquellos donde existen varios objetos en movimiento es muy conveniente. De esta forma podremos detectar si hay algún móvil nuevo en la escena (por ejemplo otra persona), se ha producido la unión de lo que antes eran dos móviles, en uno solo (por ejemplo si dos personas se juntan al darse un abrazo) o si lo que antes era un solo objeto en movimiento, actualmente son dos (las dos personas al separarse después del abrazo). Considerando una aplicación en tiempo real, se analizarían de forma local los distintos frames, y cada dos o tres segundos se haría un análisis total de la escena. 4.2.3. RESULTADOS CON UNA VENTANA DE PREDICCIÓN MENOR QUE LA VENTANA DE POSICIÓN A continuación tomamos el mismo ejemplo mostrado en el apartado anterior, en el que dos personas se acercan y se dan la mano. Sin embargo en este caso, consideramos un tamaño de ventana de búsqueda que en principio va a ser más pequeña que el tamaño de los objetos en movimiento. Queríamos comprobar de este modo, si la solución propuesta era capaz de adaptarse dinámicamente a este tipo de situaciones, generando una ventana de búsqueda que en unos pocos pasos englobara al objeto en movimiento en su totalidad. Se consideraron los fotogramas que representan a ambas personas en movimiento longitudinal al lo largo de la escena.

Figura 58 . Seguimiento de dos personas en movimiento con ventana adaptable

Page 79: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

83

Como resultado, obtuvimos que el algoritmo se adaptaba de forma correcta a esta circunstancia. El análisis de las variables que caen dentro de las ventana de predicción (exteriores a las ventanas de posición de los objetos) tiene como resultado la detección de objetos en movimiento en un entorno cada vez mayor, de un fotograma a otro. De esta forma las ventanas de posición y de búsqueda van creciendo a medida que evoluciona el algoritmo. Finalmente cuando se han englobado totalmente los objetos en movimiento, tienden a estabilizarse a un tamaño parecido. 4.2.5. RESULTADOS OBTENIDOS EN LA ESTIMACIÓN DEL CENTRO DE MASAS USANDO EL FILTRO DE KALMAN A continuación, podemos ver de forma más intuitiva la evolución de las coordenadas x e y en cada instante, por medio de las gráficas que mostramos a continuación. Para este caso a analizar, se han tomado nueve muestras de la secuencia de imágenes considerada anteriormente y que representa a una persona en movimiento a lo largo de una estancia. Manteniendo la notación seguida hasta ahora, las componentes reales se representan con un aspa roja. Las componentes estimadas, con un círculo azul

Comparación de las componente X real y estimada para 9 muestras

Comparación de las componentes Y real y estimada para 9 muestras

Figura 59 . Comparación de las componentes reales y estimadas cuando el filtro está sintonizado

Page 80: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

84

Como se puede apreciar, la medida tomada (tanto de x como de y) y la estimación proporcionada por el filtro son muy parejas. Es por esto por lo que decimos que el filtro está bien sintonizado y podemos realizar una predicción acertada de la posición del móvil en seguimiento en el siguiente fotograma a analizar. Como se ha comentado, esta es la configuración que por defecto se ha usado en todas las pruebas experimentales, obteniéndose los resultados que se han analizado anteriormente. 4.3. PROGRAMACIÓN DEL DSP TMSC6211 EN EL SIMULADOR DE CODE COMOSER STUDIO. En este punto, tan solo se tuvo que hacer una adaptación del código ya probado y simulado en Matlab, para que sintácticamente se correspondiera con la variante de ANSI C que acepta Code Composer Studio. Hemos de decir en este punto, que aunque se utilizó la potencia que nos brinda Matlab en la carga de imágenes desde fichero y la presentación de imágenes por pantalla, no se cayó en la tentación de utilizar las funciones y sintaxis para el manejo de matrices y vectores que también proporciona este entorno. Durante el desarrollo siempre se tuvo la filosofía de una programación estructurada orientada a código C. De esta forma por ejemplo, cada vez que se tuvo que recorrer una matriz, se usaron dos bucles “for” consecutivos con dos subíndices, en lugar de una sentencia en Matlab. Como inconveniente, se tuvieron programas más lentos en Matlab, ya que utiliza un lenguaje interpretado. Como ventaja, se ha tenido la fácil migración del código una vez probado, a los estándares de C. Para la simulación se utilizaron dos matrices de 20x20 píxeles que representaban dos imágenes sintéticas de un rectángulo en dos posiciones distintas, en un fondo ruidoso.

Figura 60. Detalle del código en el entornoIDE de Code Composer Studio

Se probaron y simularon las distintas funciones que componían el algoritmo genérico y que ya antes habían sido realizadas en Matlab. También se diseñó una nueva función

Page 81: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

85

que realizaba el cálculo de una matriz inversa 2x2, ya que en la etapa anterior se había utilizado la función inv() de Matlab. Como conclusión, destacar que se obtuvieron los mismos resultados satisfactorios que en los casos anteriores.

Figura 61 . Optimizción de los ciclos de código de los algoritmos utilizando la herramienta PBC de CCS.

Una vez comprobado de nuevo la validez del código, se pasó compilarlo. A continuación se utilizó la herramienta PBC (Profile Based Compiler) que proporciona Code Composer Studio. Con ella, se puede optimizar el código ya compilado, en tiempo de ejecución y en tamaño del mismo y se nos aconsejan configuraciones realizables que combinan ambos factores. Una vez PBC ha considerado todas las posibles configuraciones, recopila los resultados individuales obtenidos para cada función. A partir de aquí, usa esta información para determinar todas las configuraciones realizables que puede cumplir nuestra aplicación y las destaca en violeta.

Page 82: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

86

5. EVALUACIÓN DE LAS PRESTACIONES Y PROPUESTAS DE SUPERACIÓN DE LAS LIMITACIONES. 5.1. ESTIMACIONES SOBRE EL COMPORTAMIENTO EN LA PLATAFORMA DE VISION COMPONENTS. A lo largo de esta memoria se ha desarollado un conjunto de técnicas utilizadas para seguimiento de objetivos en secuencias de imágenes reales. En el diseño de cada fase se ha tenido en cuenta la precisión en la detección y el seguimiento de cada alternativa pero sobre todo la sencillez y el tiempo de ejecución breve que cada una debía cumplir. Como se ha comentado, el fin último de este trabajo es el de implementar la solución global desarrollada y simulada en Matlab, en el DSP de un sistema de adquisición de imágenes comercial. Por un lado se pretende comprobar si el sistema en conjunto puede realizar una detección y seguimiento en tiempo real de los objetos en movimiento que pasen por delante de la cámara. Por otro lado, se quieren sacar conclusiones realistas sobre las limitaciones que tienen este tipo de sistemas y cuáles son las posibles mejoras de diseño, para poder cumplir con los objetivos expuestos. Para ello se dividió el trabajo en dos fases. La primera incluye la programación de los algoritmos diseñados en todo el estudio y probados en Matlab, y la veracidad de los resultados mediante simulación en el simulador del DSP TMSC6211 que nos proporciona Texas Instruments, a partir de la herramienta Coder Composer Studio. Como salida de esta fase tendremos una estimación realista de las variables más importantes y de los tiempos de procesado en el reloj interno de la CPU del DSP. Además, como se comentó en el aparado 3.2, Coder Composer Studio posee herramientas para compilar código fuente, dándonos a la salida un programa en lenguaje máquina que puede cargarse en el DSP. La segunda fase incluye la carga del código fuente en el DSP de la cámara de Visual Components para la realización de distintas pruebas. En principio se pensó en comprobar la robustez de la solución desarrollada, utilizando diferentes condiciones de iluminación, distinta calidad de las imágenes y uno o más objetos en movimiento en el plano de la escena. Por motivos de calendario, sólo han podido concluirse con éxito los resultados que pertenecen a la primera de las dos fases mencionadas. Se consiguió simular, compilar y obtener un ejecutable del programa que venimos analizando, pero a la hora de cargarlo en el DSP de la cámara de Visual Components existen problemas con algunas funciones de la librería de CCS. Sin embargo, pensamos que la dificultad no radica en el diseño del propio algoritmo, ya que se ha probado en Matlab y se ha simulado y compilado con el software que nos proporciona el propio fabricante del DSP, obteniéndose resultados satisfactorios. Pensamos que, aunque en teoría el ejecutable en lenguaje máquina debería funcionar sin problema en la plataforma para el que ha sido compilado. Se tuvieron problemas parecidos durante la depuración y el compilado de nuestro algoritmo en el Code Composer Studio. Hubo veces en el que se generaron resultados no esperados, otros en los que no se podía acceder a las variables de forma sencilla y otros en la que los estándares C no eran aceptados como código correcto. En definitiva, tras evaluar la herramienta Code Composer Studio, nos dimos cuenta de que aunque potente y de gran utilidad era muchas veces poco intuitiva para personas no familiarizadas con el entorno. Por eso pensamos que un problema parecido puede estar sucediendo con la carga del programa en el DSP de la cámara de Visual Components, en el que hay que conocer completamente todos los rincones del hardware (los evidentes y los que se descubren por ensayo y error) para poder ejecutar el programa de forma correcta. En nuestra opinión, ocurre con algunos equipos que aunque el hardware

Page 83: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

87

es muy compacto y de muy alta prestación, la instalación del firmware no resulta tan fácil y puede dar lugar a muchos problemas si no se tiene un contrato de mantenimiento (y esto puede ser habitual en el ámbito académico) desarrollo y comunicación entre sus sistemas. 5.2. RESULTADOS DE LA EJECUCIÓN DEL CÓDIGO EN UN DSP EMULADO Presentamos los resultados obtenidos para los casos en el que utilizamos prefiltrado por el método de la mediana y también cuando en el prefiltrado utilizamos el método de la media. Tabla 1: Número de ciclos de reloj invertidos en cada función FUNCIÓN NÚMERO DE CICLOS

(Prefiltrado por la mediana)

NÚMERO DE CICLOS (Prefiltrado por la media)

Main 344 344 Media - Mediana 416.037 Diferencia 3954 Cota 4625 Binarizar 7039 Crecimiento 28593 26273 Segmentar 87.354 53.798 CentroMasas 7292 7292 FiltroKalman 156 156 Inversa 74 74 VentanaPredicción 388 388 TOTAL 555.743 123.054 Como se puede comprobar, las funciones que consumen un mayor número de ciclos son las que realizan el filtrado inicial de la imagen y la función que implementa la segmentación del objeto en movimiento. Entre las funciones analizadas hay algunas que no dependen de los píxeles de la imagen considerada, ya que realizan siempre el mismo cálculo a partir de unos parámetros de entrada. De esta forma, el número de ciclos de procesado va a ser siempre el mismo, independientemente del tamaño de la imagen considerada. Estas funciones son:

• “Inversa”, que devuelve la matriz inversa de una matriz 2x2 que se le pasa como entrada.

• “FiltroKalman”, que actualiza los parámetros del filtro de Kalman a partir de los valores anteriores y los obtenidos en ese momento.

• “Ventana de Predicción”, que devuelve los valores de los cuatro puntos que delimitan la ventana, a partir del valor del centro de masas actual y los valores del centro de masas y covarianza predichos por el filtro de Kalman.

Page 84: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

88

• “Main”, que es la llamada a la función principal Por otro lado existen otras funciones donde el resultado final depende del píxel considerado en cada instante y la relación que éste tiene con su entorno de vecindad. Por lo tanto, a mayor número de píxeles también será mayor el número de ciclos de reloj necesarios para su realización. Estas funciones son:

• “Binarizar”, que utilizando un determinado umbral, convierte a blanco y negro los píxeles de una imagen que se le pasa como entrada.

• “Crecimiento”, que da mayor volumen a las regiones en movimiento de una matriz pasada como entrada.

• “Diferencia”, que realiza la diferencia de dos matrices que se le pasan a la entrada

• “Media”, que realiza el filtrado por el método de la media de la imagen que se le pasa como entrada.

• “Mediana”, que realiza el filtrado por el método de la mediana, de la imagen que se le pasa como entrada.

• “Segmentar”, que realiza la segmentación del objeto en movimiento, de la matriz que se le pasa como entrada.

• “Cota”, que realiza el histograma de imagen. El tiempo dedicado a realizar cada una de estas últimas funciones es proporcional al número total de píxeles de la imagen. Se pueden extraer conclusiones para imágenes de distinto tamaño con estos mismos datos. Teniendo en cuenta que el periodo del reloj de la CPU del DSP TMSC6211 de Texas Instruments es de 6.67 nanosegundos, y considerando imágenes típicas de 64x64 píxeles, 128x128 píxeles, 256x256 píxeles, 512x512 píxeles y 1024x1024 píxeles, obtuvimos los siguientes resultados. Tabla 2: Frame rate usando el filtrado de la mediana TAMAÑO DE LA IMAGEN [píxeles]

TIEMPO MÁXIMO POR FRAME [milisegundos]

Nº DE FRAMES POR SEGUNDO (FPS)

64x64 23.42 42.73 128x128 93.55 10.69 256x256 373.82 2.67 512x512 1495.47 0.66 1024x1024 5981.33 0.16 Tabla 3: Frame rate usando el filtrado de la media TAMAÑO DE LA IMAGEN [píxeles]

TIEMPO MÁXIMO POR FRAME [milisegundos]

Nº DE FRAMES POR SEGUNDO (FPS)

64x64 7.41 135.14 128x128 29.63 33.74 256x256 118.43 8.44 512x512 473.60 2.11 1024x1024 1894.32 0.52

Page 85: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

89

Sin embargo, también hacemos constar que los resultados presentados corresponden al peor caso, esto es, que siempre estemos analizando el mismo tamaño de cuadro. Por suerte, los objetos en movimiento dentro de la escena tienen un tamaño mucho más pequeño que el cuadro analizado. Recordamos por ejemplo los casos analizados de la pelota, la persona moviéndose en una estancia y el rinoceronte. En ellos, los objetos no representaban tan siquiera un 10% de los píxeles de toda la imagen. En definitiva, si consideramos un tamaño de cuadro de 512x512, podemos tener el resultado del movimiento en menos de un segundo, si se realiza el filtrado inicial por el método de la mediana. Considerando un objeto en movimiento cuyo tamaño es un cuarto del cuadro, es decir que tiene un tamaño de 128x128 píxeles, podemos analizar en un segundo 30 muestras del mismo a lo largo de 30 cuadros, con lo que sí cumpliríamos el objetivo marcado del tiempo real. Precisamente el método que se ha defendido hasta ahora, se basaba principalmente en la estimación del filtro de Kalman para realizar una búsqueda en un entorno mucho más reducido que la totalidad del cuadro. Aplicando el algoritmo visto a imágenes de este tamaño, podemos conseguir un seguimiento en tiempo real de los objetos que componen la escena.

5.3. CONCLUSIONES Y PROPUESTAS Como primera conclusión podemos decir que la plataforma para el procesamiento de imágenes evaluada, la cámara de Vision Components junto con el DSP que tiene integrado, es capaz, bajo ciertas restricciones en el tamaño de la imagen, de realizar tareas complejas como por ejemplo la detección de movimiento y el seguimiento de objetos en tiempo real. Como vemos en las tablas anteriores (Tablas 2 y 3), imágenes de hasta 128x128 píxeles pueden ser tratadas mediante este dispositivo y aún ofrecer un frame rate de más de 30 imágenes por segundo. La segunda conclusión importante proviene del estudio realizado para la implementación de cada una de las funciones que componen los algoritmos de detección de movimiento y de seguimiento de objetos. Como podemos ver en la Tabla 1, la mayor parte del esfuerzo computacional se realiza en tareas que, por un lado, tienen que ver con estructuras de datos muy sencillas, pero hemos de operar sobre un número enorme de datos. Se trata de filtros y operaciones cosméticas de la imagen que la preparan para una mejor identificación de las estructuras que componen la escena y de los rasgos distintivos de los objetos que intervienen. Estas tareas, como decimos, se llevan la mayor parte del tiempo de procesamiento. Dado que el objetivo inicial de este proyecto era establecer, dentro de los problemas que se derivan de tratar de generalizar los resultados obtenidos en una aplicación de visión a un espectro más amplio de aplicaciones, las prestaciones y limitaciones con las que cuenta un sistema convencional para el procesamiento de imágenes, con el fin de utilizar estos resultados como referencia a la hora de valorar los avances obtenidos mediante la aplicación de arquitecturas y aproximaciones alternativas, hemos de concluir que la idea de trasladar al plano focal, y por tanto paralelizar, las operaciones que a nivel del píxel o de su vecindario próximo permiten mejorar la calidad de la imagen, en términos de la distorsión estructural de la misma, aparece como lo único que hoy en día puede resolver las limitaciones inherentes a la serialización del procesamiento en aplicaciones en tiempo real.

Page 86: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

90

6. REFERENCIAS

[1] Paul Saffo, “Sensors: The Next Wave of Infotech Innovation”. 1997 Ten-Year

Forecast, pp. 115-122. Institute for the Future, Menlo Park, CA, 1997. [2] M. Weiser. “The Computer for 21st Century”. Scientific American, Vol. 265, No.

3, pp. 94–104, 1991. [3] E. Aarts et al. “Ambient Intelligence”, in J. Denning (ed.) The Invisible Future,

pp. 235-250. McGraw-Hill, New York, 2001 [4] D. H. Hubel, Eye, Brain and Vision. Scientific American Library, No. 22. W. H.

Freeman and Co., New York, 1995. [5] “Rec. H. 261: Video Codec for Audiovisual Services at p x 64kbit/s”.

Recommendations of the Int. Telecommunications Union, Helsinki, Finland 1993. [6] E. Ferro, F. Portoti, “Bluetooth and Wi-Fi Wireless Protocols: a Survey and a

Comparison” IEEE Wireless Comm., Vol. 12, No. 1, pp. 12-26, Feb. 2005. [7] R. C. Gonzalez, R. E. Woods, Digital Image Processing. Addison-Wesley

Publishing Co. Reading (MA) 1992. [8] Intel® Pentium® 4 Processor on 0.13 Micron Process Datasheet. Document

Number: 298643-012, February 2004. [9] N. H. Francescini, “Vision, Flies, Neurons and Robots”. Proceedings of the IEEE

Int. Conf. on Robotics and Automation, Vol. 3, pp. 3165, May 1995. [10] C. Diorio, D. Hsu, M. Figueroa, “Adaptive CMOS: From Biological Inspiration to

Systems-on-a-Chip”. Proceedings of the IEEE, Vol. 90, No. 3, pp. 345-357, March 2002.

[11] R. Carmona, F. Jiménez-Garrido, R. Domínguez-Castro, S. Espejo, T. Roska, Cs. Rekeczky, A. Rodríguez-Vázquez, “A Bio-Inspired 2-Layer Mixed-Signal Flexible Programmable Chip for Early Vision”, IEEE Trans. on Neural Networks, Vol. 14, No. 5, pp. 1313-1336, Sep. 2003.

[12] Z. Wang, A. C. Bovik, L. Lu, "Why is image quality assessment so difficult?" IEEE International Conference on Acoustics, Speech, & Signal Processing, May 2002.

[13] J. González. Vision por Computador. IPT Paraninfo 1999 [14] A. Marvall, Reconocimiento de Formas y Visión Artificial, Ed. Rama 1993 [15] R. Molina, “Introducción al Procesamiento y Análisis de Imágenes Digitales”,

Apuntes de Cátedra, Dpto. de Ciencias de la Computación, Universidad de Granada 1998

[16] Joaquín Miguez Arenas “Filtros de Partículas” p4, Dpto. Teoría de la Señal y Comunicación Universidad Juan Carlos III Madrid, 2005

[17] J. L. Barron, D.J. Fleet, “Performance of Optical Flow techniques”, Internacional Journal of Computer Vision pp 43-77.

[18] Greg Welch and Garay Bishop, “An Introduction to the Kalman Filter”, Technical Report 95-041, Department of Computer Science University of North Carolina at Chapel Hill, 2004

[19] M. Sajeev Arulampalm, Simon Maskell, Neil Gordon and Tim Clapp. “A Tutorial on Particle Filters for Online Nonlinear/Non-Gaussian Bayesian Tracking”, IEEE Transactions Signal Procesing, Vol 50, No.2, pp 3-5, 2002

[20] E. Trucco, A. Verri, Introductory Techniques for 3D Computer Vision, Prentice Hall, May 1998

Page 87: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

91

[21] Javier García de Jalón, Aprenda Matlab Como si Estuviera en Primero, Escuela Técnica Superior de Ingenieros Industriales de Madrid, Madrid 2004

[22] Vision Components , Technical Documentation VC20xx/ and VC20xx/E Series, November 2003

[23] TMS320C6000, Code Composer Studio Tutorial, Literature Num: SPRO3016, February 2000

[24] TMS320C6000, CPU and Instruction Set Referente Guide, Literature Number:SPRO189F, October 2000

Page 88: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

92

7. APÉNDICES

7.1. CÓDIGO MATLAB DETECCIÓN DE MOVIMIENTO nveces=1; [Fotograma1,Fotograma2]=Imagenes(nveces); Fotograma1=rgb2ind(Fotograma1); Fotograma2=rgb2ind(Fotograma2); fil=size(Fotograma1,1); col=size(Fotograma2,2); e1=1; e2=1; h1=size(Fotograma1,2); h2=size(Fotograma2,1); nregiones=1; %En esta primera iteracion consideramos que se identifica toda la imagner=1; Diferencia=zeros(fil,col); Binaria=zeros(fil,col); Blob_1=zeros(fil,col); Blob_2=zeros(fil,col); Suavizada1=zeros(fil,col); Suavizada2=zeros(fil,col); Suavizada3=zeros(fil,col); Segmentada=zeros(fil,col); Discriminada=zeros(fil,col); [Anterior]=Media_2(Fotograma1,Suavizada1,e1,e2,h1,h2); [Actual]=Media_2(Fotograma2,Suavizada2,e1,e2,h1,h2); Diferencia=Diferenciar_2(Anterior,Actual,Diferencia,e1(r),e2(r),h1(r),h2(r)); %Nos da la imagen diferencia del cuadro que queramos [vector,cota]=Cota(Diferencia,e1(r),e2(r),h1(r),h2(r)); Binaria=Binarizar_2(Diferencia,Binaria,e1(r),e2(r),h1(r),h2(r),cota); %Nos da binarizada la parte de imagen diferencia que queramos Blobeada=Blobs_3(Binaria,Blob_1,Blob_2,e1(r),e2(r),h1(r),h2(r)); %Nos da mayor volumen a las regiones de interes y elimina puntos aislados [Segmentada,NregionesTotal]=Segmentar_2(Blobeada,Discriminada,e1(r),e2(r),h1(r),h2(r),0.15); %Nos segmenta la imagen y nos da el numero de regiones de la misma [CentroMasas,a1,a2,b1,b2,c1,c2,d1,d2]=CentroMasasGlobal_2(Segmentada,NregionesTotal,e1(r),e2(r),h1(r),h2(r)); %Nos da los distintos centros de masas que aparecen en todo el fotograma %en el vector llamado CentroMasas X_real=CentroMasas; X_ant=zeros(NregionesTotal,4)'; P_anter=zeros(NregionesTotal,1)'; for i=1:NregionesTotal P_anter(i)=80; end for i=1:NregionesTotal x_real=X_real(:,i); x_ant=X_ant(:,i); p_anter=P_anter(i); [X_act(:,i),P_sigte_x(i)]=KalmanLocal(x_real,x_ant,p_anter);

Page 89: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

93

end for r=1:NregionesTotal [e1(r),e2(r),f1(r),f2(r),g1(r),g2(r),h1(r),h2(r)]=Prediccion(X_real(:,r),X_act(:,r),P_sigte_x(r),fil,col,a1(r),a2(r),b1(r),b2(r),c1(r),c2(r),d1(r),d2(r)); end Dibuja_2(NregionesTotal,CentroMasas,X_act,Fotograma2,a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,f1,f2,g1,g2,h1,h2); for(i=1:9) nveces=nveces+1; Diferencia=zeros(fil,col); Binaria=zeros(fil,col); Blob_1=zeros(fil,col); Blob_2=zeros(fil,col); Suavizada1=zeros(fil,col); Suavizada2=zeros(fil,col); Suavizada3=zeros(fil,col); Segmentada=zeros(fil,col); Discriminada=zeros(fil,col); Anterior=Actual; [Fotograma1]=Imagenesbis(nveces); Fotograma1=rgb2ind(Fotograma1); for r=1:NregionesTotal [Actual]=Mediana_2(Fotograma1,Suavizada2,e1(r),e2(r),h1(r),h2(r)); Diferencia=Diferenciar_2(Anterior,Actual,Diferencia,e1(r),e2(r),h1(r),h2(r)); %[vector,cota]=Cota(Diferencia,e1(r),e2(r),h1(r),h2(r)); Binaria=Binarizar_2(Diferencia,Binaria,e1(r),e2(r),h1(r),h2(r),cota); Blobeada=Blobs_3(Binaria,Blob_1,Blob_2,e1(r),e2(r),h1(r),h2(r)); [Segmentada,nregiones]=Segmentar_2(Blobeada,Segmentada,e1(r),e2(r),h1(r),h2(r),0.95); %Analizar el caso en el que nos encontremos con mas de una region [CentroMasas(:,r),a1(r),a2(r),b1(r),b2(r),c1(r),c2(r),d1(r),d2(r)]=CentroMasasLocal(Segmentada,e1(r),e2(r),h1(r),h2(r)); x_real=CentroMasas(:,r); % Estas tres sentencias es para que sea mas legible el programa, si se x_ant=X_act(:,r); %piensa bien, podriamos meterlas directamente en la llamada a la funcion p_anter_x=P_sigte_x(r); [X_act(:,r),P_sigte_x(r)]=KalmanLocal(x_real,x_ant,p_anter_x); [e1(r),e2(r),f1(r),f2(r),g1(r),g2(r),h1(r),h2(r)]=Prediccion(x_real,X_act(:,r),P_sigte_x(r),fil,col,a1(r),a2(r),b1(r),b2(r),c1(r),c2(r),d1(r),d2(r)); end Dibuja_2(NregionesTotal,CentroMasas,X_act,Fotograma2,a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,f1,f2,g1,g2,h1,h2); % Peli(:,nveces)=getframe; end

Page 90: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

94

DIFERENCIA function [Diferencia]=Diferenciar_2(Anterior,Actual,Diferencia,e1,e2,h1,h2) %Lo que hace esta funcion: %Hace la imagen diferencia de los dos fotogramas que se le pasan como %parametros y saca esta imagen diferencia por pantalla (omitir si se quiere %esto ultimo for i=e2:h2 for j=e1:h1 if((i>0)&&(j>0)) Diferencia(i,j)= abs(double(Anterior(i,j))- double(Actual(i,j))); % Matriz diferencia end end end %figure, imagesc(Diferencia), colormap(gray(256)), axis equal, axis tight; %Sacar imagen diferencia por pantalla BINARIZAR function [Binaria]=Binarizar_2(Diferencia,Binaria,e1,e2,h1,h2,cota) %Lo que hace esta funcion: %Binariza la imagen en diferencia (dada por los limites e1,e2,h1,h2) y saca el resultado por pantalla %(omitir si se quiere esto ultimo) %Comparamos nuestra matriz con diferencia con un umbral for i=e2:h2 for j=e1:h1 if((i>0)&&(j>0)&&(Diferencia(i,j)>cota)) %para chicos:10 Binaria(i,j)= 256; end end end %figure, imagesc(Binaria), colormap(gray(256)), axis equal, axis tight; %Sacar imagen binarizada por pantalla CRECIMIENTO function [Blob_2]=Blobs_3(Binaria,Blob_1,Blob_2,e1,e2,h1,h2) %Lo que hace esta funcion: %Da mayor volumen a las zonas significativas a la vez que descarta %regiones aisladas. Esto se hace en dos pasos: primero se llama a la funcion "Mediana", que realiza un suavizado de la %imagen utilizando el metodo de la mediana. Con esto conseguimos la eliminacion de muchos puntos aislados. %En segundo lugar, se llama a la funcion "Burbuja", que aumenta el tamaño de aquellas regiones que tienen un numero %suficiente de pixeles, de forma que puedan unirse pixeles dispersos. %El resultado se muestra por pantalla (omitirlo si se quiere) fil=size(Binaria,1); col=size(Binaria,2); %Suavizada1=Mediana_2(Binaria,Suavizada1,e1,e2,h1,h2); for i=e2:h2 for j=e1:h1

Page 91: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

95

if((i>=4)&&(i<=fil-4)&&(j>=4)&&(j<=col-4)&&(Binaria(i,j)==256)) % si no nos salimos de los limites Suma=0; for a=i-3:i+3 for b=j-3:j+3 Suma=Suma+Binaria(a,b); end end if(Suma<12*(256)) Blob_1(i,j)= 0; else for a=i-1:i+1 for b=j-1:j+1 Blob_1(a,b)=256; end %end b end % end a end %end if end %end if end %end b end %end a %figure, imagesc(Blob_1), colormap(gray(256)), axis equal, axis tight; for i=e2:h2 for j=e1:h1 if((i>=5)&&(i<=fil-5)&&(j>=5)&&(j<=col-5)&&(Blob_1(i,j)==256)) % si no nos salimos de los limites Suma=0; for a=i-4:i+4 for b=j-4:j+4 Suma=Suma+Blob_1(a,b); end end if(Suma<22*(256)) Blob_2(i,j)= 0; else for a=i-2:i+2 for b=j-2:j+2 Blob_2(a,b)=256; end end end end end end %figure, imagesc(Blob_2), colormap(gray(256)), axis equal, axis tight; SEGMENTAR function [Discriminada,nregiones]=Segmentar(Blob_2,Discriminada,e1,e2,h1,h2,porcentaje) %Lo que hace esta funcion: %Nos da el numero de regiones significativas de la imagen, a la vez que %descarta regiones con poco peso comparada con la region mas grande %encontrada fil=size(Blob_2,1);

Page 92: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

96

col=size(Blob_2,2); region=1; for i=e2:h2 for j=e1:h1 if ((i>0)&&(j>0)&&Blob_2(i,j)==256) % Si el pixel es blanco vecino=zeros(1,8); %Vemos los 8 vecinos del pixel considerado vecino(1)=Discriminada(i-1,j-1); vecino(2)=Discriminada(i-1,j); vecino(3)=Discriminada(i-1,j+1); vecino(4)=Discriminada(i,j-1); vecino(5)=Discriminada(i,j+1); vecino(6)=Discriminada(i+1,j-1); vecino(7)=Discriminada(i+1,j); vecino(8)=Discriminada(i+1,j+1); menor=fil*col; auxiliar_1=0; % Inicializo esta variable for a=1:8 if(vecino(a)~=0) auxiliar_1=vecino(a); %vemos a que region pertenece cada vecino if(auxiliar_1<menor) menor=auxiliar_1; end end end if(auxiliar_1==0) Discriminada(i,j)=region; %si ningun vecino pertenece a ninguna region, este sara el primero de una nueva region=region+1; else Discriminada(i,j)=menor; %añadimos el pixel a la region que antes se creo for a=1:8 if((vecino(a)~=0)&&(vecino(a)~=menor)) %si hay mas de una region entre los 8 vecinos, entonces nuestro auxiliar_2=vecino(a); %pixel hace de union y las dos regiones se transforman en una for u=e2:h2 for v=e1:h1 if((u>0)&&(v>0)&&(Discriminada(u,v)==auxiliar_2)) Discriminada(u,v)=menor; end %end if end %end v end %end u end %end if end %end r end %end auxiliar end %end if end %end j end %end i %figure, imagesc(Discriminada), colormap(gray(256)), axis equal, axis tight; v_region=zeros(1,region-1); for i=e2:h2 for j=e1:h1 if((i>0)&&(j>0)) valor=Discriminada(i,j);

Page 93: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

97

if(valor~=0) v_region(valor)=v_region(valor)+1; %vemos el numero de pixeles que tiene cada region end end end end mayor=1; for a=1:region-1 if(v_region(a)>mayor) mayor=v_region(a); %buscamos la region con mayor numero de pixeles end end cota=porcentaje*mayor; nregiones=0; reg_definitivas=zeros(1,region-1); i=1; for a=1:region-1 if((v_region(a)>cota)&&(v_region(a)~=0)) nregiones=nregiones+1; %vemos el numero de regiones que vamos a tener al final reg_definitivas(i)=a; %metemos el numero de la region en un nuevo vector i=i+1 end end for i=e2:h2 for j=e1:h1 if((i>0)&&(j>0)&&(Discriminada(i,j)~=0)) if(v_region(Discriminada(i,j))<cota) Discriminada(i,j)=0; %si el numero de pixeles no es suficiente, la descartamos else r=1; while(Discriminada(i,j)~=reg_definitivas(r)) r=r+1; end %end while Discriminada(i,j)=r; %si el numero de pixeles es suficiente, lo aceptamos, y a la vez end %ordenamos la region del 1-nregiones end end %end j end %end i %figure, imagesc(Discriminada), colormap(gray(256)), axis equal, axis tight; nregiones CENTRO DE MASAS GLOBAL function[CM,a1,a2,b1,b2,c1,c2,d1,d2]=CentroMasasGlobal_2(Segmentada,nregiones,e1,e2,h1,h2) %Lo que hace esta funcion: %Calcula el centro de masas para cada una de las regiones en movimiento y %devuelve los vertices de un rectangulo que engloba a cada region fil=size(Segmentada,1); col=size(Segmentada,2); xmin=zeros(1,nregiones); xmax=zeros(1,nregiones); ymin=zeros(1,nregiones);

Page 94: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

98

ymax=zeros(1,nregiones); for i=1:nregiones xmin(i)=h1; xmax(i)=e1; ymin(i)=h2; ymax(i)=e2; end valor=0; for a=1:nregiones for i=1:fil for j=1:col if(Segmentada(i,j)~=0) valor=Segmentada(i,j); % en "valor" almacenamos el numero de la region (p.e. la region "2") if(valor==256) valor=1; % para cuando no analizamos toda la imagen entera end if(i<ymin(valor)) ymin(valor)=i; end if(i>ymax(valor)) ymax(valor)=i; end if(j<xmin(valor)) xmin(valor)=j; end if(j>xmax(valor)) xmax(valor)=j; end end end end end CM=zeros(4,nregiones); %almacenamos los distintos centros de masas, por columnas, dejamos dos ceros al final de cada columna a1=zeros(1,nregiones); %porque asi me resulta mas facil cuando calculemos los parametros del filtro de Kalman a2=zeros(1,nregiones); b1=zeros(1,nregiones); b2=zeros(1,nregiones); c1=zeros(1,nregiones); c2=zeros(1,nregiones); d1=zeros(1,nregiones); d2=zeros(1,nregiones); for i=1:nregiones a1(i)=xmin(i); a2(i)=ymin(i); b1(i)=xmax(i); b2(i)=ymin(i); c1(i)=xmin(i); c2(i)=ymax(i); d1(i)=xmax(i); d2(i)=ymax(i); CM(1,i)=c1(i)+(d1(i)-c1(i))/2; % obtenemos la x del centro de masas de cada region CM(2,i)=a2(i)+(c2(i)-a2(i))/2; % obtenemos la y del centro de masas de cada region end

Page 95: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

99

CENTRO DE MASAS LOCAL function[CM,a1,a2,b1,b2,c1,c2,d1,d2]=CentroMasasLocal(Segmentada,e1,e2,h1,h2) %Lo que hace esta funcion: %Calcula el centro de masas para una de las regiones en movimiento y %devuelve los vertices de un rectangulo que engloba a esta region fil=size(Segmentada,1); col=size(Segmentada,2); xmin=h1; xmax=e1; ymin=h2; ymax=e2; valor=0; for i=e2:h2 for j=e1:h1 if((i>0)&&(j>0)&&(Segmentada(i,j)~=0)) if(i<ymin) ymin=i; end if(i>ymax) ymax=i; end if(j<xmin) xmin=j; end if(j>xmax) xmax=j; end end end end end a1=xmin; a2=ymin; b1=xmax; b2=ymin; c1=xmin; c2=ymax; d1=xmax; d2=ymax; CM=zeros(4,1); CM(1,1)=c1+(d1-c1)/2; % obtenemos la x del centro de masas de cada region CM(2,1)=a2+(c2-a2)/2; % obtenemos la y del centro de masas de cada region KALMAN LOCAL function[x_act,p_sgte_x]=kkalman_2(x_real,x_ant,p_anter) %Lo que hace esta funcion: %Calcula los parametros del filtro de Kalman para una region en %movimiento en funcion de parametros anteriores (se pasan a traves de los %vectores X_real, X_ant, P_anter)

Page 96: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

100

%Matrices necesarias para el Filtro de Kalman A=[1 0 1 0 0 1 0 1 0 0 1 0; 0 0 0 1]; H=[1 0 0 0 0 1 0 0]; R=[1 0 0 1] ; Q=[0.25 0 0.5 0 0 0.25 0 0.5 0.5 0 1 0 0 0.5 0 1]; %Calculamos los parametros del Filtro de Kalman K_act=A*p_anter*H'*inv(H*p_anter*H'+R); z_act=H*x_real; x_act=A*x_ant+K_act*(z_act-H*A*x_ant); p_act=(eye(4)-K_act*H)*p_anter; p_sgt=(A-K_act*H)*p_act*A'+Q; p_sgte_x=p_sgt(1,1); PREDICCION function[e1,e2,f1,f2,g1,g2,h1,h2]=Prediccion(x_real,X_act,P_sigte_x,fil,col,a1,a2,b1,b2,c1,c2,d1,d2) %Lo que hace esta funcion: %Calcula los puntos de la ventana de prediccion en funcion del resultado %obtenidos del filtro de kalman distancia_drcha=P_sigte_x+sqrt(b1-a1); distancia_izda=P_sigte_x+sqrt(b1-a1); distancia_arrba=P_sigte_x+sqrt(d2-b2); distancia_abjo=P_sigte_x+sqrt(d2-b2); E1=X_act(1)-distancia_izda; if E1 >=a1 E1=a1-distancia_izda; end if E1<=0 E1=0; end e1=round(E1); E2=X_act(2)-distancia_arrba; if E2 >=a2 E2=a2-distancia_arrba; end if E2<=0 E2=0; end e2=round(E2); F1=X_act(1)+distancia_drcha; if F1<=b1 F1=b1+distancia_drcha; end if F1>=col

Page 97: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

101

F1=col; end f1=round(F1); f2=e2; g1=e1; G2=X_act(2)+distancia_abjo; if G2<=c2 G2=c2+distancia_abjo; end if G2>=fil G2=fil; end g2=round(G2); h1=f1; h2=g2; DIBUJA function[]=Dibuja_2(nregiones,X_real,X_act,Actual,a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,f1,f2,g1,g2,h1,h2) %Lo que hace esta funcion: %Dibuja el centro de masas, la prediccion, la ventana de posicion y la %ventana de busqueda para cada region figure, imagesc(Actual), colormap(gray(256)), axis equal, axis tight; hold on; for i=1:nregiones plot(X_real(1,i),X_real(2,i),'r*'); plot(X_act(1,i),X_act(2,i),'bo'); line([a1(i),b1(i)],[a2(i),b2(i)]); line([a1(i),c1(i)],[a2(i),c2(i)]); line([b1(i),d1(i)],[b2(i),d2(i)]);line([c1(i),d1(i)],[c2(i),d2(i)]); line([e1(i),f1(i)],[e2(i),f2(i)]); line([e1(i),g1(i)],[e2(i),g2(i)]); line([f1(i),h1(i)],[f2(i),h2(i)]);line([g1(i),h1(i)],[g2(i),h2(i)]); end MEDIA function[Suavizada]=Media_2(Fotograma,Suavizada,e1,e2,h1,h2) fil=size(Fotograma,1); col=size(Fotograma,2); for i=e2:h2 for j=e1:h1 Suma=0; if((i>=2)&&(i<=(fil-2))&&(j>=2)&&(j<=(col-2))) % si no nos salimos de los limites for u=(i-1):(i+1) for v=(j-1):(j+1) Suma=Suma+double(Fotograma(u,v)); end end Suavizada(i,j)=Suma/9; end end end

Page 98: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

102

%figure, imagesc(Suavizada), colormap(gray(256)), axis equal, axis tight; %Sacar imagen diferencia por pantalla IMÁGENES function[Anterior,Actual]=Imagenes(nveces) Anterior=imread('raul1.jpg'); Actual=imread('raul2.jpg'); IMAGENESBIS function[Actual]=Imagenes(nveces) if(nveces==2) Actual=imread('raul3.jpg'); elseif(nveces==3) Actual=imread('raul4.jpg'); elseif(nveces==4) Actual=imread('raul5.jpg'); elseif(nveces==5) Actual=imread('raul6.jpg'); elseif(nveces==6) Actual=imread('raul7.jpg'); elseif(nveces==7) Actual=imread('raul8.jpg'); elseif(nveces==8) Actual=imread('raul9.jpg'); else(nveces==9) Actual=imread('raul0.jpg'); end MEDIANA function[Suavizada]=Mediana(Fotograma,Suavizada,e1,e2,h1,h2) fil=size(Fotograma,1); col=size(Fotograma,2); for i=e2:h2 for j=e1:h1 vector1=zeros(1,10); a=1; if((i>=2)&&(i<=(fil-2))&&(j>=2)&&(j<=(col-2))) % si no nos salimos de los limites for u=(i-1):(i+1) for v=(j-1):(j+1) vector1(a)=(Fotograma(u,v)); a=a+1; end end % Ordenacion por el metodo de la burbuja for a=1:9 for b=1:9 if (vector1(b)>vector1(b+1)) auxi=vector1(b); vector1(b)=vector1(b+1); vector1(b+1)=auxi; end end

Page 99: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

103

end % Vectores ordenado de menor a mañor. El quinto valor sera la mediana Suavizada(i,j)=vector1(5); end end end FILTRO HP function[HP]=Filtro_HP(Fotograma,e1,e2,h1,h2) fil=size(Fotograma,1); col=size(Fotograma,2); HP=zeros(fil,col); Mascara=[ -1/8 -1/8 -1/8 -1/8 1 -1/8 -1/8 -1/8 -1/8]; Suma=0; for i=4:fil-4 for j=4:col-4 if(((i>=e2)&&(i<=h2))&&((j>=e1)&&(j<=h1))) for u=1:3 for v=1:3 Suma=double(Fotograma(i-u,j-v))*Mascara(u,v); end end end HP(i,j)=Suma; Suma=0; end end figure, imagesc(HP), colormap(gray(256)), axis equal, axis tight; GAUSSIANO 1 function[FGauss]=Gaussiano1(Fotograma,e1,e2,h1,h2) fil=size(Fotograma,1); col=size(Fotograma,2); HP=zeros(fil,col); Mascara=[ 1 2 1 2 4 2 1 2 1]; Suma=0; for i=4:fil-4 for j=4:col-4 if(((i>=e2)&&(i<=h2))&&((j>=e1)&&(j<=h1))) for u=1:3 for v=1:3 Suma=double(Fotograma(i-u,j-v))*Mascara(u,v); end end end FGauss(i,j)=Suma/16; Suma=0; end end

Page 100: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

104

figure, imagesc(FGauss), colormap(gray(256)), axis equal, axis tight; GAUSSIANO 2 function[FGauss]=Gaussiano2(Fotograma,e1,e2,h1,h2) fil=size(Fotograma,1); col=size(Fotograma,2); HP=zeros(fil,col); Mascara=[ 3 6 8 6 3 6 14 19 14 6 8 19 25 19 8 3 6 8 6 3 6 14 19 14 6 ]; Suma=0; for i=4:fil-4 for j=4:col-4 if(((i>=e2)&&(i<=h2))&&((j>=e1)&&(j<=h1))) for u=1:3 for v=1:3 Suma=double(Fotograma(i-u,j-v))*Mascara(u,v); end end end FGauss(i,j)=Suma/249; Suma=0; end end figure, imagesc(FGauss), colormap(gray(256)), axis equal, axis tight; DIFERENCIAS ACUMULADAS Fotograma_Referencia=imread('bad_000.jpg'); fil=size(Fotograma_Referencia,1); col=size(Fotograma_Referencia,2); e1=1; e2=1; h1=size(Fotograma_Referencia,2); h2=size(Fotograma_Referencia,1); r=1; Suavizada1=zeros(fil,col); Suavizada2=zeros(fil,col); Diferencia=zeros(fil,col); Diferencia_Acumulada=zeros(fil,col); Binaria=zeros(fil,col); [Anterior]=Mediana_2(Fotograma_Referencia,Suavizada1,e1(r),e2(r),h1(r),h2(r)); nveces=1; for(i=1:10) nveces=nveces+1; [Fotograma]=ImagenesAc_bad(nveces); [Actual]=Mediana_2(Fotograma,Suavizada2,e1(r),e2(r),h1(r),h2(r)); Diferencia=Diferenciar_2(Anterior,Actual,Diferencia,e1(r),e2(r),h1(r),h2(r)); for i=e2:h2

Page 101: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

105

for j=e1:h1 Diferencia_Acumulada(i,j)=Diferencia_Acumulada(i,j)+Diferencia(i,j); end end figure, imagesc(Diferencia_Acumulada), colormap(gray(256)), axis equal, axis tight; %Sacar imagen diferencia por pantalla end COTA function[vector,cota]=Cota(Diferencia,e1,e2,h1,h2) vector=zeros(256,1); Suma=0; Dato=0; mayor=0; dentro=0; for i=e2:h2 for j=e1:h1 if(i>0 && j>0) Dato=round(Diferencia(i,j)); vector(Dato+1)=vector(Dato+1)+1; end end end for i=1:256 if vector(i)>mayor mayor=vector(i); end end dentro=0.08*mayor; for i=1:256 if vector(i)>dentro cota=i; end end for i=1:256 vector(i)=vector(i)/mayor; end %for i=1:256 % % Suma=Suma+vector(i)*i; % %end %cota=Suma/(h1*h2); 7.2 CÓDIGO C PARA CODE COMPOSER STUDIO MAIN #include <stdio.h> #include <stdlib.h> #include "c6x.h" #include "c60_32.h" #include <math.h>

Page 102: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

106

// Fotograma1 y Fotograma2 serían las matrices que representan a dos imágenes int Suavizada1[20][20]; // Fotgrama1 filtrado utilizando método de la mediana int Suavizada2[20][20]; // Fotgrama2 filtrado utilizando método de la mediana int Diferenciada[20][20]; // Imagen diferencia de ambos fotogramas int Binarizada[20][20]; // Imagen diferencia binarizada int Blobeada[20][20]; // Primer paso de la segmentación será agrupar por regiones el resultado, en esta matriz int Segmentada[20][20]; // Segmentación de la la imagen de regiones int umbral2=0.9; // Umbral para la segmentación int *cota; // Umbral dinámico para la binarización int *NregionesTotal; // Número de regiones encontradas int nregiones; int CentroMasas[4][5]; // Matriz donde agrupamos los centros de masas de las distintas regiones float x_real[4][1]; // Posición real del centro de masas del objeto para pasarla al filtro float x_ant[4][1]; // Posición anterior del centro de masas del objeto para pasarla al filtro float x_act[4][1]; // Posición predicha por el filtro float *p_sgte; // Covarianza del error predicha float p_anter; // Covarianza del error anterior, entre la posición real y la esperada float X_real[4][5]; // Matriz donde agrupamos las x_real de las distintas regiones float X_ant[4][5]; // Matriz donde agrupamos las x_ant de las distintas regiones float X_act[4][5]; // Matriz donde agrupamos las x_act de las distintas regiones float P_anter[1][5]; // Matriz donde agrupamos los p_anter de las distintas regiones float P_sgte[1][5]; // Matriz donde agrupamos los p_anter de las distintas regiones int e1[5],e2[5],h1[5],h2[5],f1[5],f2[5],g1[5],g2[5]; // Coordenadas de los rectángulos que nos indican las regiones a ANALIZAR int a1[5],a2[5],b1[5],b2[5],c1[5],c2[5],d1[5],d2[5]; //Coordenadas de los rectángulos que nos determinan dónde están localizados los objetos void Media(int Fotograma[20][20], int Suavizada[20][20],int E1,int H1,int E2,int H2); void Mediana(int Fotograma[20][20], int Suavizada[20][20],int E1,int H1,int E2,int H2); void Diferenciar(int Anterior[20][20], int Actual[20][20], int Diferencia[20][20], int E1, int H1, int E2, int H2); void Binarizar(int Diferencia[20][20], int Binaria[20][20] ,int E1, int H1,int E2, int H2, int umbral1); void Blobs(int Binaria[20][20], int Blobear[20][20], int E1, int H1, int E2, int H2); void Segmentar(int Blobeada[20][20],int Segmentada[20][20],int E1,int H1,int E2,int H2,int umbral,int *NregionesTotal); void CentroMasasGlobal(int Segmenta[20][20], int nregiones, int E1, int H1, int E2,int H2,int CM[2][5],int a1[5],int a2[5],int b1[5],int b2[5],int c1[5],int c2[5], int d1[5],int d2[5]); void KalmanLocal(float p_anter,float x_real[4][1],float x_ant[4][1],float x_act[4][1],float *P_sgte); void Prediccion(int nregiones,float x_real[4][1],float x_act[4][1],float P_sigte_x,int fil,int col,int a1[5],int a2[5],int b1[5],int b2[5],int c1[5],int c2[5],int d1[5],int d2[5],int e1[5],int e2[5],int f1[5],int f2[5],int g1[5],int g2[5],int h1[5],int h2[5]); void Cota(int Diferencia[20][20],int E1, int H1,int E2, int H2, int *cota); void main() { int i,j,r; int Fotograma1[20][20]={ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,22,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8,8,8, 8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8,8,8, 8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8,8,8,

Page 103: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

107

8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8,8,8, 8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8,8,8, 8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8,8,8, 8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8,8,8, 8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8}; int Fotograma2[20][20]={ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,52,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8, 8,8,8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8, 8,8,8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8, 8,8,8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8, 8,8,8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8, 8,8,8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8, 8,8,8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8, 8,8,8,8,8,8,8,2,2,2,2,2,2,2,2,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8}; e1[0]=0;e2[0]=0;h1[0]=19;h2[0]=19; Media(Fotograma1,Suavizada1,e1[0],h1[0],e2[0],h2[0]); // Suavizado del primer fotogram Media(Fotograma2,Suavizada2,e1[0],h1[0],e2[0],h2[0]); // Suavizado del segundo fotograma Diferenciar(Suavizada1,Suavizada2,Diferenciada,e1[0],h1[0],e2[0],h2[0]); Cota(Diferenciada,e1[0],h1[0],e2[0],h2[0],cota); Binarizar(Diferenciada,Binarizada,e1[0],h1[0],e2[0],h2[0],*cota); Blobs(Binarizada,Blobeada,e1[0],h1[0],e2[0],h2[0]); Segmentar(Blobeada,Segmentada,e1[0],h1[0],e2[0],h2[0],umbral2,NregionesTotal); CentroMasasGlobal(Segmentada,1,e1[0],h1[0],e2[0],h2[0],CentroMasas,a1,a2,b1,b2,c1,c2,d1,d2); nregiones=*(NregionesTotal+0); for (j=1;j<=nregiones;j++) { for(i=0;i<=3;i++) { x_real[i][0]=CentroMasas[i][j]; x_ant[i][0]=0; //x_ant[i][0]=X_ant[i][j]; } KalmanLocal(80.0,x_real,x_ant,x_act,p_sgte); for(i=0;i<=4;i++) { X_act[i][j]=x_act[i][0];

Page 104: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

108

} P_sgte[0][j]=*(p_sgte+0); Prediccion(nregiones,x_real,x_act,P_sgte[0][j],19,19,a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,f1,f2,g1,g2,h1,h2); } // Aquí se cargará la siguiente imagen Suavizada2=Suavizada1; for(r=1;r<=nregiones;r++) { Mediana(Fotograma2,Suavizada2,e1[r],h1[r],e2[r],h2[r]); Diferenciar(Suavizada1,Suavizada2,Diferenciada,e1[r],h1[r],e2[r],h2[r]); Binarizar(Diferenciada,Binarizada,e1[r],h1[r],e2[r],h2[r],4); Blobs(Binarizada,Blobeada,e1[r],h1[r],e2[r],h2[r]); Segmentar(Blobeada,Segmentada,e1[r],h1[r],e2[r],h2[r],umbral2,NregionesTotal); CentroMasasLocal(Segmentada,r,e1[r],h1[r],e2[r],h2[r],CentroMasas,a1,a2,b1,b2,c1,c2,d1,d2); for(i=0;i<=4;i++) { x_real[i][0]=CentroMasas[i][r]; x_ant[i][0]=X_act[i][r]; } KalmanLocal(P_sgte[0][r],x_real,x_ant,x_act,p_sgte); for(i=0;i<=4;i++) { X_act[i][j]=x_act[i][0]; } P_sgte[0][j]=*(p_sgte+0); Prediccion(r,x_real,x_act,P_sgte[0][j],19,19,a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,f1,f2,g1,g2,h1,h2); } } DIFERENCIAR // Se calcula la imagen diferencia entre las imágenes de entrada Actual y Anterior. El resultado // Se almacena en la matriz Diferencia. // E1,E2,H1,H2: coordenadas de los límites de la imagen a analizar void Diferenciar(int Anterior[20][20], int Actual[20][20], int Diferencia[20][20], int E1, int H1, int E2, int H2) { int i,j; for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) { if((i>0)&&(j>0))

Page 105: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

109

Diferencia[i][j]= abs((Anterior[i][j])-(Actual[i][j])); // Matriz diferencia } } } BINARIZAR // Binariza la imagen que se le pasa como entrada (Diferencia). El resultado se almacena en la // Matriz 'Binaria' // umbral: define el valor límite para diferenciar entre 0 y 256 (más adelante se podra cambiar desde fuera) // E1,E2,H1,H2: coordenadas de los límites de la imagen a analizar void Binarizar(int Diferencia[20][20], int Binaria[20][20] ,int E1, int H1,int E2, int H2, int umbral1) { int i,j; for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) { if((i>0)&&(j>0)&&(Diferencia[i][j]>umbral1)) Binaria[i][j]= 256; else Binaria[i][j]=0; } } } CRECIMIENTO // Primer paso de segmentación: distinguir las distintas regiones candidatas a partir de // crecimiento de áreas significativas. Como entrada, la imagen binarizada y los // parámetros E1,E2,H1,H2 que definen las coordenadas de los límites de la imagen a analizar // Como salida, la matriz 'Blobeada' que contiene regiones agrupadas. void Blobs(int Binaria[20][20], int Blobear[20][20], int E1, int H1, int E2, int H2) { // int SuavizadaA[20][20]; // int SuavizadaB[20][20]; // Matrices intermedias para usar filtrado por la mediana int Blob1[20][20]; int i, j, a, b; int Suma=0; //Mediana(Binaria,SuavizadaA,E1,E2,H1,H2); // filtramos la matriz de entrada for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) { if((i>=2)&&(i<=19-2)&&(j>=2)&&(j<=19-2)&&(Binaria[i][j]==256)) // si estamos dentro de los límites { Suma=0; // y el píxel es blanco for(a=i-3;a<=i+3;a++) for(b=j-3;b<=j+3;b++) // analizamos el entorno de vecindad 3x3

Page 106: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

110

//Suma=Suma+SuavizadaA[a][b]; // sumamos los valores Suma=Suma+Binaria[a][b]; if(Suma<12*(256)) // si no superan un mínimo, se consideran píxeles aislados Blob1[i][j]= 0; // lo ponemos a cero el píxel analizado else // si se supera el mínimo, estamos ante una agrupación de píxeles { for (a=i-1;a<=i+1;a++) { for (b=j-1;b<=j+1;b++) // hacemos que esta región quede compacta (primera burbuja) { Blob1[a][b]=256; // ponemos todos los píxeles a uno } // end b } // end a } // end else } // end if grande } // end j } // end i //Mediana(Blob1,SuavizadaB,E1,H1,E2,H2); // filtramos la primera matriz blobeada Suma=0; // repetimos el proceso con un entorno de vecindad mayor for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) { if((i>=3)&&(i<=19-3)&&(j>=2)&&(j<=19-3)&&(Blob1[i][j]==256)) { Suma=0; for (a=i-4;a<=i+4;a++) for (b=j-4;b<=j+4;b++) //Suma=Suma+SuavizadaB[a][b]; Suma=Suma+Blob1[a][b]; if(Suma<22*(256)) Blobear[i][j]= 0; else { for(a=i-2;a<=i+2;a++) { for(b=j-2;b<=j+2;b++) // Creación de la segunda fase de burbujas { Blobear[a][b]=256; } } } } } } } SEGMENTAR // Segmentación de la matriz Blobeada mediante interconexión de regiones.

Page 107: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

111

// Como entrada, la matriz Blobeada y E1,E2,H1,H2 que son las coordenadas de los límites de la imagen a analizar // Como salida la matriz Segmentada con las distintas regiones que se han encontrado, y el número de regiones, // que se almacenarán en NregionesTotal void Segmentar(int Blobeada[20][20],int Segmentada[20][20],int E1,int H1,int E2,int H2,int umbral,int *NregionesTotal) { int region=1; int i, j, a, u, v; int vecino[8]; int menor; int auxiliar_1; int nregiones; int reg_definitivas[19]; int v_region[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int mayor; float cota; int auxiliar_2; int valor; for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) { if ((i>0)&&(i<19)&&(j>0)&&(j<19)&&(Blobeada[i][j]==256)) // Si el pixel es blanco { vecino[0]=Segmentada[i-1][j-1]; // vemos los 8 vecinos del pixel considerado vecino[1]=Segmentada[i-1][j]; vecino[2]=Segmentada[i-1][j+1]; vecino[3]=Segmentada[i][j-1]; vecino[4]=Segmentada[i][j+1]; vecino[5]=Segmentada[i+1][j-1]; vecino[6]=Segmentada[i+1][j]; vecino[7]=Segmentada[i+1][j+1]; menor=20*20; // por poner algo (menor es en principio un número muy alto) auxiliar_1=0; // inicializo esta variable for(a=0;a<=7;a++) { if(vecino[a]!=0) { auxiliar_1=vecino[a]; // vemos a qué región pertenece cada vecino del entorno if(auxiliar_1<menor) { // 3x3 del píxel considerado menor=auxiliar_1; } // end if } //end if } // end for if(auxiliar_1==0) { Segmentada[i][j]=region; // si ningun vecino pertenece a ninguna region, entonces este será el primero de una nueva region=region+1;

Page 108: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

112

} else // si alguno de los vecinos ya pertenecía a alguna región { Segmentada[i][j]=menor; // añadimos el pixel a la region que antes se creo for(a=0;a<=7;a++) { if((vecino[a]!=0)&&(vecino[a]!=menor)) // si hay mas de una region entre los 8 vecinos, entonces nuestro { auxiliar_2=vecino[a]; // pixel hace de union y las dos regiones se transforman en una for(u=E1;u<=H1;u++) { for(v=E2;v<=H2;v++) { if((u>0)&&(u<19)&&(v>0)&&(v<19)&&(Segmentada[u][v]=auxiliar_2)) { Segmentada[u][v]=menor; } // end if } // end v } // end u } //end if } //end a } // end else } // end if } //end j } // end i for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) { if((i>0)&&(i<19)&&(j>0)&&(j<19)) { valor=Segmentada[i][j]; if(valor!=0) v_region[valor]=v_region[valor]+1; // vemos el numero de pixeles que tiene cada region } } } mayor=1; // por poner algo (en principio, mayor es un múmero muy pequeño) for(a=1;a<=region-1;a++) { if(v_region[a]>mayor) { mayor=v_region[a]; // buscamos la region con mayor numero de pixeles } } i=1; nregiones=0; cota=0.9*mayor; for(a=1;a<=region;a++) {

Page 109: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

113

if((v_region[a]>cota)&&(v_region[a]!=0)) { nregiones=nregiones+1; // vemos el numero de regiones que vamos a tener al final reg_definitivas[i]=a; // metemos el numero de la region en un nuevo vector i=i+1; } } for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) { if((i>0)&&(i<19)&&(j>0)&&(j<19)&&(Segmentada[i][j]!=0)) { if(v_region[Segmentada[i][j]]<cota) { Segmentada[i][j]=0; } // si el numero de pixeles no es suficiente, la descartamos else { int r=1; while(Segmentada[i][j]!=reg_definitivas[r]) r=r+1; Segmentada[i][j]=r; // si el numero de pixeles es suficiente, lo aceptamos, y a la vez } // ordenamos la region del 1-nregiones } } } *NregionesTotal=nregiones; } CENTRO DE MASAS GLOBAL // Calcula el centro de masas de cada región encontrada, almacenando las coordenadas en a1,a2,b1,b2,c1,c2,d1,d2 // Como entrada, tenemos la Matriz Segmentada y el número de regioines // Como salida, teemos el Centro de Masas calulado de cada región y las coordenadas en a1,a2,b1,b2,c1,c2,d1,d2 que delimita // un rectángulo que contiene a cada región void CentroMasasGlobal(int Segmenta[20][20], int nregiones, int E1, int H1, int E2,int H2,int CM[2][5],int a1[5],int a2[5],int b1[5],int b2[5],int c1[5],int c2[5], int d1[5],int d2[5]) { int j; int i; int valor; int a; int xmin[5],xmax[5],ymin[5],ymax[5]; for(i=1;i<=nregiones;i++) // iteramos desde la región 0 a la región nregion-1 { xmin[i]=H1; xmax[i]=E1; ymin[i]=H2; ymax[i]=E2; } valor=0;

Page 110: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

114

for(a=1;a<=nregiones;a++) // cálculo para todas las regiones { for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) { if(Segmenta[i][j]!=0) { valor=Segmenta[i][j]; // en "valor" almacenamos el numero de la region (p.e. la region "2") if(i<xmin[valor]) { xmin[valor]=i; } if(i>xmax[valor]) { xmax[valor]=i; } if(j<ymin[valor]) { ymin[valor]=j; } if(j>ymax[valor]) { ymax[valor]=j; } } } } } //almacenamos los distintos centros de masas, por columnas, dejamos dos ceros al final de cada columna //porque asi me resulta mas facil cuando calculemos los parametros del filtro de Kalman for(i=1;i<=nregiones;i++) { a1[i]=xmin[i]; a2[i]=ymin[i]; b1[i]=xmin[i]; b2[i]=ymax[i]; c1[i]=xmax[i]; c2[i]=ymin[i]; d1[i]=xmax[i]; d2[i]=ymax[i]; CM[0][i]=a1[i]+(c1[i]-a1[i])/2; // obtenemos la x del centro de masas de cada region CM[1][i]=a2[i]+(b2[i]-a2[i])/2; // obtenemos la y del centro de masas de cada region } } CENTRO DE MASAS LOCAL void CentroMasasLocal(int Segmenta[20][20], int region, int E1, int H1, int E2,int H2,int CM[2][5],int a1[5],int a2[5],int b1[5],int b2[5],int c1[5],int c2[5], int d1[5],int d2[5]) { int j; int i; int valor;

Page 111: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

115

int xmin,xmax,ymin,ymax; xmin=H1; xmax=E1; ymin=H2; ymax=E2; valor=0; for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) { if(Segmenta[i][j]!=0) { valor=Segmenta[i][j]; // en "valor" almacenamos el numero de la region (p.e. la region "2") if(i<xmin) { xmin=i; } if(i>xmax) { xmax=i; } if(j<ymin) { ymin=j; } if(j>ymax) { ymax=j; } } } } //almacenamos los distintos centros de masas, por columnas, dejamos dos ceros al final de cada columna //porque asi me resulta mas facil cuando calculemos los parametros del filtro de Kalman a1[region]=xmin; a2[region]=ymin; b1[region]=xmin; b2[region]=ymax; c1[region]=xmax; c2[region]=ymin; d1[region]=xmax; d2[region]=ymax; CM[0][region]=a1[region]+(c1[region]-a1[region])/2; // obtenemos la x del centro de masas de cada region CM[1][region]=a2[region]+(b2[region]-a2[region])/2; // obtenemos la y del centro de masas de cada region }

Page 112: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

116

KALMAN LOCAL void KalmanLocal(float p_anter,float x_real[4][1],float x_ant[4][1],float x_act[4][1],float *P_sgte) { //Lo que hace esta funcion: //Calcula los parametros del filtro de Kalman para una region en //movimiento en funcion de parametros anteriores (se pasan a traves de los //vectores X_real, X_ant, P_anter) // Matrices para el Filtro de Kalman // // float A[4][4]={1, 0, 1, 0, // 0, 1, 0, 1, // 0, 0, 1, 0, // 0, 0, 0, 1}; // // float H[2][4]={1, 0, 0, 0, // 0, 1, 0, 0}; // // float Q[4][4]={0.25, 0, 0.5, 0, // 0, 0.25, 0, 0.5, // 0.5, 0, 1, 0, // 0, 0.5, 0, 1}; // float R[2][2]={1, 0, 0, 1}; float K_act[4][2]; float z_act[4][1]; float P_act[4][4]; float Invertible1[2][2]; float Inversa1[2][2]; //Calculamos los parametros del Filtro de Kalman: // Cálculo de la ganancia: Invertible1[0][0]=(p_anter+R[0][0]); Invertible1[0][1]=0; Invertible1[1][0]=0; Invertible1[1][1]=(p_anter+R[1][1]); Inversa(Invertible1,Inversa1); K_act[0][0]=p_anter*Inversa1[0][0]; K_act[0][1]=0.0; K_act[1][0]=0.0; K_act[1][1]=p_anter*Inversa1[1][1]; K_act[2][0]=0.0; K_act[2][1]=0.0; K_act[3][0]=0.0; K_act[3][1]=0.0; //Cálculo de z: z_act[0][0]=x_real[0][0]; z_act[1][0]=x_real[1][0];

Page 113: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

117

// Cálculo de x_act: x_act[0][0]=x_ant[0][0]+x_ant[2][0]+K_act[0][0]*(z_act[0][0]-(x_ant[0][0]+x_ant[2][0])); x_act[1][0]=x_ant[1][0]+x_ant[3][0]+K_act[1][1]*(z_act[1][0]-(x_ant[1][0]+x_ant[3][0])); x_act[2][0]=x_ant[2][0]; x_act[3][0]=x_ant[3][0]; // Cálculo de P_act: P_act=(I(4)-K_act*H)*P_anter; P_act[0][0]=p_anter*(1-K_act[0][0]); P_act[1][1]=p_anter*(1-K_act[1][1]); P_act[2][2]=p_anter; P_act[3][3]=p_anter; // Cálculo de P_sgt: P_sgt=(A-K_act*H)*p_act*A, aunque nosotros cogemos solo el primer elemento; *P_sgte=P_act[0][0]*(1-K_act[0][0])+P_act[0][2]*(1-K_act[0][0])+P_act[2][2]; //p_sgte=p_sgt(1); } PREDICCIÓN void Prediccion(int nregiones,float x_real[4][1],float x_act[4][1],float P_sigte_x,int fil,int col,int a1[5],int a2[5],int b1[5],int b2[5],int c1[5],int c2[5],int d1[5],int d2[5],int e1[5],int e2[5],int f1[5],int f2[5],int g1[5],int g2[5],int h1[5],int h2[5]) { // Lo que hace esta funcion: // Calcula los puntos de la ventana de prediccion en funcion del resultado // obtenidos del filtro de kalman float distancia_drcha,distancia_izda,distancia_arrba,distancia_abjo; float E1,E2,F2,G1,dd1,bb1; dd1=d1[nregiones];bb1=b1[nregiones]; distancia_drcha=P_sigte_x+0.5*(b2[nregiones]-a2[nregiones]); distancia_izda=distancia_drcha; distancia_abjo=P_sigte_x+0.5*(dd1-bb1); distancia_arrba=distancia_abjo; E2=x_act[1][0]-distancia_izda; if(E2 >=a2[nregiones]) { E2=a2[nregiones]-distancia_izda; } if(E2<=0) { E2=0; } e2[nregiones]=E2; E1=x_act[0][0]-distancia_arrba; if(E1 >=a1[nregiones]) {

Page 114: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

118

E1=a1[nregiones]-distancia_arrba; } if(E1<=0) { E1=0; } e1[nregiones]=E1; F2=x_act[1][0]+distancia_drcha; if(F2<=b2[nregiones]) { F2=b2[nregiones]+distancia_drcha; } if(F2>=col) { F2=col; } f2[nregiones]=F2; f1[nregiones]=e1[nregiones]; g2[nregiones]=e2[nregiones]; G1=x_act[0][0]+distancia_abjo; if(G1<=c1[nregiones]) { G1=c1[nregiones]+distancia_abjo; } if(G1>=fil) { G1=fil; } g1[nregiones]=G1; h1[nregiones]=g1[nregiones]; h2[nregiones]=f2[nregiones]; } COTA void Cota(int Diferencia[20][20],int E1, int H1,int E2, int H2, int *cota) { int vector[256]; int dato; int dentro; int mayor=0; int i,j; for(i=0;i<=255;i++)

Page 115: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

119

{ vector[i]=0; } for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) { dato=Diferencia[i][j]; vector[dato]=vector[dato]+1; } } for(i=0;i<=255;i++) { if(vector[i]>mayor) { mayor=vector[i]; } } dentro=0.11136*mayor; for(i=0;i<=255;i++) { if(vector[i]>=dentro) { *cota=i; } } } INVERSA void Inversa(float A[2][2],float Inv[2][2]) { float Determinante; Determinante=A[0][0]*A[1][1]-A[0][1]*A[1][0]; Inv[0][0]=(1/Determinante)*A[0][0]; Inv[1][0]=(1/Determinante)*A[1][0]*(-1); Inv[0][1]=(1/Determinante)*A[0][1]*(-1); Inv[1][1]=(1/Determinante)*A[1][1]; } MEDIA // Filtra la imagen de entrada (Fotograma) utilizando el método de la media // El resultado se almacena en Suavizada // E1,E2,H1,H2: coordenadas de los límites de la imagen a analizar void Media(int Fotograma[20][20], int Suavizada[20][20],int E1,int H1,int E2,int H2) { int i, j, u, v; int Suma;

Page 116: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

120

for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) // análisis dentro de los límites { Suma=0; if((i>=1)&&(i<=(19-1))&&(j>=1)&&(j<=(19-1))) //el '19' se sustituira por FIL y COL más adelante { for(u=(i-1);u<=(i+1);u++) { for(v=(j-1);v<=(j+1);v++) { Suma=Suma+Fotograma[u][v]; // Cojemos los valores del entorno de vecindad de 3x3 // y los sumamos } // end v } // end u Suavizada[i][j]=Suma/9; } //end if } //end j } // end i } MEDIANA // Filtra la imagen de entrada (Fotograma) utilizando el método de la mediana // El resultado se almacena en Suavizada // E1,E2,H1,H2: coordenadas de los límites de la imagen a analizar void Mediana(int Fotograma[20][20], int Suavizada[20][20],int E1,int H1,int E2,int H2) { int i, j, u, v, a, b; int vector1[8]; int auxi; for(i=E1;i<=H1;i++) { for(j=E2;j<=H2;j++) // análisis dentro de los límites { a=1; if((i>=1)&&(i<=(19-1))&&(j>=1)&&(j<=(19-1))) //el '19' se sustituira por FIL y COL más adelante { for(u=(i-1);u<=(i+1);u++) { for(v=(j-1);v<=(j+1);v++) { vector1[a]= Fotograma[u][v]; // Cojemos los valores del entorno de vecindad de 3x3 a=a+1; // y lo metemos en el vector1 (tb se podría haber hecho // multiplicando por una máscara) } } for(a=0;a<=8;a++) { for(b=0;b<=8;b++) { if (vector1[b]>vector1[b+1])

Page 117: ESCUELA SUPERIOR DE INGENIEROS UNIVERSIDAD DE …bibing.us.es/proyectos/abreproy/11274/fichero/PFC_Raul.pdf · expansión del uso del ordenador, tanto el los ámbitos laboral como

121

{ // ordenacióon por el método de la burbuja auxi=vector1[b]; vector1[b]=vector1[b+1]; vector1[b+1]=auxi; } } } } Suavizada[i][j]= vector1[4]; // el valor buscado es el cuarto elemento del vector } } }