Deteccion y Seguimiento de Objetos

Embed Size (px)

Citation preview

UNIVERSIDAD TECNOLGICA NACIONAL FACULTAD REGIONAL SAN NICOLS INGENIERIA EN ELECTRNICATCNICAS DIGITALES III

PROYECTO INTEGRADOR DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCVIntegrantes:Calla, Bernardo Malespina, Gabriel Varela, Enzo Palomeque, Cristian

Profesores:Poblete, Felipe F. Gonzlez, Mariano

AO 2007

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

-1-

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

-2-

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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 para combatir 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.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

-3-

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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 pr ecio 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 de procesamiento 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 Microsoft Windows y Linux. 2. THE OPEN COMPUTER VISION LIBRARY El 13 de Junio del 2000, Intel Corporation anunci que estaba trabajando con un grupo de reconocidos investigadores en visin por c omputador 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).

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

-4-

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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 (escrito s 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 desacaran: interaccin hombre-mquina (HCI4); t 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, JPEG, TIFF, PxM, Sun Raster, etc.) y la captura de stream de video de capturadoras Matro x y cmaras/capturadoras con drivers VFW/WDM (la mayora del mercado); la creacin de ventanas para visualizar imgenes en ellas.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

-5-

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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 f e sustituida por IPP (Intel u 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 pr ocesamiento 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.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

-6-

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

-7-

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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:

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

-8-

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

En la solapa Directorios y dentro de ella Includes C:

En la solapa Directorios y dentro de ella Includes C++:

En la solapa Programas:

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

-9-

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

Verificar adems que la carpeta Bin este aadida al Path del sistema:

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 10 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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. Ejemplo. Tamaos tpicos: 320x240, 640x480, 800x600, 1024x768, ... 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: 19/11/2007 - 11 -

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

(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:

2 bits por pxel

3 bits por pxel

4 bits por pxel

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).

Canal R

Canal G

Canal B

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.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 12 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

CAPTURA Y DIGITALIZACION

Seal analgica

Seal digital

Escena

Cmara

Digitalizador

Ordenador

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. 19/11/2007 - 13 -

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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.0 5 W F D Y N O S O R P M A C K I U Q

Ruido fotnico: debido a la naturaleza cuntica de la luz. Es mayor con escasa iluminacin.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 14 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 15 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 16 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

La

siguiente rutina es la utilizada para mostrar la imagen que captura la cmara: "cv.h" "highgui.h"

#include #include #include #include

main() { CvCapture* capture = 0; capture = cvCaptureFromCAM(-1); if( !capture ) { fprintf(stderr,"No se puede inicializar la captura...\n"); return -1; } cvNamedWindow( "Imagen", 0 ); for(;;) { IplImage* frame = 0; int g; frame = cvQueryFrame( capture ); if( !frame ) break; cvShowImage( "Imagen", frame ); g = cvWaitKey(10); } cvReleaseCapture( &capture ); cvDestroyWindow("Que capo"); }

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 17 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 18 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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 - topleft 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, .

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 19 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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.

UpdateMotionHistoryUpdates motion history image by moving silhouette

void cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi, double timestamp, double duration );silhouette

Silhouette mask que tiene pixel distinto de cero donde el movimiento ocurre.mhi

Motion history image, que es actualizada por la funcin (single-channel, 32-bit floating-point)timestamp

Tiempo actual en milisegundos u otra unidad.duration

Mxima duracin de la secuencia de movimiento en la misma unidad que timestamp. La funcin cvUpdateMotionHistory actualiza motion history image como sigue: mhi(x,y)=timestamp if silhouette(x,y)!=0 0 if silhouette(x,y)=0 and mhi(x,y)threshold src(x,y), otherwise threshold_type=CV_THRESH_TOZERO: dst(x,y) = src(x,y), if src(x,y)>threshold 0, otherwise threshold_type=CV_THRESH_TOZERO_INV: dst(x,y) = 0, if src(x,y)>threshold

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 24 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

src(x,y), otherwise

Motion RepresentationFigure 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 time delta 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, time elapsing 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 Updates motion history image by moving silhouettevoid cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi, double timestamp, double duration );silhouette

Silhouette mask that has non-zero pixels where the motion occurs.mhi

Motion history image, that is updated by the function (single-channel, 32bit floating-point)timestamp

Current time in milliseconds or other units.duration

Maximal duration of motion track in the same units as timestamp. The function cvUpdateMotionHistory updates the motion history image as following: mhi(x,y)=timestamp 0 mhi(x,y) if silhouette(x,y)!=0 if silhouette(x,y)=0 and mhi(x,y)threshold src(x,y), otherwise threshold_type=CV_THRESH_TOZERO: dst(x,y) = src(x,y), if src(x,y)>threshold 0, otherwise threshold_type=CV_THRESH_TOZERO_INV: dst(x,y) = 0, if src(x,y)>threshold src(x,y), otherwise

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

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 30 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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 cual uiera y puede estar q centrada en cualquier pxel. En las siguientes fig uras se muestra el mecanismo d e convolucin de una imagen con una mscara de 3x3 centrada en el pxel de posicin central.

OPERADOR DE SOBEL.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 31 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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 derivada tiene ms sentido el concepto de gradiente. El gradiente indica la direccin de mxima variacin 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) VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B. 19/11/2007 - 32 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 33 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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 i n permanente, en forma de disco, y en cuya m 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 que ser manejada por un controlador externamente.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 34 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 35 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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 ac ero 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.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 36 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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. La forma de alimentar este motor consiste en poner a masa la toma centrar e ir 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 mostrada en la figura B. Se observa que el motor se ha desplazado un paso (90). Invirtiendo sucesivamente el sentido de la corriente en amba bobinas, obtendremos el giro s completo del motor, como se muestra en la siguiente figura:

