Calla, Bernardo Poblete, Felipe F. Malespina, Gabriel Gonzlez, Mariano Varela, Enzo Palomeque, Cristian
AO 2007
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 1 - INDICE DE SECCIONES:
SECCION 0: INTRODUCCION, OBJETIVO Y DESARROLLO
SECCION 1: LA LIBRERA DE VISIN ARTIFICIAL OPENCV Esta seccin describe las caractersticas fundamentales de las libreras as como una breve referencia de su origen y comparativas con otros paquetes comerciales similares.
SECCION 2: INSTALACION Y CONFIGURACION DE LIBRERIAS Esta seccin describe la adecuada instalacin de IPL 2.5, OpenCV beta 5 y highgui, descripcin y uso de los diferentes tipos de archivos generados en dicha instalacin y como efectuar la inclusin de las libreras en dev cpp 4.0.
SECCION 3: IMAGEN DIGITAL Esta seccin describe los principales parmetros de una imagen digital y como es representada cada tipo de imagen digital en memoria
SECCION 4: CAPTURA Y DIGITALIZACION Esta seccin describe como es la interfase entre la imagen real y la PC, principales caractersticas del digitalizador, ventajas y desventajas de dos de las actuales tecnologas de fotodetectores usadas en dispositivos de captura. Se incluye informacin de la cmara web utilizada en el proyecto.
SECCION 5: TIPOS DE DATOS EN IPL Y OPENCV Esta seccin se muestra los tipos de datos de IPL y OPENCV utilizados en el lenguaje c.
SECCION 6: REPRESENTACION DEL MOVIMIENTO Esta seccin es un fragmento traducido del manual proporcionado por OPENCV en el cual se detalla el grupo de funciones que permiten encontrar la orientacin de movimiento de algn objeto en una secuencia de capturas.
SECCION 7: OPERACIONES LOCALES Esta seccin trata sobre como se realizan los diferentes anlisis a una imagen digital, se muestra en detalle la deteccin de bordes mediante el operador sobel el cual es usado por una de las funciones descriptas en la seccin anterior.
SECCION 8: MOTORES PASO A PASO Esta seccin informa sobre los diferentes tipos de motores paso a paso, el funcionamiento y las diferentes de secuencia de excitacin que permiten distintos ngulos de giro.
SECCION 9: MOTOR Y PUERTO PARALELO Esta seccin informa sobre la configuracin de puerto en Windows XP para el uso de los mismos en C, y se detalla la interconexin de nuestro proyecto a travs del mismo.
SECCION 10: PROGRAMA PRINCIPAL Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 2 - Esta seccin describe el diagrama de flujo del programa principal, el cdigo fuente en desarrollado en DEVCPP. SECCION 11: FUNCIONES UTILIZADAS Esta seccin incluye las funciones utilizadas en el cdigo fuente proporcionada por el manual referente de OPENCV.
SECCION 12: ANALISIS DEL FUNCIONAMIENTO DEL PROGRAMA Se muestra un analisis de una secuencia de imagenes de entrada y como se generan las siluetas de movimiento validas, que son parametros fundamentales para las funciones descriptas en la seccion REPRESENTACION DEL MOVIMIENTO
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 3 -
INTRODUCCION
En la vida industrial se observa con gran frecuencia que es necesario realizar el control de procesos los cuales requieren aparte de simples sensores, de otros dispositivos ms complejos para tener una visin detallada del mismo. Hoy en da una de las armas paracombatir este problema es la visin artificial, la cual a la vez de ayudar a resolverlos optimiza en gran medida el control. Adems de la rama industrial es posible realizar numerosas aplicaciones en diferentes reas como por ejemplo la vigilancia hogarea, etc.
OBJETIVO:
Mediante el uso de una cmara web de uso familiar realizaremos un dispositivo el cual ser capaz de interpretar el movimiento de un objeto cualquiera y hacer efectivo el seguimiento, estando este a una cierta distancia y movindose unidimensionalmente en un determinado rango.
DESARROLLO:
Como dijimos mediante una cmara web conectada a travs del puerto USB, son adquiridas las imgenes. Estas imgenes son interpretadas por un software desarrollado bajo el lenguaje de programacin dev C++y las libreras OpenCV, IPL y Highgui, a travs del mismo programa, y dependiendo del movimiento y las condiciones de finales de carrera se generan seales que son tomadas y decodificadas por el driver controlador del motor paso a paso, que es el encargado de realizar los movimientos de la cmara web. Por lo tanto podemos desglosar el funcionamiento del sistema en distintas secciones, las cuales sern desarrolladas en detalle a continuacin. Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 4 - LA LIBRERA DE VISIN ARTIFICIAL OPENCV
Caractersticas fundamentales de la librera de visin artificial y cdigo abierto The Open Computer Vision Library (OpenCV a partir de ahora). La librera OpenCV proporciona un marco de trabajo de alto nivel para el desarrollo de aplicaciones de visin por computador en tiempo real: estructuras de datos, procesamiento y anlisis de imgenes, anlisis estructural, etc. Este marco de trabajo facilita en gran manera el aprendizaje e implementacin de distintas tcnicas de visin por computador, tanto a nivel docente como investigador, aislando al desarrollador de las peculiaridades de los distintos sistemas de visin.
1. INTRODUCCION Son muchos los paquetes de procesamiento de imgenes comerciales y software libre disponibles actualmente, y muchas las ventajas e inconvenientes de cada uno de ellos. Entre los distintos paquetes comerciales disponibles actualmente destacan por su potencia The Martos Image Library (MIL) [1], Khoros, eVision, HIPS, Exbem, Aphelion, etc. sin embargo, el principal inconveniente es su elevado precio y su ciclo de actualizaci n, muchas veces, relativamente largo. Algunos de ellos carecen de un entorno de desarrollo de alto nivel (i.e. HIPS), otros disponen de ste, pero estn ligados a la plataforma de desarrollo (i.e. Khoros - Unix, Linux; Exbem - MacOS; eVision, Aphelion - Windows) o al propio hardware de captura (i.e. MIL). Todos ellos proporcionan funciones deprocesamiento y anlisis de imgenes, reconocimiento de patrones, estadsticas, calibracin de la cmara, etc. a travs del propio entorno o a travs de libreras de funciones, desarrollados en la mayora de las ocasiones en C/C++. Sin embargo, tan slo HIPS pone a disposicin del cliente su cdigo fuente, y en la mayora de los casos hablamos de libreras monolticas, muy pesadas y no demasiado rpidas. Por otro lado, son muchos los paquetes no comerciales (con y sin licencia Software Libre) disponibles en el mercado, entre ellos destacan OpenCV, Gandalf, TargetJr, VXL (basado en TargetJr), CVIPTools, ImageLib, ImLib3D (Linux), LookingGlass, NeatVision (Java), TINA y XMegaWave (Unix/Linux). Todos ellos disponen de herramientas para el procesamiento de imgenes, pero a excepcin de OpenCV y Gandalf ninguno proporciona un marco de trabajo completo para el desarrollo de aplicaciones relacionadas con la visin por computador. Esta capacidad de desarrollo contempla, no slo el procesamiento de imgenes, sino tareas mucho ms complejas como el reconocimiento de gestos, estimacin del movimiento y la posicin de un objeto, morphing, estimadores (filtros de Kalman, etc.), etc. Sin embargo, slo OpenCV proporciona bibliotecas de tipos de datos estticos y dinmicos (matrices, grafos, rboles, etc.), herramientas con la posibilidad de trabajar con la mayora de las capturadoras/cmaras del mercado, entornos de desarrollo fciles e intuitivos y todo ello, corriendo en dos de los sistemas operativos ms utilizados del mundo MicrosoftWindows y Linux.
2. THE OPEN COMPUTER VISION LIBRARY El 13 de Junio del 2000, IntelCorporation anunci que estaba trabajando con un grupo de reconocidos investigadores en visin por computador para realizar una nueva librera de estructuras/funciones en lenguaje C. Esta librera proporcionara un marco de trabajo de nivel medio-alto que ayudara al personal docente e investigador a desarrollar nuevas formas de interactuar con los ordenadores. Este anuncio tuvo lugar en la apertura del IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR). Haba nacido The Open Computer Vision Library [5] y lo haca bajo licencia BSD (Software Libre). Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 5 -
La librera OpenCV es una API de aproximadamente 300 funciones escritas en lenguaje C que se caracterizan por lo siguiente:
Su uso es libre tanto para su uso comercial como no comercial (ver licencias en [2], [3] y [4] para ms informacin). No utiliza libreras numricas externas, aunque puede hacer uso de alguna de ellas, si estn disponibles, en tiempo de ejecucin. Es compatible con The Intel Processing Library (IPL) y utiliza The Intel Integrated Performance Primitives (IPP) para mejorar su rendimiento, si estn disponibles en el sistema. Dispone de interfaces para algunos otros lenguajes y entornos: EiC - intrprete ANSI C escrito por Ed Breen. Hawk y CvEnv son entornos interactivos (escritos en MFC y TCL, respectivamente) que utilizan el intrprete EiC; Ch - intrprete ANSI C/C++creado y soportado por la compaa SoftIntegration; Matlab- gran entorno para el clculo numrico y simblico creado por Mathworks; y muchos ms.
La librera OpenCV esta dirigida fundamentalmente a la visin por computador en tiempo real. Entre sus muchas reas de aplicacin destacaran: interaccin hombre-mquina (HCI4); segmentacin y reconocimiento de objetos; reconocimiento de gestos; seguimiento del movimiento; estructura del movimiento (SFM5); y robots mviles.
Las herramientas de alto nivel hacen uso de un paquete de clases C++y funciones C de alto nivel que utilizan a su vez funciones muy eficientes escritas en C. Concretamente, el conjunto de funciones suministradas por la librera OpenCV se agrupan en los siguientes bloques:
Estructuras6 y operaciones bsicas: matrices, grafos, rboles, etc. Procesamiento y anlisis de imgenes: filtros, momentos, histogramas, etc. Anlisis estructural: geometra, procesamiento del contorno, etc. Anlisis del movimiento y seguimiento de objetos: plantillas de movimiento, seguidores (i.e. Lucas-Kanade), flujo ptico, etc. Reconocimiento de objetos: objetos propios (eigen objects), modelos HMM, etc. Calibracin de la cmara: morphing, geometra epipolar, estimacin de la pose (i.e. POSIT), etc. Reconstruccin tridimensional (funcionalidad experimental): deteccin de objetos, seguimiento de objetos tridimensionales, etc. Interfaces grficos de usuarios y adquisicin de video.
2.2 INTERFACES GRAFICOS Y HERRAMIENTAS DE OpenCV La librera OpenCV proporciona varios paquetes de alto nivel para el desarrollo de aplicaciones de visin. Todos ellos se pueden agrupar en libreras de C/C++dirigidas a usuarios avanzados y en herramientas de scripting dirigidas, en este caso, a usuarios de nivel medio (ideal para practicar con las distintas tcnicas de procesamiento de imgenes y visin). Al primer grupo pertenecen HighGUI y CvCam, mientras que al segundo pertenecen Hawk y OpenCV Toolbox para Matlab. HighGUI permite la escritura/lectura de imgenes en numerosos formatos (BMP, J PEG, TIFF, PxM, Sun Raster, etc.) y la captura de stream de video de capturadoras Matrox y cmaras/capturadoras con drivers VFW/WDM (la mayora del mercado); la creacin de ventanas para visualizar imgenes en ellas. Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 6 -
INSTALACION Y CONFIGURACION DE LIBRERIAS IPL y OpenCV son dos libreras de procesamiento de imagen, desarrolladas por Intel(o bajo el patrocinio de Intel). Estn optimizadas para sus procesadores, aunque tambin son muy rpidas en otros procesadores. IPL (Intel Image Processing Library) est orientada al procesamiento de imgenes a bajo nivel. Su desarrollo fue abandonado en el 2000, ao en que fue sustituida por IPP (Intel Performance Primitives), algo ms eficientes y que incluyen otras aplicaciones (como, por ejemplo, sonido, criptografa y vdeo), pero son ms difciles de manejar y no gratuitas (a diferencia de IPL). Por esta razn usaremos IPL. Pgina web de IPP: OpenCV (Intel Open Source Computer Vision Library) es una librera que contiene un conjunto de utilidades de procesamiento de imgenes, visin artificial, captura de vdeo y visualizacin de imgenes. Es de cdigo abierto, gratuita (tanto para uso comercial como no comercial), multiplataforma, rpida, de fcil uso y en continuo desarrollo. Pgina web de OpenCV:
Usaremos IPL 2.5 y OpenCV beta 5.
INSTALACIN DE IPL 2.5 1. Descargar IPL 2.5: 2. Ejecutar el programa instalador (ipl25.exe). 3. Observar las entradas incluidas en el men de inicio y la estructura de directorios creada: C:\Archivos de Programa\Intel\plsuite
bin Archivos DLL (Dynamic Link Library), libreras enlazadas en tiempo de ejecucin, necesarias para ejecutar funciones de IPL. doc Documentacin, manual y gua de referencia. examples ipledit (aplicacin sencilla de procesamiento de imgenes), tutorial.ipl (tutorial de uso la librera), video (algunos ejemplos de efectos de transicin). include Ficheros de cabecera de librera, para incluir en los programas C. lib Ficheros de descripcin de las libreras. Existe uno por cada archivo DLL. Los necesita el compilador para conocer las funciones disponibles en la DLL.
INSTALACIN DE OpenCV beta 5 1. Descargar OpenCV b5: 2. Normalmente usaremos OpenCV, que ofrece un acceso transparente a muchas operaciones de IPL. Slo para las no incluidas en OpenCV usaremos IPL. 3. Ejecutar el instalador (OpenCV5.exe). Instalar las libreras en: C:\Archivos de Programa\OpenCV5 4. Observar las entradas incluidas en el men de inicio y la estructura de directorios creada: C:\Archivos de Programa\OpenCV5 bin Archivos DLL (Dynamic Link Library), y algunos ejecutables de prueba, test e informacin de las libreras. cxcore Cdigo de fuente del ncleo de la librera, operaciones de bajo nivel sobre arrays, matrices e imgenes. include Ficheros de cabecera, para incluir en los programas C. El principal es: cxcore.h src Cdigo fuente de la librera, necesario para recompilar. Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 7 - cv Cdigo de fuente de la librera, operaciones de procesamiento de imgenes y visin artificial. Tambin tiene un directorio include (para los ficheros de cabecera, siendo el principal cv.h) y src (para el cdigo fuente). cvaux Librera de funcionalidades avanzadas, en algunos casos en estado experimental, ms relacionadas con visin artificial que con procesamiento de imagen. Tambin tiene un directorio include (para los ficheros de cabecera, como cvaux.h) y src (para el cdigo fuente). otherlibs Otras libreras relacionadas con la entrada salida. highgui Libreras para crear ventanas, leer y escribir imgenes (formatos BMP, JPEG, PNG y TIF), archivos de vdeo (formato AVI) y captura de cmara (usando el interface Video for Windows). Usaremos la modificacin highgui2. docs Documentacin de las libreras. La mayor parte de la documentacin est en formato HTML (fichero index.html). lib Ficheros de descripcin de las libreras. Cuidado, slo estn para Visual C++.
5. Instalar HighGUI2. y descomprimir (marcando la opcin Use folder names) en: C:\Archivos de Programa\OpenCV5 Ver las novedades de HighGUI2 (respecto de HighGUI): otherlibs/HIGHGUI2.txt
CXCORE Reference Manual operaciones bsicas, aritmticas y de dibujo CV Reference Manual filtros, geomtricas y anlisis de imgenes Procesamiento Audiovisual HighGUI Reference Manual entrada/salida de imgenes y vdeo CVCAM Reference Manual (RTF) irrelevante
USO DE LAS LIBRERAS CON DEVCPP 4.0 1. La utilizacin de las libreras IPL y OpenCV permite aprovechar la potencia de las primeras para el procesamiento eficiente de imgenes y vdeo, y la facilidad de la segunda para el desarrollo rpido de aplicaciones interactivas en entornos Windows. 2. El cdigo de las libreras se encuentra en ficheros DLL (Dynamic Link Library), como ipl.dll, cxcore097.dll, cv097.dll y highgui0972.dll. Los ficheros DLL contienen cdigo objeto (cdigo ejecutable) que se enlaza de forma dinmica con la aplicacin. Por lo tanto, nuestros programas usan estas libreras, pero no las incluyen en su cdigo. Los ficheros DLL deben estar accesibles, o bien en el mismo directorio del programa o en el PATH del sistema.
3. Una vez abierto devcpp dirigirse a la solapa Herramientas +Opciones del Compilador
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 8 -
En la solapa Compilador aadir a la lnea de comandos del Linker como se muestra:
En la solapa Directorios y dentro de ella Binario:
En la solapa Directorios y dentro de ella Bibliotecas: Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 9 -
En la solapa Directorios y dentro de ella Includes C:
En la solapa Directorios y dentro de ella Includes C++:
En la solapa Programas: Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 10 -
Verificar adems que la carpeta Bin este aadida al Path del sistema:
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 11 -
IMAGEN DIGITAL
Es una matriz, o array bi-dimensional, de nmeros. Cada celda de la matriz es un pxel.
NOMENCLATURA N de columnas de la matriz: ancho de la imagen (width). N de filas de la matriz: alto de la imagen (height). Eje horizontal: eje x. Eje vertical: eje y. Normalmente el tamao de la imagen se expresa como: ancho x alto Supondremos un acceso indexado a los pxeles si i es una imagen, i(x, y) ser el valor del pxel en la columna x, fila y.
VALOR DE UN PIXEL Cada pxel representa el valor de una magnitud fsica. Cantidad de luz en un punto de una escena. Valor de color (cantidad de radiacin en la frecuencia del rojo, verde y azul). Nivel de radiacin infrarroja, rayos X, etc. En general, cualquier radiacin electromagntica. Profundidad (distancia) de una escena en una direccin. Cantidad de presin ejercida en un punto. Nivel de absorcin de determinada radiacin. Etctera, etctera.
TIPOS DE DATOS DE CADA MATRIZ
Imagen binaria: 1 pxel =1 bit 0 =negro; 1=blanco Imagen en escala de grises: 1 pxel =1 byte Permite 256 niveles de gris 0 =negro; 255 =blanco Imagen en color: 1 pxel =3 bytes Cada pxel consta de 3 valores: Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 12 - (Rojo, Verde, Azul) Un byte por color 16,7 millones de colores posible. Profundidad de color (depth). Un nivel de gris, o un color, se puede representar con ms o menos bits:
Hi-color: mtodo reducido para representar colores 1 pxel =2 bytes 5 bits por cada color (Rojo, Verde, Azul) Imgenes multicanal: Cuando los pxeles representan magnitudes en distintos dominios fsicos, decimos que la imagen es multicanal. Ejemplo. Imagen en color Imagen con 3 canales: canal R (rojo), canal G (verde), canal B (azul).
Ejemplo. RGBA Imagen RGB ms canal Alfa. El canal Alfa representa el nivel de transparencia del pxel.
RESUMEN Parmetros de una imagen digital: Ancho y alto. Nmero de canales y significado de cada uno. Nmero de bits por pxel y canal (depth). Origen de coordenadas y modo de almacenamiento multicanal.
Resolucin espacial: tamao de la imagen. Resolucin fotomtrica: profundidad de color. Resolucin temporal: aplicable en vdeos.
2 bits por pxel 3 bits por pxel 4 bits por pxel Canal R Canal G Canal B Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 13 -
CAPTURA Y DIGITALIZACION
Seal analgica: seal de vdeo, foto impresa, diapositiva, etc. Digitalizadores: digitalizador de vdeo, escner, etc. Actualmente, la distincin es cada vez ms difusa. Captura y digitalizacin van incorporadas en los mismos dispositivos (cmaras y escneres).
CARACTERISTICAS DE UN DIGITALIZADOR: Tamao de imagen. Ancho y alto de las imgenes tomadas. Depende del nmero de pxeles de fotodetector. En cmaras fotogrficas se mide en megapxeles. Por ejemplo, resolucin mxima: 2048x1536 3,34 megapxeles. En cmaras de vdeo es mucho menor. No suele pasar de 800x600 0,48 megapxeles. Tamao del pxel. Determina la densidad de pxeles. Es ms relevante, por ejemplo, en escneres. Propiedad fsica medida. Luz, infrarrojo, ultravioleta, etc. Linealidad. El nivel de gris debera ser proporcional al brillo de la imagen. Tb. es importante el nmero de niveles de gris. Nivel de ruido. Ante una escena de color uniforme todos los pxeles deberan ser iguales. Pero nunca lo son. El ruido se mide en relacin al nivel de contraste en la imagen.
TIPOS DE CAPTURA DE DIGITALIZADOR Existen muchos tipos, segn el tipo de iluminacin, sensores y mecanismo de escaneado de la imagen. Entre ellos:
CCD: Charge-Coupled Devices. Se han impuesto en muchos mbitos: fotografa digital, vdeo digital, cmaras de TV, astronoma, microscopa, escneres, etc. Utilizan sensores de silicio. El CCD es un chip que integra una matriz de fotodetectores.
Esquema de una celda del CCD (o pxel).
El CCD est construido en un semiconductor de silicio. Cuando llega un fotn, el semiconductor libera electrones. Cada celda es un pozo, que acumula los electrones que han saltado (similar a un condensador). El n de electrones es proporcional a la intensidad de luz. Escena Cmara Seal analgica Digitalizador Ordenador Seal digital Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 14 - El detector es independiente del color Se usa un filtro de color (microfiltro). Distribucin tpica de los filtros de color en el CCD (patrn de Bayer).
Existen el doble de detectores de verde que de rojo y de azul. Razn: el ojo humano es mucho ms sensible al verde que a los otros colores. Cada fotodetector es un pxel. Los colores no presentes se interpolan usando los 2 4 pxeles vecinos de ese color. LECTURA DEL VALOR DE LOS PIXELES Hay un desplazamiento de la carga de los pozos, hasta salir por un extremo.
Esto es el llamado full frame CCD.
Por sus buenas caractersticas, los CCD son muy usados en muchos mbitos. Pero tambin tienen sus limitaciones: Corriente oscura (dark current): los electrones saltan al llegar un fotn, pero tambin pueden hacerlo por el calor. Campo de estrellas: las imperfecciones provocan algunos pxeles con alta corriente oscura. Aunque no llegue luz, aparecen iluminados. Mayor cuanto peor es la cmara.
Ruido fotnico: debido a la naturaleza cuntica de la luz. Es mayor con escasa iluminacin. SONY DFW500
QUICKCAM PRO
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 15 -
Rebosamiento (blooming): cuando un pozo se llena de electrones, se desparrama su contenido a los pxeles cercanos.
CMOS: Complementary Metal-Oxide-Semiconductor. Tambin basados en semiconductores de silicio. Diferencia con CCD: cada pxel incorpora su propia circuitera, se pueden leer y seleccionar independientemente (sin necesidad de desplazamientos).
Ventajas: suelen ser ms rpidos, tienen mejor integracin (necesitan menos circuitera) y disminuyen el blooming. Inconvenientes: hay menos espacio de captura en el chip (menos luz), son menos uniformes (hay ms ruido) y necesitan bfferes. Las cmaras fotogrficas digitales suelen usar CCD. Las cmaras de videoconferencia suelen usar CMOS, aunque las de ms calidad usan CCD. Las diferencias entre unas y otras son cada vez menores.
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 16 - EUCC-961 300K INFRARED
CMOS sensor 300K pxeles Resolucin:640x480 pxeles Infrared Lente de vidrio USB Plug and Play Micrfono (opcional) Alta-precisin en lente de vidrio: f=4.4 / 4.4 / 6.0mm ngulo de visin: 61 / 88 / 50 Formato de video: RGB, AVI. Balance automtico de blancos Windows 98/98SE/XP/ME/2000
COMPROBACION DE LAS CARACTERISTICAS DE LA CAMARA WEB
Se realizo la comprobacin mediante el software NERO
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 17 - La si gui ent e r ut i na es l a ut i l i zada par a most r ar l a i magen que capt ur a l a cmar a: #i ncl ude " cv. h" #i ncl ude " hi ghgui . h" #i ncl ude <st di o. h> #i ncl ude <ct ype. h>
mai n( ) { CvCapt ur e* capt ur e = 0; capt ur e = cvCapt ur eFr omCAM( - 1) ;
i f ( ! capt ur e ) { f pr i nt f ( st der r , " No se puede i ni ci al i zar l a capt ur a. . . \ n") ; r et ur n - 1; } cvNamedWi ndow( "I magen", 0 ) ;
f or ( ; ; ) { I pl I mage* f r ame = 0; i nt g; f r ame = cvQuer yFr ame( capt ur e ) ; i f ( ! f r ame ) br eak;
cvShowI mage( " I magen", f r ame ) ; g = cvWai t Key( 10) ; }
cvRel easeCapt ur e( &capt ur e ) ; cvDest r oyWi ndow( "Que capo") ; }
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 18 - TIPOS DE DATOS EN IPL Y OPENCV TIPOS DE DATOS AUXILIARES CvPoint: coordenadas de un punto (un pxel) en una imagen. La numeracin de filas y columnas empieza en 0. typedef struct CvPoint { int x; int y; } CvPoint;
CvSize: tamao de una regin rectangular, en pxeles. typedef struct CvSize { int width; // Anchura int height; // Altura } CvSize;
CvRect: rectngulo en la imagen, dado por el pxel superior izquierdo, anchura y altura. typedef struct CvRect { int x; int y; int width; // Anchura int height; // Altura } CvRect;
CvScalar: escalar o valor de un pxel, que puede contener 1, 2, 3 4 nmeros (segn el nmero de canales). typedef struct CvScalar { double val[4]; } CvScalar;
En las funciones para dibujar (puntos, lneas, crculos, elipses, etc.) el color se representa mediante un CvScalar, que almacena los canales RGB.
EL TIPO IPLIMAGE: El tipo de datos para representar imgenes es el tipo IplImage, tanto en IPL como en OpenCV. Las imgenes se guardan descomprimidas, como una matriz de pxeles Principales propiedades de una imagen: Tamao (size): anchura (width) y altura (height). Profundidad de pxeles (depth): enteros de 8, 16 y 32 bits, reales de 32 y 64 bits. Nmero de canales (nChannels): 1, 2, 3 4. Origen de coordenadas (origin): top-left, bottom-left; y orden de los canales (dataOrder): entrelazado de pxeles (0) o por canales (1). Las variables manejadas sern punteros a IplImage.
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 19 - DEFINICION DEL TIPO IPLIMAGE. Observar que algunos campos no se usan en OpenCV (slo se usan en IPL).
typedef struct _IplImage { int nSize; /* sizeof(IplImage) */ int ID; /* version (=0)*/ int nChannels; /* Most of OpenCV functions support 1,2,3 or 4 channels */ int alphaChannel; /* ignored by OpenCV */ int depth; /* pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported */ char colorModel[4]; /* ignored by OpenCV */ char channelSeq[4]; /* ditto */ int dataOrder; /* 0 - interleaved color channels, 1 - separate color channels. cvCreateImage can only create interleaved images */ int origin; /* 0 - top- left origin, 1 - bottom-left origin (Windows bitmaps style) */ int align; /* Alignment of image rows (4 or 8). OpenCV ignores it and uses widthStep instead */ int width; /* image width in pixels */ int height; /* image height in pixels */ struct _IplROI *roi; /* image ROI. when it is not NULL, this specifies image region to process */ struct _IplImage *maskROI; /* must be NULL in OpenCV */ void *imageId; /* ditto */ struct _IplTileInfo *tileInfo; /* ditto */ int imageSize; /* image data size in bytes (=image->height* image->widthStep) in case of interleaved data)*/ char *imageData; /* pointer to aligned image data */ int widthStep; /* size of aligned image row in bytes */ int BorderMode[4]; /* border completion mode, ignored by OpenCV */ int BorderConst[4]; /* ditto */ char *imageDataOrigin; /* pointer to a very origin of image data (not necessarily aligned) it is needed for correct image deallocation */ } IplImage;
CREACION DE UNA IMAGEN: IplImage* cvCreateImage(CvSize size, int depth, int channels) size: tamao de la imagen depth: profundidad de pxel: IPL_DEPTH_8U - unsigned 8-bit integers IPL_DEPTH_8S - signed 8-bit integers IPL_DEPTH_16S - signed 16-bit integers IPL_DEPTH_32S - signed 32-bit integers IPL_DEPTH_32F - single precision floating-point numbers IPL_DEPTH_64F - double precision floating-point numbers channels: nmero de canales: 1, 2, 3 4 Implcitamente, el origen es top-left y el orden es entrelazado. Con imgenes RGB el orden es: b0, g0, r0, b1, g1, r1, . Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 20 - REPRESENTACION DEL MOVIMIENTO La primer figura muestra el movimiento de una persona u objeto. Para obtener una silueta clara se usa la tcnica de substraccin de fondo descritas en la seccin sustraccin de fondo (Background Subtraction). Cuando los objetos se mueven se copia el mayor margen de movimiento de la silueta tomando los mayores gradientes de movimiento de la imagen. Generalmente este valor es un punto flotante llamado timestamp que tiene el tiempo desde que empez el movimiento en milisegundos. La otra figura muestra el resultado que es llamado historia de movimiento de imagen MHI. Un valor de pxel o el tiempo delta del threshold, como sea ms apropiado, es seteado a 0cuando un pxel en la MHI cambia y crece siguiendo el movimiento.
El movimiento ms reciente tiene el valor ms alto y los movimientos ms cercanos van decreciendo a medida que nos acercamos al ltimo valor que es 0.
A continuacin se describen los procedimientos: ACTUIALIZANDO LAS IMGENES DE MHI: Generalmente estas imgenes se utilizan porque tienen diferencias de tiempo, como puede ser el tiempo transcurrido desde que la aplicacin se ejecut que es leda en mseg. para ser convertida luego en un valor numrico float que es el valor de la silueta ms reciente. Luego sigue escribiendo esta silueta sobre las pasadas siluetas con una umbralizacin subsecuente con los pxeles viejos para crear la MHI.
UpdateMotionHistory Updat es moti on hi story i mage by movi ng si lhouette voi d cvUpdat eMot i onHi st or y( const CvAr r * si l houet t e, CvAr r * mhi , doubl e t i mest amp, doubl e dur at i on ) ; si l houet t e Si l houet t e mask que t i ene pi xel di st i nt o de cer o donde el movi mi ent o ocur r e. mhi Mot i on hi st or y i mage, que es act ual i zada por l a f unci n ( si ngl e- channel , 32- bi t f l oat i ng- poi nt ) t i mest amp Ti empo act ual en mi l i segundos u ot r a uni dad. dur at i on Mxi ma dur aci n de l a secuenci a de movi mi ent o en l a mi sma uni dad que t i mest amp.
La f unci n cvUpdat eMot i onHi st or y act ual i za mot i on hi st or y i mage como si gue: mhi ( x, y) =t i mest amp i f si l houet t e( x, y) ! =0 0 i f si l houet t e( x, y) =0 and mhi ( x, y) <t i mest amp- dur aci n mhi ( x, y) de ot r a f or ma Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 21 - Est o es, l os pi xel de MHI donde el movi mi ent o ocur r e son l l enados con el t i empo cor r i ent e t i mest amp, mi ent r as que l os pi xel de MHI donde el movi mi ent o no ocur r e por t i empo at r s son bor r ados.
CREANDO EL GRADIENTE DE MOVIMIENTO: 1. Comienza con la MHI mostrada en la figura 2.2. 2. Se le aplica el algoritmo de Sobel al 3x3 con los operndoos X, Y. 3. Si el resultado responde a la localizacin del pxel x, y es Sx (x,y) para el operando Sobel x y Sy (x,y) para el y, despus la orientacin del gradiente se calcula como A(x,y)=arctg Sy/Sx. La magnitud es M(x,y)=Sx +Sy. 4. Las ecuaciones se aplican a la imagen dndole una direccin o un ngulo sobre una imagen superpuesta a la MHI como se muestra en la figura 2.2.
5. La frontera de la regin MH puede contener movimientos incorrectos como muestra la figura 2.2, umbral izando fuera las magnitudes que son muy largas o muy pequeas se puede corregir esto; Fig. 2.3.
CalcMotionGradient Cal cul a la orientaci n del gradiente de moti on history image voi d cvCal cMot i onGr adi ent ( const CvAr r * mhi , CvAr r * mask, CvAr r * or i ent at i on, doubl e del t a1, doubl e del t a2, i nt aper t ur e_si ze=3 ) ; mhi Mot i on hi st or y i mage. mask Mask i magen; mar ca p xel es donde l os dat os del gr adi ent e del movi mi ent o son cor r ect os. Par met r o de sal i da. or i ent at i on i magen or i ent aci n del gr adi ent e de movi mi ent o; cont i ene ngul os desde 0 a ~360. del t a1, del t a2 l a f unci n busca m ni mo ( m( x, y) ) y mxi mo ( M( x, y) ) mhi val or es sobr e cada veci ndad del pi xel ( x, y) y asume que el gr adi ent e es val i do sol o si mi n( del t a1, del t a2) <= M( x, y) - m( x, y) <= max( del t a1, del t a2) . aper t ur e_si ze Or den del oper ador der i vada usados por l a f unci n: CV_SCHARR, 1, 3, 5 or 7 ( ver cvSobel ) . La f unci n cvCal cMot i onGr adi ent cal cul a l a der i vada Dx y Dy de mhi y l uego cal cul a el gr adi ent e de or i ent aci n como: or i ent at i on( x, y) =ar ct an( Dy( x, y) / Dx( x, y) ) Figura 2.2 Figura 2.3 Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 22 - wher e bot h Dx( x, y) ' and Dy( x, y) ' si gns ar e t aken i nt o account ( as i n cvCar t ToPol ar f unct i on) . Af t er t hat mask i s f i l l ed t o i ndi cat e wher e t he or i ent at i on i s val i d ( see del t a1 and del t a2 descr i pt i on) .
ENCONTRANDO LA ORIENTACION DE UNA REGION:
La fig. 2.4 muestra la salida de la funcin gradiente del movimiento, descripta anteriormente, con la direccin del flujo de movimiento.
La silueta actual est en azul brillante mientras que en los otros movimientos se muestra ms tenue, las lneas rojas muestran donde fueron encontrados los gradientes vlidos del movimiento, y la lnea blanca muestra la direccin global del movimiento.
Para determinar el movimiento ms reciente se realiza lo sig: 1. Se calcula el histograma de los movimientos resultantes del proceso; fig. 2.3. 2. Encontrar la direccin de una funcin circular ; ngulo en grados: a) Se encuentra el mximo pico de orientacin del histograma. b) Se encuentran las mnimas diferencias con respecto a este ngulo base. Los movimientos ms recientes son tomados con mayores tamaos.
CalcGlobalOrientation Calculates global motion ori entation of some selected regi on doubl e cvCal cGl obal Or i ent at i on( const CvAr r * or i ent at i on, const CvAr r * mask, const CvAr r * mhi , doubl e t i mest amp, doubl e dur at i on ) ; or i ent at i on Mot i on gr adi ent or i ent at i on i mage; cal cul ada por l a f unci on cvCal cMot i onGr adi ent . mask Mask i mage. Debe ser un conj unt o de val i das gr adi ent mask, obt eni da con cvCal cMot i onGr adi ent y mask de l a r egi n, en l a cual l a di r ecci n necesi t a ser cal cul ada mhi Mot i on hi st or y i mage. t i mest amp Ti empo act ual en mi l i segundos o ot r a uni dad, es mej or al macenar t i empo pasado ant es de cvUpdat eMot i onHi st or y y usar est o a. C. , por que ej ecut ando cvUpdat eMot i onHi st or y y cvCal cMot i onGr adi ent sobr e gr an i magen puede t omar t i empo. dur at i on Mxi ma dur aci n de l a secuenci a de movi mi ent o en mi l i segundos, el mi smo como en cvUpdat eMot i onHi st or y.
La f unci n cvCal cGl obal Or i ent at i on cal cul a l a di r ecci n gener al del movi mi ent o en l a r egi n sel ecci onada y devuel ve un Angul o ent r e 0 y 360. At f i r st t he f unct i on bui l ds t he or i ent at i on hi st ogr am and f i nds t he basi c or i ent at i on as a coor di nat e of t he hi st ogr am maxi mum. Af t er t hat t he f unct i on cal cul at es t he shi f t r el at i ve t o t he basi c or i ent at i on as a wei ght ed sum of al l or i ent at i on vect or s: t he mor e r ecent i s t he mot i on, t he gr eat er i s t he wei ght . The r esul t ant angl e i s a ci r cul ar sumof t he basi c or i ent at i on and t he shi f t . Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 23 -
SUBTRACCION DE FONDO: Esta seccin describe las funciones bsicas para hacer un modelo de substraccin de fondo (Background) para un modelo esttico. En este capitulo el trmino Background est dado por el seteo de los pxeles de imgenes que casi no tienen movimiento que son pxeles que no pertenecen a ningn objeto movindose frente a la cmara. Esta definicin puede variar si se consideran otras tcnicas para extracciones de objetos. Por ejemplo: si el fondo dela escena puede ser determinado por partes de la escena que estn bastante lejos de la cmara. El modelo ms simple de Background supone que los pxeles de brillo del fondo vara independientemente de acuerdo a una distribucin normal. Las caractersticas del fondo pueden ser calculadas almacenando algunas docenas de cuadros as como ellos tengan. Que significa encontrar una suma de valores de los pxeles en el lugar S(x,y) de los distintos cuadros (frames) y una suma de los valores Sq(x, y) para la ubicacin de cada pxel. El resultado calculado es: m(x, y)=S(x, y) / n n es el nmero de cuadros (frames). La desviacin estndar se calcula como: r(x, y) =sqrt(sq(x, y)/n)-(S(x, y)/n)^2)
Luego que el pxel en una cierta ubicacin de pxel en un cierto cuadro (frame) es apreciado como condicin del movimiento del objeto si la condicin es conocida donde C es una constante. Si C=3 esto es conocido como la regla de las 3 sigmas. Para obtener el modelo de Background cualquier objeto debe ser alejado de la cmara por unos cuantos segundos para que la cmara tome la imagen del fondo. La tcnica de abajo puede ser aprovechada, pero es razonable proponer una adaptacin a un fondo para cambiar las condiciones de luz y las escenas del fondo como por ej. Cuando la cmara se mueve o algn objeto pasa delante del objeto que est enfrente de la cmara. La simple acumulacin para calcular este brillo puede ser reemplazado con las ordenes cvAbsDiff , cvthrehold y otras. Las funciones estas pueden hacer una diferencia aproximada del fondo pero no eliminarlo del todo. UMBRALIZACION: Esta seccin describe la umbralizacin por funciones de grupo, las funciones de umbralizacin se usan para 2 propsitos: 1. Sacar algunos pxeles que no pertenecen a cierto rango como por ejemplo extraer burbujas o cierto brillo o color de la imagen. 2. Convertir a la escala de grises o a un doble nivel blanco y negro. Usualmente la imagen resultante es usada como una mscara o una fuente para extraer los mayores niveles de informacin de una imagen como por ejemplo contorno(Active contours), esqueleto (Distance transform), lneas (Hough Transforms), etc. Generalmente la umbralizacin es una funcin de determinante en imgenes:
A(P(x, y), F(x, y),P(x, y))=true B(P(x, y), F(x, y),P(x, y))=false La funcin nombrada F(x, y),P(x, y) es representada como g(x, y) <P(x, y) <h(x, y) dondeg y h son funcin de los valores de los pxeles y generalmente son valores constantes. Hay 2 tipos bsicos de operaciones de umbralizamiento. El primero es una funcin predeterminada independiente de la localizacin que es g(x, y) y h(x, y) que son constantes de la imagen. Sin embargo para una imagen ms concreta el valor de la constante puede calcularse con un histograma de imgenes (histograms) o criterio esttico (image statics) T(x, y) Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 24 - El segundo tipo de funcin elige g(x) y h(x) dependiendo del pxel de al lado para extraer regiones variando el contraste y el brillo las funciones descriptas en este captulo implementan estas aproximaciones: Soportan un solo canal de imagen IPL_DEPTH_8U, IPL_DEPTH_8S o IPL_DEPTH_32F.
AbsDiff Cal cula l a dif erenci a absol uta entre dos arrays voi d cvAbsDi f f ( const CvAr r * sr c1, const CvAr r * sr c2, CvAr r * dst ) ; sr c1 Primer array fuente. sr c2 Segundo array fuente. dst Array de destino.
dst ( I ) c = abs( sr c1( I ) c - sr c2( I ) c ) . Todos los array deben tener el mismo tamao y tipo de datos.
Threshold Applies fi xed-level threshold to array elements voi d cvThr eshol d( const CvAr r * sr c, CvAr r * dst , doubl e t hr eshol d, doubl e max_val ue, i nt t hr eshol d_t ype ) ; sr c Array fuente (single-channel, 8-bit of 32-bit floating point). dst Array Destino; debe ser del mismo tipo de sr c or 8-bit. t hr eshol d Valor Threshold. max_val ue Valor maximo para usar con tipos CV_THRESH_BI NARY y CV_THRESH_BI NARY_I NV. t hr eshol d_t ype Tipo de Thresholding (ver la discusion)
La funcion cvThr eshol d applies fixed-level thresholding to single-channel array. The function is typically used to get bi-level (binary) image out of grayscale image (cvCmpS could be also used for this purpose) or for removing a noise, i.e. filtering out pixels with too small or too large values. There are several types of thresholding the function supports that are determined by
t hr eshol d_t ype: t hr eshol d_t ype=CV_THRESH_BI NARY: dst ( x, y) = max_val ue, i f sr c( x, y) >t hr eshol d 0, ot her wi se t hr eshol d_t ype=CV_THRESH_BI NARY_I NV: dst ( x, y) = 0, i f sr c( x, y) >t hr eshol d max_val ue, ot her wi se t hr eshol d_t ype=CV_THRESH_TRUNC: dst ( x, y) = t hr eshol d, i f sr c( x, y) >t hr eshol d sr c( x, y) , ot her wi se
t hr eshol d_t ype=CV_THRESH_TOZERO: dst ( x, y) = sr c( x, y) , i f sr c( x, y) >t hr eshol d 0, ot her wi se
t hr eshol d_t ype=CV_THRESH_TOZERO_I NV: dst ( x, y) = 0, i f sr c( x, y) >t hr eshol d Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 25 - sr c( x, y) , ot her wi se
Motion Representation Figure 2-1 (left) shows capturing a foreground silhouette of the moving object or person. Obtaining a clear silhouette is achieved through application of some of background subtraction techniques briefly described in the section on Background Subtraction. As the person or object moves, copying the most recent foreground silhouette as the highest values in the motion history image creates a layered history of the resulting motion; typically this highest value is just a floating point timestamp of time elapsing since the application was launched in milliseconds. Figure 2-1 (right) shows the result that is called the Motion History Image (MHI). A pixel level or a timedelta threshold, as appropriate, is set such that pixel values in the MHI image that fall below that threshold are set to zero.
The most recent motion has the highest value, earlier motions have decreasing values subject to a threshold below which the value is set to zero. Different stages of creating and processing motion templates are described below. A) Updating MHI Images Generally, floating point images are used because system time differences, that is, timeelapsing since the application was launched, are read in milliseconds to be further converted into a floating point number which is the value of the most recent silhouette. Then follows writing this current silhouette over the past silhouettes with subsequent thresholding away pixels that are too old (beyond a maximum mhiDuration) to create the MHI. UpdateMotionHistory Updat es moti on hi story i mage by movi ng si lhouette voi d cvUpdat eMot i onHi st or y( const CvAr r * si l houet t e, CvAr r * mhi , doubl e t i mest amp, doubl e dur at i on ) ; si l houet t e Si l houet t e mask t hat has non- zer o pi xel s wher e t he mot i on occur s. mhi Mot i on hi st or y i mage, t hat i s updat ed by t he f unct i on ( si ngl e- channel , 32- bi t f l oat i ng- poi nt ) t i mest amp Cur r ent t i me i n mi l l i seconds or ot her uni t s. dur at i on Maxi mal dur at i on of mot i on t r ack i n t he same uni t s as t i mest amp. The f unct i on cvUpdat eMot i onHi st or y updat es t he mot i on hi st or y i mage as f ol l owi ng: mhi ( x, y) =t i mest amp i f si l houet t e( x, y) ! =0 0 i f si l houet t e( x, y) =0 and mhi ( x, y) <t i mest amp- dur at i on mhi ( x, y) ot her wi se Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 26 - That i s, MHI pi xel s wher e mot i on occur s ar e set t o t he cur r ent t i mest amp, whi l e t he pi xel s wher e mot i on happened f ar ago ar e cl ear ed.
B) Maki ng Motion Gradi ent Image 1. Start with the MHI image as shown in Figure 2-2(left). 2. Apply 3x3 Sobel operators X and Y to the image. 3. If the resulting response at a pixel location (X,Y) is Sxxy to the Sobel operator X and Syxy to the operator Y, then the orientation of the gradient iscalculated as: Axy=arctanSyxySxxy and the magnitude of the gradient is: . Mxy2 =Sxxy2 +Syxy2 4. The equations are applied to the image yielding direction or angle of a flow image superimposed over the MHI image as shown in Figure 2-2.
5. The boundary pixels of the MH region may give incorrect motion angles and magnitudes, as Figure 2- 2 shows. Thresholding away magnitudes that are either too large or too small can be a remedy in this case. Figure 2-3 shows the ultimate results.
CalcMotionGradient Calculates gradient ori entation of moti on history image voi d cvCal cMot i onGr adi ent ( const CvAr r * mhi , CvAr r * mask, CvAr r * or i ent at i on, doubl e del t a1, doubl e del t a2, i nt aper t ur e_si ze=3 ) ; mhi Mot i on hi st or y i mage. mask Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 27 - Mask i mage; mar ks pi xel s wher e mot i on gr adi ent dat a i s cor r ect . Out put par amet er . or i ent at i on Mot i on gr adi ent or i ent at i on i mage; cont ai ns angl es f r om0 t o ~360. del t a1, del t a2 The f unct i on f i nds mi ni mum( m( x, y) ) and maxi mum( M( x, y) ) mhi val ues over each pi xel ( x, y) nei hbor hood and assumes t he gr adi ent i s val i d onl y i f mi n( del t a1, del t a2) <= M( x, y) - m( x, y) <= max( del t a1, del t a2) . aper t ur e_si ze Aper t ur e si ze of der i vat i ve oper at or s used by t he f unct i on: CV_SCHARR, 1, 3, 5 or 7 ( see cvSobel ) . The f unct i on cvCal cMot i onGr adi ent cal cul at es t he der i vat i ves Dx and Dy of mhi and t hen cal cul at es gr adi ent or i ent at i on as: or i ent at i on( x, y) =ar ct an( Dy( x, y) / Dx( x, y) ) wher e bot h Dx( x, y) ' and Dy( x, y) ' si gns ar e t aken i nt o account ( as i n cvCar t ToPol ar f unct i on) . Af t er t hat mask i s f i l l ed t o i ndi cat e wher e t he or i ent at i on i s val i d ( see del t a1 and del t a2 descr i pt i on) . C) Fi nding Regional Orientation or Normal Optical Flow Figure 2-4 shows the output of the motion gradient function described in the section above together with the marked direction of motion flow.
The current silhouette is in bright blue with past motions in dimmer and dimmer blue. Red lines show where valid normal flow gradients were found. The white line shows computed direction of global motion weighted towards the most recent direction of motion. To determine the most recent, salient global motion: 1. Calculate a histogram of the motions resulting from processing (see Figure 2-3). 2. Find the average orientation of a circular function: angle in degrees. a. Find the maximal peak in the orientation histogram. b. Find the average of minimumdifferences from this base angle. The more recent movements are taken with lager weights. CalcGlobalOrientation Calculates global motion ori entation of some selected regi on doubl e cvCal cGl obal Or i ent at i on( const CvAr r * or i ent at i on, const CvAr r * mask, const CvAr r * mhi , Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 28 - doubl e t i mest amp, doubl e dur at i on ) ; or i ent at i on Mot i on gr adi ent or i ent at i on i mage; cal cul at ed by t he f unct i on cvCal cMot i onGr adi ent . mask Mask i mage. I t may be a conj unct i on of val i d gr adi ent mask, obt ai ned wi t h cvCal cMot i onGr adi ent and mask of t he r egi on, whose di r ect i on needs t o be cal cul at ed. mhi Mot i on hi st or y i mage. t i mest amp Cur r ent t i me i n mi l l i seconds or ot her uni t s, i t i s bet t er t o st or e t i me passed t o cvUpdat eMot i onHi st or y bef or e and r euse i t her e, because r unni ng cvUpdat eMot i onHi st or y and cvCal cMot i onGr adi ent on l ar ge i mages may t ake some t i me. dur at i on Maxi mal dur at i on of mot i on t r ack i n mi l l i seconds, t he same as i n cvUpdat eMot i onHi st or y. The f unct i on cvCal cGl obal Or i ent at i on cal cul at es t he gener al mot i on di r ect i on i n t he sel ect ed r egi on and r et ur ns t he angl e bet ween 0 and 360. At f i r st t he f unct i on bui l ds t he or i ent at i on hi st ogr amand f i nds t he basi c or i ent at i on as a coor di nat e of t he hi st ogr ammaxi mum. Af t er t hat t he f unct i on cal cul at es t he shi f t r el at i ve t o t he basi c or i ent at i on as a wei ght ed sumof al l or i ent at i on vect or s: t he mor e r ecent i s t he mot i on, t he gr eat er i s t he wei ght . The r esul t ant angl e i s a ci r cul ar sumof t he basi c or i ent at i on and t he shi f t . Background Subtraction This section describes basic functions that enable building statistical model of background for its further subtraction. In this chapter the term "background" stands for a set of motionless image pixels, that is, pixels that do not belong to any object, moving in front of the camera. This definition can vary if considered in other techniques of object extraction. For example, if a depth map of the scene is obtained, background can be determined as parts of scene that are located far enough from the camera. The simplest background model assumes that every background pixel brightness varies independently, according to normal distribution.The background characteristics can be calculated by accumulating several dozens of frames, as well as their squares. That means finding a sum of pixel values in the location S(x,y) and a sum of squares of the values Sq(x,y) for every pixel location. Then mean is calculated as , where N is the number of the frames collected, and standard deviation as .
After that the pixel in a certain pixel location in certain frame is regarded as belonging to a moving object if condition is met, where C is a certain constant. If C is equal to 3, it is the well-known "three sigmas" rule. To obtain that background model, any objects should be put away from the camera for a few seconds, so that a whole image fromthe camera represents subsequent background observation. The above technique can be improved. First, it is reasonable to provide adaptation of background differencing model to changes of lighting conditions and background scenes, e.g., when the camera moves or some object is passing behind the front object. The simple accumulation in order to calculate mean brightness can be replaced with running average. Also, several techniques can be used to identify moving parts of the scene and exclude them in the course of background information accumulation. The techniques include change detection, e.g., via cvAbsDi f f with cvThr eshol d, optical flow and, probably, others. Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 29 - The functions from the section (See Motion Analysis and Object Tracking Reference) are simply the basic functions for background information accumulation and they can not make up a complete background differencing module alone.
Thresholdi ng This section describes threshold functions group. Thresholding functions are used mainly for two purposes: masking out some pixels that do not belong to a certain range, for example, to extract blobs of certain brightness or color from the image; converting grayscale image to bi-level or black-and-white image. Usually, the resultant image is used as a mask or as a source for extracting higher-level topological information, e.g., contours (see Active Contours), skeletons (see Distance Transform), lines (see Hough Transform functions), etc. Generally, threshold is a determined function t(x,y) on the image:
The predicate function f(x,y,p(x,y)) is typically represented as g(x,y) < p(x,y) < h(x,y), where g and h are some functions of pixel value and in most cases they are simply constants. There are two basic types of thresholding operations. The first type uses a predicate function, independent from location, that is, g(x,y) and h(x,y)are constants over the image. However, for concrete image some optimal, in a sense, values for the constants can be calculated using image histograms (see Histogram) or other statistical criteria (see Image Statistics). The second type of the functions chooses g(x,y) and h(x,y)depending on the pixel neigborhood in order to extract regions of varying brightness and contrast. The functions, described in this chapter, implement both these approaches. They support single-channel images with depth I PL_DEPTH_8U, I PL_DEPTH_8S or I PL_DEPTH_32F and can work in-place. Threshold Applies fi xed-level threshold to array elements voi d cvThr eshol d( const CvAr r * sr c, CvAr r * dst , doubl e t hr eshol d, doubl e max_val ue, i nt t hr eshol d_t ype ) ; sr c Source array (single-channel, 8-bit of 32-bit floating point). dst Destination array; must be either the same type as sr c or 8-bit. t hr eshol d Threshold value. max_val ue Maximum value to use with CV_THRESH_BI NARY and CV_THRESH_BI NARY_I NV thresholding types. t hr eshol d_t ype Thresholding type (see the discussion) The function cvThr eshol d applies fixed-level thresholding to single-channel array. The function is typically used to get bi-level (binary) image out of grayscale image (cvCmpS could be also used for this purpose) or for removing a noise, i.e. filtering out pixels with too small or too large values. There are several types of thresholding the function supports that are determined by t hr eshol d_t ype: Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 30 -
t hr eshol d_t ype=CV_THRESH_BI NARY: dst ( x, y) = max_val ue, i f sr c( x, y) >t hr eshol d 0, ot her wi se
t hr eshol d_t ype=CV_THRESH_BI NARY_I NV: dst ( x, y) = 0, i f sr c( x, y) >t hr eshol d max_val ue, ot her wi se
t hr eshol d_t ype=CV_THRESH_TRUNC: dst ( x, y) = t hr eshol d, i f sr c( x, y) >t hr eshol d sr c( x, y) , ot her wi se
t hr eshol d_t ype=CV_THRESH_TOZERO: dst ( x, y) = sr c( x, y) , i f sr c( x, y) >t hr eshol d 0, ot her wi se
t hr eshol d_t ype=CV_THRESH_TOZERO_I NV: dst ( x, y) = 0, i f sr c( x, y) >t hr eshol d sr c( x, y) , ot her wi se And this is the visual description of thresholding types:
Umbralizacin/binarizacin de una imagen: void cvThreshold (const CvArr* src, CvArr* dst, double threshold, double maxValue, int thresholdType) Umbraliza la imagen segn el mtodo dado en thresholdType. y el umbral es threshold. P.ej., CV_THRESH_BINARY para binarizar: C(x,y):=si A(x,y) >threshold entonces maxValue sino 0 La umbralizacin se hace con un valor constante.
OPERACIONES LOCALES Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 31 - La imagen se transforma en funcin de los niveles de gris de cada pxel considerado y de los de su entorno. A estas operaciones se las conoce comnmente como filtros. Se clasifican, a su vez, segn la funcin de transformacin, en: Lineales. La imagen resultante es la convolucin de una imagen inicial con una funcin local denominada mscara. Esta mscara puede ser de dimensin cualquiera y puede estar centrada en cualquier pxel. En las siguientes figuras se muestra el mecanismo de convolucin de una imagen con una mscara de 3x3 centrada en el pxel de posicin central.
OPERADOR DE SOBEL. Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 32 -
Accin conjunta de las mscaras:
El filtro de Sobel permite calcular derivadas conjuntas en X e Y, derivadas segundas, terceras, etc. Realmente, en dos o ms dimensiones, en lugar de la derivadatiene ms sentido el concepto de gradiente.
El gradiente indica la direccin de mximavariacin de una funcin (en 2D, la mxima pendiente).
VECTOR GRADIENTE. Se define el vector gradiente de una funcin f(x,y) como:
Magnitud
ngulo o argumento.
El gradiente en un punto es un vector (u, v): ngulo: direccin de mxima variacin. Magnitud: intensidad de la variacin.
El gradiente est relacionado con las derivadas: u =Derivada en X del punto Dx (por ejemplo, con un filtro de Sobel) v =Derivada en Y del punto Dy (por ejemplo, con un filtro de Sobel) Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 33 -
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 34 -
MOTORES PASO A PASO
Introduccin: Se define un motor como aquella mquina elctrica rotativa que es capaz de transformar energa elctrica en energa mecnica. Los denominados motores paso a paso, son un caso bastante particular dentro de los motores en general. La seal elctrica de alimentacin no es ni c.c. ni c.a. como en otros casos, sino un tren de pulsos que se suceden con una secuencia, previamente definida, a cada una de las bobinas que componen el estator. Cada vez que a alguna de estas bobinas se les aplica un pulso, el motor se desplaza un paso, y queda fijo en esa posicin. Dependiendo de las caractersticas constructivas del motor este paso puede ser desde 90 hasta incluso 0,9. Por lo tanto, si somos capaces de mover el motor en pequeos pasos, esto nos va a permitir controlar su posicin, con mayor o menor precisin dependiendo del avance de cada paso. Adems, variando la frecuencia con la que se aplican los pulsos, tambin estaremos variando la velocidad con que se mueve el motor, lo que nos permite realizar un control de velocidad. Por ltimo si invertimos la secuencia de los pulsos de alimentacin aplicados a las bobinas, estaremos realizando una inversin en el sentido de giro del motor. Resumiendo, definimos el motor paso a paso, como aquel motor cuyas bobinas del estator son alimentadas mediante trenes de pulsos, con una determinada frecuencia, y que permite:
Controlar posicin. Controlar velocidad. Controlar sentido de giro.
Debido a las caractersticas anteriores se pueden encontrar motores paso a paso en robtica, control de discos duros, flexibles, unidades de CDROM o de DVD e impresoras, en sistemas informticos, manipulacin y posicionamiento de herramientas y piezas en general. Algn inconveniente de los motores PaP es que presentan una velocidad angular limitada. Dicha limitacin surge ya que para realizar un paso, el motor requiere un tiempo para alcanzar la posicin de equilibrio. Si dicho tiempo no se respeta (si la frecuencia de los pulsos es demasiado elevada) perderamos el control sobre l, es decir, se movera en forma de vaivn, no se movera, o incluso podra moverse en sentido contrario al deseado.
TIPOS DE MOTORES PaP Desde el punto de vista constructivo existen tres tipos de motores PaP:
1. De imn permanente: es el tipo de motores PaP ms utilizado, sus caractersticas constructivas son las siguientes: El rotor est formado por un imn permanente, en forma de disco, y en cuya superficie se encuentran mecanizados un determinado nmero de dientes. El estator tienen forma cilndrica, y en su interior se encuentran diversos bobinados, que al ser alimentados secuencialmente generan un campo magntico giratorio. Como resultado de las fuerzas de atraccin-repulsin, el rotor se orientar dentro de este campo magntico giratorio, lo que provocar su movimiento. La conmutacin en la alimentacin de las bobinas tiene queser manejada por un controlador externamente.
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 35 -
2. De reluctancia variable: El estator es similar al caso anterior. El rotor no es un imn permanente, sino que est formado por un ncleo de hierro dulce, e igualmente con dientes tallados a lo largo de su superficie. En este tipo de motor, al alimentar una de las bobinas del estator, se crea un campo magntico. En estas condiciones, el rotor se orienta hacia aquella posicin en la que la reluctancia que presenta el circuito es mnima. Esta posicin ser aquella en la que el entrehierro sea el ms pequeo posible. Al cambiar la alimentacin a otra de las bobinas, el punto de mnima reluctancia tambin cambia, con lo cual el rotor gira de nuevo.
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 36 -
Funcionamiento de un motor paso a paso de reluctancia variable
3. Hbridos: este tipo de motores son una mezcla de los dos anteriores. El rotor est formado por una serie de anillos de acero dulce que tienen en su superficie un n de dientes ligeramente distinto a los del estator. Dichos anillos estn montados sobre un eje que es un imn permanente.
MOTORES PaP DE IMN PERMANENTE Nos centramos en este tipo de motores, ya que como se ha citado anteriormente son los ms utilizados. Los motores de imn permanente pueden ser clasificados en funcin del sentido de la intensidad que recorre los bobinados en dos grupos:
1. MOTORES PAP BIPOLARES: estn formados por dos bobinas, y la intensidad que circula por ellas invierte su sentido sucesivamente (de ah surge el nombre de bipolares). Se pueden reconocer externamente porque presentan cuatro conductores, uno para cada extremo de una bobina.
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 37 - 2. MOTORES PAP UNIPOLARES: en este caso el estator est formado por dos bobinas con tomas intermedias, lo que equivale a cuatro bobinas. Las tomas intermedias de las dos bobinas pueden estar interconectadas en el interior o no. Externamente se apreciarn cinco conductores en el primer caso, y seis en el segundo. Laforma de alimentar este motor consiste en poner a masa la toma centrar eir aplicando segn una secuencia determinada pulsos de valor +V a un extremo de la bobina y al otro. De tal manera que la intensidad que circula por cada media bobina siempre lo hace en el mismo sentido, por eso se denominan unipolares.
PRINCIPIO FUNCIONAMIENTO El principio de funcionamiento de los motores PaP de imn permanente, como ya se ha citado anteriormente, est basado en las fuerzas de atraccin-repulsin que experimentan los cuerpos sometidos a un campo magntico.
MOTOR BIPOLAR Si aplicamos intensidad a ambas bobinas, de la manera que indica en la figura A, el rotor girar hasta la posicin indicada en dicha figura. Si se invierte el sentido de la intensidad aplicada a la bobina de terminales AB, el campo magntico variar, y el rotor girar de nuevo orientndose ahora de la manera mostradaen la figura B. Se observa que el motor se ha desplazado un paso (90). Invirtiendo sucesivamente el sentido de la corriente en ambas bobinas, obtendremos el giro completo del motor, como se muestra en la siguiente figura:
A B Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 38 -
A continuacin se detalla la secuencia de excitacin para el funcionamiento de un motor bipolar en modo paso completo.
Paso A B C D 1 +V -V +V -V 2 -V +V +V -V 3 -V +V -V +V 4 +V +V -V +V
Como cada vez que se aplica un pulso distinto a la entrada del motor, ste gira un paso completo se dice que est funcionando en modo paso completo. En este caso el paso es de 90, demasiado grande para poder realizar ningn tipo de control. Para aumentar la resolucin, se tienen varias opciones. La ms sencilla de todas y queno necesita un cambio constructivo del motor, consiste en cambiar la secuencia de alimentacin. En modo de funcionamiento de paso completo, las bobinas nunca quedan sin alimentacin. Pues bien, si entre cada cambio en la tensin de alimentacin de una bobina, esta se deja sin alimentar, podemos conseguir una posicin del rotor intermedia entre dos pasos. A esta forma de funcionamiento se le denomina medio paso. Las distintas posiciones por las que pasa el rotor, as como las polaridades de las bobinas del estator, se pueden apreciar en las siguientes figuras:
D Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 39 -
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 40 - A continuacin se detalla la secuencia de excitacin para el funcionamiento de un motor bipolar en modo medio paso.
MOTORES UNIPOLARES Al igual que en los motores bipolares, encontramos dos modos de funcionamiento, en paso completo y en medio paso.
1. Paso completo Las bobinas se van alimentando de dos en dos, siempre teniendo en cuenta, que no pueden estar alimentadas simultneamente las dos partes de una misma bobina (A y B C y D). El paso en este caso equivale a 90.
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 41 -
A continuacin se muestra la secuencia de excitacin de bobinas para el funcionamiento de un motor unipolar en modo paso completo.
Paso Comn A B C D 1 Masa +V 0 +V 0 2 Masa 0 +V +V 0 3 Masa 0 +V 0 +V 4 Masa +V 0 0 +V
2. Medio paso Igual que con los motores bipolares, se puede conseguir una resolucin mayor si entre paso y paso dejamos una bobina sin alimentar. A continuacin se muestra la secuencia de excitacin de bobinas para el funcionamiento de un motor unipolar en modo medio paso.
Paso Comn A B C D 1 Masa +V 0 +V 0 Masa 0 0 +V 0 2 Masa 0 +V +V 0 Masa 0 +V 0 0 3 Masa 0 +V 0 +V Masa 0 0 0 +V 4 Masa +V 0 0 +V Masa +V 0 0 0 5 Masa +V 0 +V 0
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 42 -
MOTOR Y PUERTO PARALELO
Configuracin del puerto para Dev-C++ El problema de la configuracin del puerto paralelo radica en que el Sistema Operativo XP lo bloquea y no puede ser accedido por el usuario. Por lo tanto para solucionar este inconveniente debe copiarse el archivo inpout32.dll en el directorio C:\Windows\System32. A continuacin mostramos un programa con el cual se puede comprobar el correcto funcionamiento del puerto:
#i ncl ude <st di o. h> #i ncl ude <coni o. h> #i ncl ude <wi ndows. h>
/ / pr ot ot ype ( f unct i on t ypedef ) f or DLL f unct i on I np32:
t ypedef shor t _st dcal l ( *i npf uncPt r ) ( shor t por t addr ) ; t ypedef voi d _st dcal l ( *oupf uncPt r ) ( shor t por t addr , shor t dat um) ;
i nt mai n( voi d) { HI NSTANCE hLi b; i npf uncPt r i np32; oupf uncPt r oup32;
shor t x; i nt i , j , h;
/ / car gamos l a l i br er a par a poder usar l os puer t os
hLi b = LoadLi br ar y( "i npout 32. dl l " ) ; i f ( hLi b == NULL) {pr i nt f ( "LoadLi br ar y Fai l ed. \ n") ; r et ur n - 1; }
/ / Compr obamos en f unci onami ent o de l as f unci ones
i np32 = ( i npf uncPt r ) Get Pr ocAddr ess( hLi b, "I np32") ; i f ( i np32 == NULL) {pr i nt f ( "Get Pr ocAddr ess f or I np32 Fai l ed. \ n") ; r et ur n - 1; }
oup32 = ( oupf uncPt r ) Get Pr ocAddr ess( hLi b, "Out 32") ; i f ( oup32 == NULL) {pr i nt f ( "Get Pr ocAddr ess f or Oup32 Fai l ed. \ n") ; r et ur n - 1; }
/ / Escr i bi endo el puer t o par al el o
i =0x378; x=0x00; f or ( j =1; j <5000; j ++) {i f ( x==0x00) {( oup32) ( i , x) ; x=0x02; f or ( h=1; h<5000000; h++) ; } el se {( oup32) ( i , x) ; x=0x00; f or ( h=1; h<5000000; h++) ; } } get ch( ) ; Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 43 - } Driver Motor paso a paso:
Para el control del motor paso a paso se diseo un Driver, el cual posee 2 entradas de control para comandar el motor. Una de ellas comanda la direccin o sentido de movimiento y la otra se encarga de variar la velocidad mediante un tren de pulsos de frecuencia variable. Adems estas entradas se encuentran opto-aisladas con el fin de brindar proteccin al puerto paralelo del ordenador, que es el encargado de brindar dichas seales. Es decir separar el circuito de potencia del circuito de control. Esta opto-aislamiento se logra mediante el circuito integrado 4N25. Luego estas seales son tomadas por el controlador SAA1027 el cual genera una secuencia de salida dada por la tabla siguiente:
La secuencia de salida es usada para producir el disparo de Transistores PNP encargados de excitar las bobinas del motor. El esquemtico es el siguiente: 24v Puerto paralelo bit1 GND bit2 SAA1027 2 4 3 15 5 12 13 14 11 6 8 9 PNP 12v bobina N U1 4N25 1 6 2 5 4 U2 4N25 1 6 2 5 4
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 44 - Interconexin de los dispositivos: El control del motor se realiza mediante dos bits, como ya fue descripto anteriormente, correspondiendo el Bit0 al sentido de giro (conectado a la salida Data 0), y el bit1 a la velocidad de giro (conectado a la salida Data 1). A continuacin puede observarse grficamente la configuracin de un puerto paralelo.
Por otro lado la toma de seal de los sensores se realiz mediante las entradas de datos 10 (ACK) y 11 (BUSY).
Puerto Paralelo
Bit0 bit1 Bit10 Bit11
Controlador del motor Paso a Paso
Motor
Finales de Carrera Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 45 -
PROGRAMA PRINCIPAL Visualizacion en pantalla Definiciones Globales de Variables y Estructuras Inicializacion Para el uso del puerto Paralelo Reposicionamiento de la camara Mensaje de Chequeo de la integridad de los sensores INICIO Verificacion de sensores Verificacion de sensores Posicionamiento Inicial de la Camara Inicializacion de Captura de imagenes y ventana de visualizacion Funcion Actualiza MHI
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 46 - Inicializacion de varibles Funcion Actualiza MHI Inicio o nuevo posicionamiento Actulizar tamaos y/o estructuras de datos Conversion de nuevo frame a escala de grises y almacenamiento en Buffer Obtener diferencia de imagenes Umbralizacion para obtencion de silueta valida Actualizacion MHI Calculo gradientes de movimiento Calculo Orienteacion Global Verificacion Sensores Movimiento de la Camara Fin
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 47 - #i ncl ude "cv. h" #i ncl ude "hi ghgui . h" #i ncl ude <t i me. h> #i ncl ude <st di o. h> #i ncl ude <coni o. h> #i ncl ude <wi ndows. h>
I pl I mage **buf f er = 0; i nt i ni ci o = 1; i nt ul t i mo = 0; i nt Posi ci ono=0; i nt pasos=0, Posi ci onami ent o, PasoAct ;
i nt i , j , t , i o=0x378, i i =0x379; shor t x, y, a;
/ / par met r os de capt ur a ( en segundos) const doubl e MHI _DURACI ON = 1, MAX_TI EMPO_DELTA = 0. 5, MI N_TI EMPO_DELTA = 0. 05;
/ / numer o de est r uct ur as en buf f er usados par a cr ear si l uet as const i nt N = 3;
/ / I mgenes t empor ar i as I pl I mage*mhi =0, *or i ent aci n=0, *mascar a=0, *si l uet a=0;
/ / def i ni ci n del pr ot ot i po de l a f unci n I np32 ( t i po de def i ni ci n) : t ypedef shor t _st dcal l ( *i npf uncPt r ) ( shor t por t addr ) ; t ypedef voi d _st dcal l ( *oupf uncPt r ) ( shor t por t addr , shor t dat um) ;
voi d act ual i zar _mhi ( I pl I mage* ent r ada ) { i nt j , k, i ndi ce2, umbr al =30, i ndi ce1; doubl e cuent a, angul o, magni t ud, l ado=0; doubl e t i mest amp = ( doubl e) cl ock( ) / CLOCKS_PER_SEC; / / t omar t i empo act ual en seg. CvPoi nt cent r o; CvScal ar col or ; CvRect comp_r ect ; CvSi ze Si ze = cvSi ze( ent r ada- >wi dt h, ent r ada- >hei ght ) ; / / t omar act ual t amao
/ / / / / / / / / / Def i ni ci ones par a el uso del puer t o/ / / / / / / / / / HI NSTANCE hLi b; i npf uncPt r i np32; oupf uncPt r oup32;
/ / car gamos l a l i br er a par a poder usar l os puer t os/ / hLi b = LoadLi br ar y( "i npout 32. dl l ") ; i np32 = ( i npf uncPt r ) Get Pr ocAddr ess( hLi b, "I np32") ; oup32 = ( oupf uncPt r ) Get Pr ocAddr ess( hLi b, "Out 32") ;
/ / Col oca i mgenes en el comi enzo o r ecambi a si el t amao de l a est r uct ur a a cambi ado o si se posi ci ono
i f ( ! mhi | | mhi - >wi dt h ! = Si ze. wi dt h | | mhi - >hei ght ! = Si ze. hei ght | | Posi ci ono==1 ) { i f ( buf f er == 0 ) { buf f er = ( I pl I mage**) mal l oc( N*si zeof ( buf f er [ 0] ) ) ; / / mal l oc r eser va memor i a memset ( buf f er , 0, N*si zeof ( buf f er [ 0] ) ) ; / / en t i empo de ej ecuci n devuel ve } / / punt er o a l a pr i mer posi ci n / / La i ni ci al i za con cer o f or ( i = 0; i < N; i ++ ) / / N numer o de i magenes en buf f er { Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 48 - cvRel easeI mage( &buf f er [ i ] ) ; / / Li ber a cont eni do de buf f er buf f er [ i ] = cvCr eat eI mage( Si ze, I PL_DEPTH_8U, 1 ) ; / / cr ea i magen del t amao cvZer o( buf f er [ i ] ) ; } cvRel easeI mage( &mhi ) ; / / Li ber a l os cont eni dos de: cvRel easeI mage( &or i ent aci n ) ; cvRel easeI mage( &mascar a ) ;
mhi = cvCr eat eI mage( Si ze, I PL_DEPTH_32F, 1 ) ; / / cr ea i mgenes aux del t amao act ual cvZer o( mhi ) ; / / bor r a MHI en el comi enzo or i ent aci on = cvCr eat eI mage( Si ze, I PL_DEPTH_32F, 1 ) ; mascar a = cvCr eat eI mage( Si ze, I PL_DEPTH_8U, 1 ) ; Posi ci ono=0; i ni ci o=1; angul o=90; }
cvCvt Col or ( ent r ada, buf f er [ ul t i mo] , CV_BGR2GRAY ) ;
i f ( ul t i mo==2) i ni ci o=0;
i ndi ce1 = ul t i mo; i ndi ce2 = ( ul t i mo + 1) %N; ul t i mo = i ndi ce2;
si l uet a = buf f er [ i ndi ce2] ; cvAbsDi f f ( buf f er [ i ndi ce1] , buf f er [ i ndi ce2] , si l uet a ) ;
cvThr eshol d( si l uet a, si l uet a, umbr al , 1, CV_THRESH_BI NARY ) ;
cvUpdat eMot i onHi st or y( si l uet a, mhi , t i mest amp, MHI _DURACI ON ) ;
cvCal cMot i onGr adi ent ( mhi , mascar a, or i ent aci n, MAX_TI EMPO_DELTA, MI N_TI EMPO_DELTA, 3 ) ;
comp_r ect = cvRect ( 0, 0, Si ze. wi dt h, Si ze. hei ght ) ; col or = CV_RGB( 255, 255, 255) ; magni t ud = 100;
Angul o = cvCal cGl obal Or i ent at i on( or i ent aci n, mascar a, mhi , t i mest amp, MHI _DURACI ON) ; Angul o = 360. 0 - Angul o;
/ / Chequea par a el caso de un pequeo movi mi ent o cuent a = cvNor m( si l uet a, 0, CV_L1, 0 ) ; i f ( cuent a < comp_r ect . wi dt h*comp_r ect . hei ght * 0. 15) r et ur n;
i f ( i ni ci o==1) r et ur n;
/ / Di buj a f l echa i ndi cando l a di r ecci n cent r o = cvPoi nt ( ( comp_r ect . x + comp_r ect . wi dt h/ 2) , ( comp_r ect . y + comp_r ect . hei ght / 2) ) ;
cvLi ne( ent r ada, cent r o, cvPoi nt ( cvRound( cent r o. x + magni t ud*cos( Angul o*CV_PI / 180) ) , cvRound( cent r o. y ) ) , col or , 3, CV_AA, 0 ) ;
/ / / / / / / / / / / movi mi ent o del mot or / / / / / / / / / / / y = ( i np32) ( i i ) ;
l ado=cos( angul o*CV_PI / 180) ;
i f ( ( a^y) ==0x20) Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 49 - { whi l e ( PasoAct ! =Posi ci onami ent o) { x=0x00; ( oup32) ( i o, x) ; / / der echa f or ( t =1; t <1000000; t ++) ; x=0x02; ( oup32) ( i o, x) ; f or ( t =1; t <1000000; t ++) ; PasoAct - - ; } Posi ci ono=1; r et ur n; } i f ( ( a^y) ==0x80) { whi l e ( PasoAct ! =Posi ci onami ent o) { x=0x01; ( oup32) ( i o, x) ; / / i zqui er da f or ( t =1; t <1000000; t ++) ; x=0x03; ( oup32) ( i o, x) ; f or ( t =1; t <1000000; t ++) ; PasoAct ++; } Posi ci ono=1; r et ur n; }
i f ( l ado>0) { x=0x00; ( oup32) ( i o, x) ; / / der echa f or ( t =1; t <500000; t ++) ; x=0x02; ( oup32) ( i o, x) ; f or ( t =1; t <500000; t ++) ; PasoAct - - ;
}
i f ( l ado<0) { x=0x01; ( oup32) ( i o, x) ; / / i zqui er da f or ( t =1; t <500000; t ++) ; x=0x03; ( oup32) ( i o, x) ; f or ( t =1; t <500000; t ++) ; PasoAct ++;
} }
mai n( ) { / / / / / / / / / / Def i ni ci ones par a el uso del puer t o/ / / / / / / / / / / / / / / / / / / / / / / / / / / HI NSTANCE hLi b; i npf uncPt r i np32; oupf uncPt r oup32; / / car gamos l a l i br er i a par a poder usar l os puer t os/ / hLi b = LoadLi br ar y( "i npout 32. dl l " ) ; i np32 = ( i npf uncPt r ) Get Pr ocAddr ess( hLi b, "I np32") ; oup32 = ( oupf uncPt r ) Get Pr ocAddr ess( hLi b, "Out 32") ; / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
/ / / / / / / / / / / / / / / / / / / / / / / / / Posi ci onami ent o i ni ci al / / / / / / / / / / / / / / / / / / / / / / / / / / a = ( i np32) ( i i ) ; y = ( i np32) ( i i ) ;
I pl I mage* f ot = cvLoadI mage ( "Di buj o. j pg" ) ; cvNamedWi ndow( "Er r or ", 0) ; Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 50 - f or ( ; ; ) {cvShowI mage( "Er r or ", f ot ) ; cvWai t Key( 10) ; } get ch( ) ;
i f ( ( y&0x80) ==0x80) { f or ( j =0; j <4; j ++) { x=0x01; ( oup32) ( i o, x) ; / / i zqui er da f or ( t =1; t <1000000; t ++) ; x=0x03; ( oup32) ( i o, x) ; f or ( t =1; t <1000000; t ++) ; }
get ch( ) ; y = ( i np32) ( i i ) ;
i f ( ( y&0x80) ==0x80) { I pl I mage* f ot = cvLoadI mage ( "Di buj o. j pg") ; cvNamedWi ndow( "Er r or ", 0) ; f or ( ; ; ) {cvShowI mage( "Er r or ", f ot ) ; cvWai t Key( 10) ; } } a = ( i np32) ( i i ) ; }
y=~y;
i f ( ( y&0x20) ==0x20) { f or ( j =0; j <4; j ++) { x=0x00; ( oup32) ( i o, x) ; / / der echa f or ( t =1; t <1000000; t ++) ; x=0x02; ( oup32) ( i o, x) ; f or ( t =1; t <1000000; t ++) ; } y = ( i np32) ( i i ) ; y=~y; get ch( ) ; i f ( ( y&0x20) ==0x20) { I pl I mage* f ot = cvLoadI mage ( "Di buj o. j pg") ; cvNamedWi ndow( "Er r or ", 0) ; f or ( ; ; ) {cvShowI mage( "Er r or ", f ot ) ; cvWai t Key( 10) ; } get ch( ) ; } a = ( i np32) ( i i ) ; }
whi l e ( ( a^y) ! =0x80) { x=0x00; ( oup32) ( i o, x) ; / / der echa f or ( t =1; t <1000000; t ++) ; x=0x02; ( oup32) ( i o, x) ; f or ( t =1; t <1000000; t ++) ; y = ( i np32) ( i i ) ; }
whi l e ( ( a^y) ! =0x20) { x=0x01; Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 51 - ( oup32) ( i o, x) ; / / i zqui er da f or ( t =1; t <1000000; t ++) ; x=0x03; ( oup32) ( i o, x) ; f or ( t =1; t <1000000; t ++) ; pasos++; y = ( i np32) ( i i ) ; } Posi ci onami ent o= pasos/ 2; PasoAct = pasos;
whi l e ( PasoAct ! =Posi ci onami ent o) { x=0x00; ( oup32) ( i o, x) ; / / i zqui er da f or ( t =1; t <1000000; t ++) ; x=0x02; ( oup32) ( i o, x) ; f or ( t =1; t <1000000; t ++) ; PasoAct - - ; } / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
CvCapt ur e* capt ur a = cvCapt ur eFr omCAM( - 1) ; I pl I mage* i magen = cvQuer yFr ame( capt ur a ) ; CvSi ze Si ze = cvSi ze( i magen- >wi dt h, i magen- >hei ght ) ; / / t omar act ual t amao de l a est r uct ur a
cvNamedWi ndow( "SI GUI ENDO OBJ ETO", 0 ) ;
f or ( ; ; ) { I pl I mage* i magen = cvQuer yFr ame( capt ur a ) ; act ual i zar _mhi ( i magen ) ; cvShowI mage( "SI GUI ENDO OBJ ETO" , i magen ) ; cvWai t Key( 10) ; } cvRel easeCapt ur e( &capt ur a ) ; cvDest r oyWi ndow( " SI GUI ENDO OBJ ETO" ) ; }
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 52 - FUNCIONES UTILIZADAS cvNamedWindow Crea ventana i nt cvNamedWi ndow( const char * name, i nt f l ags ) ;
name Nombre de la ventana la cual es usada como identificador y aparece en el encabezado de la ventana f l ags Bandera de Windows. Actualmente la nica bandera soportada es CV_WI NDOW_AUTOSI ZE. Si esto es puesto, el tamao de la ventana es automticamente ajustado a la imagen (ver cvShowImage), el usuario no puede cambiar el tamao de la ventana manualmente.
La funcin cvNamedWi ndow crea una ventana la cual puede ser usada como lugar para imgenes y barras. cvDestroyWindow Destruye una ventana voi d cvDest r oyWi ndow( const char * name ) ;
name Nombre de la ventana a ser destruida.
cvShowImage Muest ra la imagen en una ventana especfica voi d cvShowI mage( const char * name, const CvAr r * i mage ) ;
name Nombre de la ventana. i mage Imagen a ser mostrada.
Si la ventana fue creada con la bandera CV_WI NDOW_AUTOSI ZE entonces la imagen es mostrada con su tamao original, de otra manera la imagen es escalada para ajustarse a la ventana. cvWaitKey Espera a que se presi one una tecla i nt cvWai t Key( i nt del ay=0 ) ; del ay Delay in milliseconds.
La funcin cvWai t Key espera por un evento de teclaindefinidamente (delay<=0) o por "delay" milisegundos. Devuelve el cdigo de la tecla presionada o -1 si no se presiona antes del tiempo especificado CvCapture Est ructura de captura de Video t ypedef st r uct CvCapt ur e CvCapt ur e;
La estructura CvCapture no tiene una interfaz pblica y es solamente usada como parmetro para funciones de video captura.
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 53 - cvCaptureFromCAM Ini ci al iza captura de video desde Camara CvCapt ur e* cvCapt ur eFr omCAM( i nt i ndex ) ;
i ndex ndice de la cmara a ser usada. Si hay solo una cmara o si no es asunto que cmara usar -1 debe ser pasado. La funcin cvCapt ur eFr omCAM coloca e inicializa la estructura CvCapture para leer el flujo de video desde la cmara. Actualmente dos interfaz de cmara son usada en Windows: Video for Windows (VFW) and Matrox Imaging Library (MIL); y 2 sobre Linux: V4L and FireWire (IEEE1394).
cvQueryFrame Graba y retorna un f rame desde camera o archivo I pl I mage* cvQuer yFr ame( CvCapt ur e* capt ur e ) ; capt ur e Estructura de video captura.
La funcin cvQuer yFr ame graba un frame desde camera o archivo de video, descomprimido y retorna esto.
cvReleaseCapture Libera la estructura CvCapture voi d cvRel easeCapt ur e( CvCapt ur e** capt ur e ) ; capt ur e Puntero a la estructura de video captura.
La funcin cvRel easeCapt ur e libera la estructura CvCapture inicializada por cvCaptureFromFile o cvCaptureFromCAM. SetZero Borra el array voi d cvSet Zer o( CvAr r * ar r ) ; #def i ne cvZer o cvSet Zer o ar r array a ser borrado.
En caso de arrays densos (CvMat, CvMatND or IplImage) cvZero(array) es equivalente a cvSet(array,cvScalarAll(0),0), en caso de arrays poco denso todos los elementos son borrados.
CvRect offset y tamao de un rectngulo t ypedef st r uct CvRect { i nt x; / * x- coor di nat e of t he l ef t - most r ect angl e cor ner [ s] */ i nt y; / * y- coor di nat e of t he t op- most or bot t om- most r ect angl e cor ner [ s] */ i nt wi dt h; / * wi dt h of t he r ect angl e */ i nt hei ght ; / * hei ght of t he r ect angl e */ } CvRect ; / * t he const r uct or f unct i on */ i nl i ne CvRect cvRect ( i nt x, i nt y, i nt wi dt h, i nt hei ght ) ;
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 54 -
CvSize Tamao de un rectngul o en pixel t ypedef st r uct CvSi ze { i nt wi dt h; / * wi dt h of t he r ect angl e */ i nt hei ght ; / * hei ght of t he r ect angl e */ } CvSi ze; / * t he const r uct or f unct i on */ i nl i ne CvSi ze cvSi ze( i nt wi dt h, i nt hei ght ) ;
CreateImage Crea l a cabeza y col oca datos I pl I mage* cvCr eat eI mage( CvSi ze si ze, i nt dept h, i nt channel s ) ;
si ze Ancho y alto de la imagen.
dept h Bit depth de los elementos de la imagen. Puede ser uno de: IPL_DEPTH_8U - unsigned 8-bit integers IPL_DEPTH_8S - signed 8-bit integers IPL_DEPTH_16U - unsigned 16-bit integers IPL_DEPTH_16S - signed 16-bit integers IPL_DEPTH_32S - signed 32-bit integers IPL_DEPTH_32F - single precision floating-point numbers IPL_DEPTH_64F - double precision floating-point numbers
channel s Numero de canales por elemento(pixel). Puede ser 1, 2, 3 or 4. Los canales son intercalados, por ejemplo la usual capa de datos de una imagen de color es: b0 g0 r0 b1 g1 r1 ... Si bien en general el formato IPL image puede almacenar imagen no intercaladas y OpenCV puede procesar esto, esta funcin puede crear imagen intercaladas solamente.
ReleaseImage Libera direccin y datos de la i magen voi d cvRel easeI mage( I pl I mage** i mage ) ; i mage doble puntero a la cabeza de la imagen.
AbsDiff Cal cula l a dif erenci a absol uta entre dos arrays voi d cvAbsDi f f ( const CvAr r * sr c1, const CvAr r * sr c2, CvAr r * dst ) ; sr c1 Primer array fuente. sr c2 Segundo array fuente. dst Array de destino. dst ( I ) c = abs( sr c1( I ) c - sr c2( I ) c ) . Todos los array deben tener el mismo tamao y tipo de datos.
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 55 -
Norm Cal cula norma absol uta del array, norma absol uta de di ferencia o norma relativa de diferenci a. doubl e cvNor m( const CvAr r * ar r 1, const CvAr r * ar r 2=NULL, i nt nor m_t ype=CV_L2, const CvAr r * mask=NULL ) ; ar r 1 Primer imagen fuente. ar r 2 Segunda imagen fuente. Si es NULL, la norma absoluta del ar r 1 es calculada, de otra manera la norma absoluta o relativa de ar r 1-ar r 2 es calculada. nor mType Tipo de norma, ver la discusin. mask Mascara opcional de operacin.
La funcin cvNor mcalcula la norma absoluta de ar r 1 si ar r 2 es NULL: nor m= | | ar r 1| | C = max I abs( ar r 1( I ) ) , si nor mType = CV_C nor m= | | ar r 1| | L1 = sum I abs( ar r 1( I ) ) , si nor mType = CV_L1 nor m= | | ar r 1| | L2 = sqr t ( sum I ar r 1( I ) 2 ) , si nor mType = CV_L2
Y la funcin calcula norma absoluta o relativa diferencia si ar r 2 es no NULL: nor m= | | ar r 1- ar r 2| | C = max I abs( ar r 1( I ) - ar r 2( I ) ) , i f nor mType = CV_C nor m= | | ar r 1- ar r 2| | L1 = sum I abs( ar r 1( I ) - ar r 2( I ) ) , i f nor mType = CV_L1 nor m= | | ar r 1- ar r 2| | L2 = sqr t ( sum I ( ar r 1( I ) - ar r 2( I ) ) 2 ) , i f nor mType = CV_L2 o nor m= | | ar r 1- ar r 2| | C / | | ar r 2| | C , i f nor mType = CV_RELATI VE_C nor m= | | ar r 1- ar r 2| | L1 / | | ar r 2| | L1 , i f nor mType = CV_RELATI VE_L1 nor m= | | ar r 1- ar r 2| | L2 / | | ar r 2| | L2 , i f nor mType = CV_RELATI VE_L2
La funcin Nor mdevuelve la norma calculada.
CvtColor Convi erte la imagen de un espaci o de col or a otro voi d cvCvt Col or ( const CvAr r * sr c, CvAr r * dst , i nt code ) ; sr c Fuente de 8-bit (8u), 16-bit (16u) o imagen de punto flotante de simple precisin (32f). dst La imagen de destino del mismo tipo de datos. El nmero de canales debe ser diferente. code operacin de conversin de color que puede ser especificada como: CV_<src_color_space>2<dst_color_space>constants (see below).
La funcin ignora col or Model y channel Seq fields of I pl I mage header, el espacio de color de la imagen fuente debe ser especificado correctamente (incluyendo orden de canales en caso del espacio RGB, ejemplo BGR toma formato 24-bit con capas B 0 G 0 R 0 B 1 G 1 R 1 ..., mientras RGB toma formato 24-bit con capas R 0 G 0 B 0 R 1 G 1 B 1 ...). El rango convencional de los valores de canales R,G,B es: 0..255 para 8-bit imgenes 0..65535 para 16-bit imgenes 0..1 para imgenes de punto flotante. Por supuesto, en caso de transformaciones lineales el rango puede ser arbitrario, pero con el fin de tomar correctos resultados en caso de transformaciones no lineales, la imagen de entrada debe ser escalada si es necesario. La funcin puede hacer las siguientes transformaciones: Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 56 - Transformations within RGB space like adding/removing alpha channel, reversing the channel order, conversion to/from 16-bit RGB color (R5:G6:B5 or R5:G5:B5) color, as well as conversion to/from grayscale using: RGB[ A] - >Gr ay: Y<- 0. 299*R + 0. 587*G + 0. 114*B Gr ay- >RGB[ A] : R<- Y G<- Y B<- Y A<- 0 RGB<=>CIE XYZ.Rec 709 with D65 white point (CV_BGR2XYZ, CV_RGB2XYZ, CV_XYZ2BGR, CV_XYZ2RGB): | X| | 0. 412453 0. 357580 0. 180423| | R| | Y| <- | 0. 212671 0. 715160 0. 072169| *| G| | Z| | 0. 019334 0. 119193 0. 950227| | B|
X, Y and Z cover t he whol e val ue r ange ( i n case of f l oat i ng- poi nt i mages Z may exceed 1) . RGB<=>YCrCb JPEG (a.k.a. YCC) (CV_BGR2YCr Cb, CV_RGB2YCr Cb, CV_YCr Cb2BGR, CV_YCr Cb2RGB) Y <- 0. 299*R + 0. 587*G + 0. 114*B Cr <- ( R- Y) *0. 713 + del t a Cb <- ( B- Y) *0. 564 + del t a
R <- Y + 1. 403*( Cr - del t a) G <- Y - 0. 344*( Cr - del t a) - 0. 714*( Cb - del t a) B <- Y + 1. 773*( Cb - del t a) ,
{ 128 f or 8- bi t i mages, wher e del t a = { 32768 f or 16- bi t i mages { 0. 5 f or f l oat i ng- poi nt i mages
Y, Cr and Cb cover t he whol e val ue r ange. RGB<=>HSV (CV_BGR2HSV, CV_RGB2HSV, CV_HSV2BGR, CV_HSV2RGB) / / I n case of 8- bi t and 16- bi t i mages / / R, G and B ar e conver t ed t o f l oat i ng- poi nt f or mat and scal ed t o f i t 0. . 1 r ange
V <- max( R, G, B) S <- ( V- mi n( R, G, B) ) / V i f V0, 0 otherwise
( G - B) *60/ S, i f V=R H <- 180+( B - R) *60/ S, i f V=G 240+( R - G) *60/ S, i f V=B
i f H<0 t hen H<- H+360
On out put 0V1, 0S1, 0H360. The val ues ar e t hen conver t ed t o t he dest i nat i on dat a t ype: 8- bi t i mages: V <- V*255, S <- S*255, H <- H/ 2 ( t o f i t t o 0. . 255) 16- bi t i mages ( cur r ent l y not suppor t ed) : V <- V*65535, S <- S*65535, H <- H 32- bi t i mages: H, S, V ar e l ef t as i s RGB<=>HLS (CV_BGR2HLS, CV_RGB2HLS, CV_HLS2BGR, CV_HLS2RGB) Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 57 - / / I n case of 8- bi t and 16- bi t i mages / / R, G and B ar e conver t ed t o f l oat i ng- poi nt f or mat and scal ed t o f i t 0. . 1 r ange V max <- max( R, G, B) V mi n <- mi n( R, G, B)
L <- ( V max + V mi n ) / 2
S <- ( V max - V mi n ) / ( V max + V mi n ) i f L < 0. 5 ( V max - V mi n ) / ( 2 - ( V max + V mi n ) ) i f L 0.5
( G - B) *60/ S, i f V max =R H <- 180+( B - R) *60/ S, i f V max =G 240+( R - G) *60/ S, i f V max =B
i f H<0 t hen H<- H+360
On out put 0L1, 0S1, 0H360. The val ues ar e t hen conver t ed t o t he dest i nat i on dat a t ype: 8- bi t i mages: L <- L*255, S <- S*255, H <- H/ 2 16- bi t i mages ( cur r ent l y not suppor t ed) : L <- L*65535, S <- S*65535, H <- H 32- bi t i mages: H, L, S ar e l ef t as i s RGB<=>CIE L*a*b* (CV_BGR2Lab, CV_RGB2Lab, CV_Lab2BGR, CV_Lab2RGB) / / I n case of 8- bi t and 16- bi t i mages / / R, G and B ar e conver t ed t o f l oat i ng- poi nt f or mat and scal ed t o f i t 0. . 1 r ange
/ / conver t R, G, B t o CI E XYZ | X| | 0. 412453 0. 357580 0. 180423| | R| | Y| <- | 0. 212671 0. 715160 0. 072169| *| G| | Z| | 0. 019334 0. 119193 0. 950227| | B|
X <- X/ Xn, wher e Xn = 0. 950456 Z <- Z/ Zn, wher e Zn = 1. 088754
L <- 116*Y 1/ 3 f or Y>0. 008856 L <- 903. 3*Y f or Y<=0. 008856
a <- 500*( f ( X) - f ( Y) ) + del t a b <- 200*( f ( Y) - f ( Z) ) + del t a wher e f ( t ) =t 1/ 3 f or t >0. 008856 f ( t ) =7. 787*t +16/ 116 f or t <=0. 008856 wher e del t a = 128 f or 8- bi t i mages, 0 f or f l oat i ng- poi nt i mages
On out put 0L100, - 127a127, - 127b127 The val ues ar e t hen conver t ed t o t he dest i nat i on dat a t ype: 8- bi t i mages: L <- L*255/ 100, a <- a + 128, b <- b + 128 16- bi t i mages ar e cur r ent l y not suppor t ed 32- bi t i mages: L, a, b ar e l ef t as i s Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 58 - RGB<=>CIE L*u*v* (CV_BGR2Luv, CV_RGB2Luv, CV_Luv2BGR, CV_Luv2RGB) / / I n case of 8- bi t and 16- bi t i mages / / R, G and B ar e conver t ed t o f l oat i ng- poi nt f or mat and scal ed t o f i t 0. . 1 r ange
/ / conver t R, G, B t o CI E XYZ | X| | 0. 412453 0. 357580 0. 180423| | R| | Y| <- | 0. 212671 0. 715160 0. 072169| *| G| | Z| | 0. 019334 0. 119193 0. 950227| | B|
L <- 116*Y 1/ 3 f or Y>0. 008856 L <- 903. 3*Y f or Y<=0. 008856
u' <- 4*X/ ( X + 15*Y + 3*Z) v' <- 9*Y/ ( X + 15*Y + 3*Z)
u <- 13*L*( u' - u n ) , wher e u n =0. 19793943 v <- 13*L*( v' - v n ) , wher e v n =0. 46831096
On out put 0L100, - 134u220, - 140v122 The val ues ar e t hen conver t ed t o t he dest i nat i on dat a t ype: 8- bi t i mages: L <- L*255/ 100, u <- ( u + 134) *255/ 354, v <- ( v + 140) *255/ 256 16- bi t i mages ar e cur r ent l y not suppor t ed 32- bi t i mages: L, u, v ar e l ef t as i s The above formulae for converting RGB to/from various color spaces have been taken from multiple sources on Web, primarily from Color Space Conversions ([Ford98]) document at Charles Poynton site. Bayer=>RGB (CV_Bayer BG2BGR, CV_Bayer GB2BGR, CV_Bayer RG2BGR, CV_Bayer GR2BGR, CV_Bayer BG2RGB, CV_Bayer GB2RGB, CV_Bayer RG2RGB, CV_Bayer GR2RGB) Bayer pattern is widely used in CCD and CMOS cameras. It allows to get color picture out of a single plane where R,G and B pixels (sensors of a particular component) are interleaved like this: R G R G R G B G B G R G R G R G B G B G R G R G R G B G B G
The output RGB components of a pixel are interpolated from 1, 2 or 4 neighbors of the pixel having the same color. There are several modifications of the above pattern that can be achieved by shifting the pattern one pixel left and/or one pixel up. The two letters C 1 and C 2
in the conversion constants CV_BayerC 1 C 2 2{BGR|RGB} indicate the particular pattern type - these are components from thesecond row, second and third columns, respectively. For example, the above pattern has very popular "BG" type. Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 59 ANALISIS DEL FUNCIONAMIENTO DEL PROGRAMA
Timestamp: Es una variable tipo float que contiene el tiempo en segundos desde que se inicio la aplicacion. Indice1 e Indice 2 : Variable del tipo entero para el correcto uso de las imagenes almacenadas en buffers. Cont : Variable del tipo entero agregada para tomar las primeras 15 imagenes desde que se inicia la aplicacion
En esta tabla se muestra como se van almacenando en buffer(el cual nos permite almacenar las ultimas 3 imagenes capturadas para el analisis ) las diferentes imagenes y como se genera la silueta valida en cada instante.Referirse al codigo fuente para el uso de estas variables las cuales son de tipo IPLIMAGE
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 60
Aqu se muestra una secuencia de 14 fotos
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 61
Aqu se muestra las siluetas obtenidas las cuales son el parmetro para el anlisis del movimiento
Proyecto Integrador TD III DETECCION Y SEGUIMIENTO DE OBJ ETOS CON OPENCV VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 62 - REFERENCIAS [1] Matrox Electronic Systems Ltd. Matrox Imaging Library (MIL). www.matrox.com/imaging/products/mil/home.cfm, 2003. [2] Open Source Initiative. The BSD License. www.opensource.org/licenses/bsd-license.php, 2003. [3] Open Source Initiative. The MIT License. www.opensource.org/licenses/mit-license.php, 2003. [4] Open Source Initiative. The Open Source Definition. www.opensource.org/docs/definition.php, 2003. [5] The Open Computer Vision Library. www.intel.com/software/products/opensource/libraries/cvfl.htm, 2003.