You are on page 1of 63

UNIVERSIDAD TECNOLGICA NACIONAL

FACULTAD REGIONAL SAN NICOLS


INGENIERIA EN ELECTRNICA


TCNICAS DIGITALES III



PROYECTO INTEGRADOR

DETECCION Y SEGUIMIENTO DE OBJETOS CON OPENCV

Integrantes: Profesores:

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.

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


Paso A B C D
1 +V -V +V -V
0 0 +V -V
2 -V +V +V -V
-V +V 0 0
3 -V +V -V +V
0 0 -V +V
4 +V -V -V +V
+V -V 0 0


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|

| R| | 3. 240479 - 1. 53715 - 0. 498535| | X|
| G| <- | - 0. 969256 1. 875991 0. 041556| *| Y|
| B| | 0. 055648 - 0. 204043 1. 057311| | Z|

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

Timestamp : 1.011000 Cont: 0 Indice1: 0 Indice2: 1
Timestamp : 1.201000 Cont: 1 Indice1: 1 Indice2: 2
Timestamp : 1.321000 Cont: 2 Indice1: 2 Indice2: 0
Timestamp : 1.452000 Cont: 3 Indice1: 0 Indice2: 1
Timestamp : 1.612000 Cont: 4 Indice1: 1 Indice2: 2
Timestamp : 1.772000 Cont: 5 Indice1: 2 Indice2: 0
Timestamp : 1.932000 Cont: 6 Indice1: 0 Indice2: 1
Timestamp : 2.093000 Cont: 7 Indice1: 1 Indice2: 2
Timestamp : 2.253000 Cont: 8 Indice1: 2 Indice2: 0
Timestamp : 2.413000 Cont: 9 Indice1: 0 Indice2: 1
Timestamp : 2.573000 Cont: 10 Indice1: 1 Indice2: 2
Timestamp : 2.733000 Cont: 11 Indice1: 2 Indice2: 0
Timestamp : 2.894000 Cont: 12 Indice1: 0 Indice2: 1
Timestamp : 2.994000 Cont: 13 Indice1: 1 Indice2: 2
Timestamp : 3.084000 Cont: 14 Indice1: 2 Indice2: 0

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

Cont Buffer [0] Buffer [1] Buffer [2] Silueta
0 IMAGEN 0 IMAGEN 0 - NADA
1 IMAGEN 0 IMAGEN 1 IMAGEN 1 - NADA
2 IMAGEN 0 IMAGEN 1 IMAGEN 2 IMAGEN 2 - IMAGEN 0
3 IMAGEN 3 IMAGEN 1 IMAGEN 2 IMAGEN 3 - IMAGEN 1
4 IMAGEN 3 IMAGEN 4 IMAGEN 2 IMAGEN 4 - IMAGEN 2
5 IMAGEN 3 IMAGEN 4 IMAGEN 5 IMAGEN 5 - IMAGEN 3
6 IMAGEN 6 IMAGEN 4 IMAGEN 5 IMAGEN 6 - IMAGEN 4
7 IMAGEN 6 IMAGEN 7 IMAGEN 5 IMAGEN 7 - IMAGEN 5
8 IMAGEN 6 IMAGEN 7 IMAGEN 8 IMAGEN 8 - IMAGEN 6
9 IMAGEN 9 IMAGEN 7 IMAGEN 8 IMAGEN 9 - IMAGEN 7
10 IMAGEN 9 IMAGEN 10 IMAGEN 8 IMAGEN 10 - IMAGEN 8
11 IMAGEN 9 IMAGEN 10 IMAGEN 11 IMAGEN 11 - IMAGEN 9
12 IMAGEN 12 IMAGEN 10 IMAGEN 11 IMAGEN 12 - IMAGEN 10
13 IMAGEN 12 IMAGEN 13 IMAGEN 11 IMAGEN 13 - IMAGEN 11
14 IMAGEN 12 IMAGEN 13 IMAGEN 14 IMAGEN 14 - IMAGEN 12

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.

You might also like