A

B

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 37 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

D

A continuacin se detalla la secuencia de excitacin para el funcionamiento de un motor bipolar en modo paso completo.

Paso 1 2 3 4

A +V -V -V +V

B -V +V +V +V

C +V +V -V -V

D -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 que no 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 interme dia 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:

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 38 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 39 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

A continuacin se detalla la secuencia de excitacin para el funcionamiento de un motor bipolar en modo medio paso.

Paso 1 2 3 4

A +V 0 -V -V -V 0 +V +V

B -V 0 +V +V +V 0 -V -V

C +V +V +V 0 -V -V -V 0

D -V -V -V 0 +V +V +V 0

MOTORES UNIPOLARES Al igual que en los motores bi olares, encontramos dos modos de funcionamiento, en paso p 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.

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 40 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

A continuacin se muestra la secuencia de excitacin de bobinas para el funcionamiento de un motor unipolar en modo paso completo.

Paso 1 2 3 4

Comn Masa Masa Masa Masa

A +V 0 0 +V

B 0 +V +V 0

C +V +V 0 0

D 0 0 +V +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 1 2 3 4 5 Comn Masa Masa Masa Masa Masa Masa Masa Masa Masa A +V 0 0 0 0 0 +V +V +V B 0 0 +V +V +V 0 0 0 0 C +V +V +V 0 0 0 0 0 +V D 0 0 0 0 +V +V +V 0 0

VARELA, E. PALOMEQUE, C. MALESPINA, G CALLA, B.

19/11/2007

- 41 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

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:#include #include #include // prototype (function typedef) for DLL function Inp32: typedef short _stdcall (*inpfuncPtr)(short portaddr); typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum); int main(void) { HINSTANCE hLib; inpfuncPtr inp32; oupfuncPtr oup32; short x; int i,j,h; //cargamos la librera para poder usar los puertos hLib = LoadLibrary("inpout32.dll"); if (hLib == NULL) {printf("LoadLibrary Failed.\n"); return -1;} // Comprobamos en funcionamiento de las funciones inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32"); if (inp32 == NULL) {printf("GetProcAddress for Inp32 Failed.\n"); return -1;} oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32"); if (oup32 == NULL) {printf("GetProcAddress for Oup32 Failed.\n"); return -1;} // Escribiendo el puerto paralelo i=0x378; x=0x00; for (j=1;jwidth != Size.width || mhi->height != Size.height { if( buffer == 0 ) { buffer = (IplImage**)malloc(N*sizeof(buffer[0])); memoria memset( buffer, 0, N*sizeof(buffer[0])); ejecucin devuelve } posicin cero for( i = 0; i < N; i++ ) imagenes en buffer { // N numero de || Posiciono==1 )

// tomar tiempo actual en seg.

//tomar actual tamao

// malloc reserva // en tiempo de // puntero a la primer // La inicializa con

VARELA, E. PALOMEQUE, C. MALESPINA, G

CALLA, B.

19/11/2007

- 47 -

Proyecto Integrador TD III

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV// Libera contenido de // crea imagen del

cvReleaseImage( &buffer[i] ); buffer buffer[i] = cvCreateImage( Size, IPL_DEPTH_8U, 1 ); tamao cvZero( buffer[i] ); } cvReleaseImage( &mhi ); contenidos de: cvReleaseImage( &orientacin ); cvReleaseImage( &mascara ); mhi = cvCreateImage( Size, IPL_DEPTH_32F, 1 ); del tamao actual cvZero( mhi ); comienzo orientacion = cvCreateImage( Size, IPL_DEPTH_32F, 1 ); mascara = cvCreateImage( Size, IPL_DEPTH_8U, 1 ); Posiciono=0; inicio=1; angulo=90; } cvCvtColor( entrada, buffer[ultimo], CV_BGR2GRAY ); if (ultimo==2) inicio=0; indice1 = ultimo; indice2 = (ultimo + 1) % N; ultimo = indice2; silueta = buffer[indice2]; cvAbsDiff( buffer[indice1], buffer[indice2], silueta ); cvThreshold( silueta, silueta, umbral, 1, CV_THRESH_BINARY ); cvUpdateMotionHistory( silueta, mhi, timestamp, MHI_DURACION );

// Libera los

//crea imgenes aux //borra MHI en el

cvCalcMotionGradient( mhi, mascara, orientacin, MAX_TIEMPO_DELTA, MIN_TIEMPO_DELTA, 3 ); comp_rect = cvRect( 0, 0, Size.width, Size.height ); color = CV_RGB(255,255,255); magnitud = 100; Angulo = cvCalcGlobalOrientation( orientacin, mascara, mhi, timestamp, MHI_DURACION); Angulo = 360.0 - Angulo; //Chequea para el caso de un pequeo movimiento cuenta = cvNorm( silueta, 0, CV_L1, 0 ); if( cuenta < comp_rect.width*comp_rect.height * 0.15) return; if (inicio==1) return; // Dibuja flecha indicando la direccin centro = cvPoint( (comp_rect.x + comp_rect.width/2), (comp_rect.y + comp_rect.height/2) ); cvLine( entrada, centro, cvPoint( cvRound( centro.x + magnitud*cos(Angulo*CV_PI/180)), cvRound( centro.y )), color, 3, CV_AA, 0 ); ///////////movimiento del motor/////////// y = (inp32)(ii); lado=cos(angulo*CV_PI/180); if((a^y)==0x20)

VARELA, E. PALOMEQUE, C. MALESPINA, G

CALLA, B.

19/11/2007

- 48 -

Proyecto Integrador TD III{

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

while (PasoAct!=Posicionamiento) { x=0x00; (oup32)(io,x); for (t=1;t