Sunteți pe pagina 1din 102

ANEXO A:

PUESTA EN MARCHA DEL SISTEMA:


TUTORIAL

A.1 Conexión con Wiimotes


A.2 Montaje de un puntero de infrarrojos
A.3 Instalación de bibliotecas necesarias

Guía práctica para hacer funcionar el sistema.


Anexo A. Puesta en marcha del sistema: Tutorial

A.1 CONEXIÓN CON WIIMOTES

Para la conexión con los Wiimotes es necesario un programa que cree las
conexiones Bluetooth. En Windows, el más utilizado es el BlueSoleil, que es un
programa comercial, pero en su versión de prueba permite transmitir 5 MB de
datos.

Se puede utilizar, en vez del BlueSoleil, cualquier programa que establezca las
conexiones Bluetooth, siguiendo unos pasos que diferirán poco de los explicados a
continuación para este programa.

Los pasos para dejar preparada la conexión PC-Wiimote a través de BlueSoleil son
los siguientes.

1. Ejecutar el programa de instalación BlueSoleil (Fig. 21).

Fig. 21: Capturas del programa de instalación de Bluesoleil

61
Anexo A. Puesta en marcha del sistema: Tutorial

2. El programa solicitará el reinicio para instalar el controlador del hardware


(Fig. 22). Aceptamos.

Fig. 22: Captura de mensaje de reinicio en el programa de instalación de Bluesoleil

3. Al reiniciar nos aparecerá el siguiente icono en la barra de tareas (Fig. 23).

Fig. 23: Captura de icono Bluetooth en la barra de tareas

4. Enchufamos la antena en la ranura USB y aparecerá el siguiente bocadillo


(Fig. 24).

Fig. 24: Captura de bocadillo de confirmación del reconocimiento del dispositivo Bluetooth

5. Ya tenemos preparado el sistema. Ahora sólo se necesita activar el


dispositivo (Fig. 25).

Fig. 25: Activación de dispositivo Bluetooth

62
Anexo A. Puesta en marcha del sistema: Tutorial

El icono gris pasará a azul (Fig. 26).

Fig. 26: Captura de icono Bluetooth activado en la barar de tareas

6. Si hacemos doble click sobre el icono, se nos mostrará la siguiente ventana,


que en su primera ejecución tendrá el siguiente aspecto (Fig. 27).

Fig. 27: Captura de la interfaz de Bluesoleil

7. Si pulsamos directamente en “Search Devices” (“Buscar dispositivos”), no


ocurrirá nada, salvo que encuentre algún otro dispositivo Bluetooth
encendido.
Para que los Wiimotes sean visibles a nuestra antena, es necesario ponerlos
en modo “Sincronización”. Para ello hay dos maneras: una es pulsar el
botón rojo que se encuentra junto a las pilas, para lo que es necesario abrir
la tapa de protección; y la otra forma es pulsar los botones 1 y 2
simultáneamente.
En ambos casos, parpadearán las cuatro luces del mando.
Si mientras están parpadeando, pulsamos en “Search Devices”, el programa
nos mostrará que ha encontrado los Wiimotes de la siguiente manera (los
Wiimotes son representados como joysticks). Los números inferiores son la
dirección MAC propia de cada dispositivo (Fig. 28). Se puede crear un alias
para diferenciarlos.

Fig. 28: Captura de la interfaz de Bluesoleil tras detectar los Wiimotes

63
Anexo A. Puesta en marcha del sistema: Tutorial

8. Si mientras tenemos los Wiimotes en modo sincronización, pinchamos en su


icono correspondiente, se establecerá por fin la conexión y todo lo azul del
programa cambiará a verde (Fig. 29). A veces es necesario varios intentos
de conexión, siempre se deben hacer mientras parpadean las luces del
mando.

Fig. 29: Captura de la interfaz de Bluesoleil tras establecer la conexión con los
Wiimotes

Todo lo relativo a la conexión con el Wiimote está ya preparado.

64
Anexo A. Puesta en marcha del sistema: Tutorial

A.2 MONTAJE UN PUNTERO DE INFRARROJOS

Material necesario:

• Uno o varios diodos de luz infrarroja de en torno a 940 nm de longitud de


onda.
• Alimentación y cables necesarios:
• Opción 1: Cualquier puntero de mechero o bolígrafo
• Opción 2: Pila AA y cables
Estas indicaciones no tienen en cuenta el diseño sino la funcionalidad. Para el
diseño no son necesarias guías sino ideas.

Opción 1:

Sustitución del LED de cualquier pequeña linterna de LED (Fig. 30).

Fig. 30: Linterna-llavero con LED

Si desmontamos un mechero o bolígrafo con linterna LED, un puntero-llavero o


cualquier artículo que tenga una linterna led, nos encontraremos una pieza como
algunas de la Fig. 31 en su interior. Bastará con sustituir el diodo por el nuestro.

Fig. 31: Piezas para la luz infrarroja

65
Anexo A. Puesta en marcha del sistema: Tutorial

Opción 2:

El voltaje de los LEDs infrarrojos se encuentra en torno a 1,4 V (mirar la hoja de


especificaciones en cada caso).
La forma más sencilla, y una de las más efectivas es conectar directamente los
extremos de los LEDs a los bornes de una pila común AA. Para que los alcancen, se
les acopla un cable que toque cada extremo. Los extremos se conectan a cada polo
como se indica en Fig. 32.

Fig. 32: Polaridad de un diodo LED

La luz infrarroja no es visible por el ojo humano, pero sí por cualquier cámara
fotográfica. Así que apuntando la cámara a la cabeza del LED se puede comprobar
su funcionamiento.
Para aumentar la visibilidad se pueden conectar en paralelo tantos LEDs como se
desee, teniendo cuidado de que no toquen extremos positivos con negativos (Fig.
33). De esta forma se aumenta su visibilidad.

Fig. 33: Puntero hecho con una pila AA y cuatro diodos en paralelo

Puede ser conveniente incorporar un interruptor entre las conexiones, según el


propósito del puntero.

66
Anexo A. Puesta en marcha del sistema: Tutorial

A.3 INSTALACIÓN DE BIBLIOTECAS NECESARIAS

La biblioteca está escrita en lenguaje C#, lenguaje diseñado para la API .Net, pero
para el cual existen compiladores para distintos sistemas operativos. Con lo que
podemos decir que el proyecto es multiplataforma.

Ha sido desarrollado con el Visual Studio C# 2008 Express Edition, programa


gratuito de Microsoft. Si se programa en este entorno, se pueden añadir los
proyectos Wiimmersion y WiimoteLib a la solución para poder utilizarlos.

Si el programador prefiere utilizar la biblioteca sobre otro lenguaje .Net como C++,
bastará con establecer la referencia a las dlls de nuestro proyecto.

Las bibliotecas requeridas son

• OpenGl (Tao.OpenGL)

• WiimoteLib

• OpenCV

• AutoItX3Lib

INSTALACIÓN DE TAOOPENGL

Para poder integrar OpenGl en el código, se ha utilizado el wrapper Tao.OpenGl.


Necesitamos establecer la referencia de compilación de los archivos:

• Tao.OpenGl.dll

• Tao.Platform.Windows.dll
La forma tradicional de obtener estos archivos es con la instalación de la “Tao
Framework”, disponible en su página web.

INSTALACIÓN DE WIIMOTELIB

Para utilizar los mecanismos de comunicación de la biblioteca WiimoteLib, podemos


añadir el proyecto WiimoteLib cargando el archivo de configuración de proyecto
“WiimoteLib.csproj” si se está editando en C#, o bien establecer la referencia al
archivo “WiimoteLib.dll” en caso de programar en C# o en otro lenguaje sobre
.Net.
La primera opción es más recomendable, ya que permite la depuración del código.

67
Anexo A. Puesta en marcha del sistema: Tutorial

INSTALACIÓN DE OPENCV

Se utiliza para el cálculo robusto de la matriz fundamental con el método


R.A.N.S.A.C. Es suficiente con ejecutar el archivo ejecutable de instalación que se
proporciona en su página web de Sourceforge.

INSTALACIÓN DE AUTOITX3LIB

La biblioteca de funciones de AutoIt se utiliza sólo como llamada a la función


“Send” en la clase mapeo. Es posible que la aplicación desarrollada por el
programador no utilice esta biblioteca. En caso de que la quiera utilizar, es
necesario registrarla en el registro de Windows. Para ello, se recomienda copiar o
mover el archivo AutoItX3.dll al directorio C:\Windows\System32, que es donde se
encuentran las bibliotecas del sistema, y desde el directorio ejecutar “REGSVR32
AutoItX3.dll” (Fig. 34).

Fig. 34: Comando de registro de la biblioteca AutoItX3Lib

Nos debería aparecer el siguiente mensaje de confirmación (Fig.35).

Fig. 35: Mensaje de confirmación de registro de AutoItxX3Lib

68
ANEXO B:
PROGRAMA DE DEMOSTRACIÓN

Describe la interfaz y la utilización de este programa para la demostración del


correcto funcionamiento de la biblioteca (Fig 36).
Anexo B. Programa de prueba

DESCRIPCIÓN DE LA INTERFAZ

Fig. 36: Descripción de la interfaz de nuestro programa de prueba

1 El mensaje “Visibles” aparece cuando las dos cámaras perciben por lo menos
un punto.
El mensaje “OK!” se muestra al concluir la calibración.
2 El botón “Calibración” activa el mecanismo de calibración para el método
simplificado. El usuario deberá marcar con un puntero la posición de sus
puntos (1,0,0), (0,0,0) y (0,0,1) por este orden.
3 El botón “R.A.N.S.A.C.” activa la calibración por el método R.A.N.S.A.C. Se
deben introducir 20 posiciones cualquiera, hasta ver el mensaje “OK!”.
El botón “6 puntos” activa la calibración por este método: capta 4 puntos
coplanares y muestra la relación homográfica calculada. Si el usuario la

70
Anexo B. Programa de prueba

considera correcta, debe pulsar “Seguir” para continuar y leer los otros dos
punto.
4 En este lugar se indica el punto que está a punto de leer el programa.
5 Indica que el punto se ha leído correctamente.
6 Controles para rotar los ejes y cambiar la perspectiva de la representación 3D.
7 Muestra las coordenadas 2D que captan los Wiimotes (del primer punto
captado).
8 Utilizado en la fase de depuración. Indicaba la posición del epipolo e’
necesario para obtener la matriz Fundamental por el método de los seis
puntos.
9 Se muestra “Leyendo gesto” cuando está activado el mecanismo de detección
de gestos. El la zona inferior del cuadro, cuando se reconoce un gesto aparece
su nombre. Los gestos se asocian al segundo punto captado.
10 Es la ventana de OpenGl. Muestra las proyecciones de ambas cámaras; tras la
calibración, la posición 3D de los puntos detectados, e indica con rectas los
segmentos de gestos detectados.
11 Mensaje sobre la conexión con los Wiimotes. Indica el número de Wiimotes
conectados.
12 Activa las funciones de escalado, traslación y rotación, para cambiar el
sistema de coordenadas.

71
ANEXO C:
GEOMETRÍA

C.1 Geometría Proyectiva


C.1.1 Modelo pin-hole
C.1.2 Elementos impropios
C.1.3 Coordenadas homogéneas
C.1.4 Representación del punto en coordenadas homogéneas
C.1.5 Representación de la recta en coordenadas homogéneas
C.1.6 Homografía

C.2 Geometría Epipolar


C.2.1 Restricción Epipolar
C.2.2 Epipolos
C.2.3 Matriz Fundamental F
C.2.4 Parámetros de las cámaras

Se explican los conceptos geométricos aplicados y los necesarios para su


comprensión.
Anexo C. Geometría

Para poder comprender el trabajo realizado en el presente proyecto, es necesario


tener unas nociones básicas sobre las ramas de la Geometría cuyas propiedades
han sido aplicadas.

C.1 GEOMETRÍA PROYECTIVA

La primera es la Geometría Proyectiva (Fig. 37), una rama relativamente nueva,


que en los últimos años ha adquirido mucha importancia por su aplicación directa
en los sistemas de visión artificial.

Generalizada, y aplicada al espacio tridimensional, la Geometría Proyectiva es la


parte de la Geometría que relaciona los puntos del espacio con su adquisición, bien
sea por la vista o con los modelos más comunes de cámaras. Más formalmente,
estudia la intersección de la recta formada por el punto real y nuestro foco con el
plano de proyección. Lo que tiene una analogía directa con la visión tanto humana
como artificial (cámaras).

Fig. 37: Esquematización de las bases de la Geometría Proyectiva [W22]

Para establecer una correspondencia entre el espacio tridimensional y el proyectivo


se deben tener en cuenta ciertas particularidades de sus relaciones.

73
Anexo C. Geometría

C.1.1 MODELO PIN-HOLE

Fig. 38: Esquema del modelo Pinhole

El modelo de cámara pin-hole o proyectivo es una aproximación del sistema de


captación de las cámaras comunes. Es un modelo que representa tanto la visión
humana como la artificial (Fig. 38).

74
Anexo C. Geometría

C.1.2 ELEMENTOS IMPROPIOS

Una de las propiedades del espacio proyectivo es aquella propiedad que tantas
veces hemos escuchado, pero cuyo enunciado nos hacía dudar:

“Dos rectas paralelas son aquellas rectas que se cortan en el infinito”

Fig. 39: Rectas paralelas en el espacio proyectivo

En el espacio proyectivo, esta afirmación cobra significado, pues los puntos del
infinito reciben el mismo tratamiento que el resto de puntos.

En el espacio afín-euclídeo tridimensional, que es el espacio en el cual estamos


acostumbrados a operar, estos puntos estarán en el infinito, es decir tendrán una
Z   ó Z   , según hayamos definido nuestro sistema de referencia.

Este lugar geométrico es el formado por los puntos llamados puntos impropios o
puntos del infinito. En el espacio afín son aquellos puntos en el infinito y en el
proyectivo es un plano o una recta, según sea el espacio proyectivo de tres o dos
dimensiones, respectivamente.

La recta de puntos impropios del espacio proyectivo bidimensional es la formada


por las intersecciones sobre el plano proyectivo de rectas paralelas en el espacio
euclídeo tridimensional (Fig. 39).

El el caso del espacio proyectivo tridimensional, el plano sería el definido por el


foco y el punto de corte de las proyecciones de varias parejas de rectas paralelas.

75
Anexo C. Geometría

C.1.3 COORDENADAS HOMOGÉNEAS

En nuestro espacio proyectivo tridimensional se distinguirían dos clases con


diferente comportamiento: los puntos impropios (los del infinito) y los propios
(todos los que no son impropios). Para homogeneizar su comportamiento, se
añadió una componente a las tres coordenadas habituales del espacio afín euclídeo
y se llamaron coordenadas homogéneas:
El espacio 3D se representaría de la siguiente manera (Ecuación 1):

 wx 
x  
   wy 
y   
   wz 
z  
   w 
 

Ecuación 1: Transformación de coordenadas cartesianas a homogéneas en el espacio 3D

Y el 2D (Ecuación 2):

 wx 
x  
    wy 
y  
   w 
 
Ecuación 2: Transformación de coordenadas cartesianas a homogéneas en el espacio 2D

El valor w es el que nos indica si el punto definido es impropio: unas coordenadas


homogéneas representan un punto impropio si su última componente es 0 .

Al representar un espacio n -dimensional con coordenadas n  1 -dimensionales, es


evidente que cada punto no impropio tiene infinitas representaciones en
coordenadas homogéneas (una para cada valor de w  0 ).

La conversión de coordenadas carteasianas a homogéneas y viceversa es directa:


si hablamos del plano, las coordenadas cartesianas serán (x, y) ; y las
homogéneas, (x1 , x2 , x 3 ) . Su relación inversa es, como se deduce de los párrafos
x1 x
anteriores: x  e y 2 .
x3 x3

76
Anexo C. Geometría

C.1.4 REPRESENTACIÓN DEL PUNTO EN COORDENADAS


HOMOGÉNEAS.

Acabamos de ver que para representar las coordenadas del espacio proyectivo se
deben utilizar las coordenadas homogéneas.

Debemos tener en cuenta que vamos a operar con los espacios proyectivos del
plano o del espacio, según hablemos de proyecciones o de localización espacial,
respectivamente. En todo caso, tendrán una coordenada más que la tradicional
representación en coordenadas euclídeas.

Hay que tener en cuenta que la captación de puntos de nuestro sistema se hace
sobre un plano proyectivo. En la siguiente figura (Fig. 40) se interpreta la
representación de unas coordenadas desde los dos puntos de vista: espacio
proyectivo 2D y 3D:

Fig. 40: Interpretación gráfica de las coordenadas homogéneas

77
Anexo C. Geometría

C.1.5 REPRESENTACIÓN DE LA RECTA EN COORDENADAS


HOMOGÉNEAS.

Anque parezca extraño, las rectas se definen con el mismo número de coordenadas
que los puntos [A11], y, como sucede con los puntos, si las coordenadas de dos
líneas son proporcionales, entonces representan la misma línea.

Por ejemplo, la recta del plano euclídeo 3x-y  4 =0 , se representaría en


coordenadas homogéneas como (3, 1, 4) . Esto se deduce usando la conversión
x1 x x x
x e y  2 . La recta quedaría: 3 1 - 2  4 =0 , que multiplicando por
x3 x3 x3 x3
x3 , es 3x1 -x2  4x 3 =0 , es decir, (3, 1, 4) .

Veamos un ejemplo de paralelismo:

En el plano euclídeo, y=3x  4 and y=3x  10 son dos líneas paralelas. Su


respectiva representación en coordenadas homogéneas es (3, 1, 4) y
(3, 1,10) , si buscamos su intersección igualando las ecuaciones
3x1 -x2  4x 3 =0 y 3x1 -x2  10x 3 =0 , el sistema
3x1 -x2  4x 3 = 3x1 -x2  10x 3 sí tiene solución: (1,3,0) o cualquier
coordenada proporcional. La última coordenada es, en todo caso, nula, lo que
representa un punto impropio o del infinito.

78
Anexo C. Geometría

C.1.6 HOMOGRAFÍA

Una matriz homografía o colineación H es la matriz 3x3 que establece una relación
lineal entre los puntos dos planos en el espacio proyectivo, de tal forma que
establece una relación uno a uno entre los puntos de uno y otro plano (Ecuación 3-
4 y Fig. 40). También se puede establecer una homografía entre los puntos de un
mismo plano captados desde diferentes posiciones.

Gráficamente, el caso particular de rectificación (Fig. 41).:

Fig. 41: Transformación proyectiva (homografía) de rectificación

Dados:

 x1   w ' x2  h11 h12 h13 


     
p1   y1  , p '2   w ' y2  , H12  h21 h22 h23 
1   w'  h h23 
 1    31 h32
Ecuación 3: Variables de una transformación proyectiva u homografía

entonces

p'2  H12p1

Ecuación 4: Transformación proyectiva u homografía

La relación inversa es directa (Ecuación 5):

1
H12  H21

Ecuación 5: Relación inversa de una transformación proyectiva

79
Anexo C. Geometría

Es importante resaltar que dado el carácter homogéneo de los vectores, la matriz


H puede multiplicarse por una constante sin que la transformación se modifique.
Por tanto la matriz H también es de tipo homogéneo y está definida salvo una
constante de proporcionalidad. Como consecuencia, la matriz H tan solo posee
ocho elementos independientes. El noveno es la constante de proporcionalidad
implícita a las coordenadas homogéneas.

Un método de cálculo de esta matriz con cuatro correspondencias se explica en en


Anexo D.1.1.

80
Anexo C. Geometría

C.2 GEOMETRÍA EPIPOLAR

La Geometría Epipolar es una rama de la Geometría Proyectiva tridimensional de


dos (o más) vistas que se basa en los lugares geométricos llamados epipolos y sus
propiedades y restricciones.

Si hablamos de dos cámaras, su geometría dependería exclusivamente de los


parámetros de las cámaras y de su posición relativa.

C.2.1 RESTRICCIÓN EPIPOLAR

Dadas dos cámaras orientadas hacia un punto cualquiera X del espacio y la


proyección x1 de dicho punto sobre la primera cámara, la proyección sobre la
segunda siempre formará parte de la misma recta (la línea epipolar), que será la
proyección del rayo de proyección sobre la primera cámara (Fig. 41).

Fig. 42: Reestricción epipolar

81
Anexo C. Geometría

C.2.2 EPIPOLOS

Los epipolos corresponden a son los puntos e y e’ (Fig. 41) , en la que se aprecia
que son los puntos de intersección de la recta que une los centros ópticos del
sistema de visión sobre ambos planos de proyección.

La otra propiedad es que si trazáramos varias líneas epipolares, todas ellas


intersectan en el mismo punto: el epipolo.

C.2.3 MATRIZ FUNDAMENTAL F

La matriz Fundamental F es una matriz 3x3 que contiene la representación


algebraica de la geometría epipolar. Encapsula la información de tal forma que
cumple las siguientes propiedades:

RESUMEN DE LAS PROPIEDADES DE F:

• F es una matriz de rango 2 con 7 grados de libertad.

• Correspondencias de puntos:
• Si x y x’ son correspondencias de un punto, x’Fx=0.

• Líneas epipolares:
• l’=Fx es la correspondiente línea epipolar de x.
• l= F T x’ es la correspondiente línea epipolar de x’.

• Epipolos:
• Fe=0.
• F T e’=0.

• Cálculo a partir de las matrices de cámara P y P’:


• F  [e ']x P 'P , donde P es la pseudo-inversa de P y e '  P'C ,
con PC  0 .
• Cámaras canónicas:
P  [I | 0] , P  [M| m] ,
1
F  [e ']x M  MT [e ']x , donde e '  m y e  M m .

82
Anexo C. Geometría

C.2.4 PARÁMETROS DE LAS CÁMARAS

Para la definición completa de un sistema desde el punto de vista de la geometría


epipolar existen dos tipos de parámetros: los intrínsecos y los extrínsecos. Es
posible obtener las matrices de cámara sin diferenciarlos.

Parámetros intrínsecos

Los intrínsecos son los que definen las propiedades de cada cámara o plano
proyectivo y serán siempre constantes para cada cámara. Los más importantes
son: la distancia focal f y el factor de escala. Además, existen más parámetros que
puede ser o no necesarios ser tenidos en cuenta, como la distorsión radial.
La matriz que recoge estos parámetros es:

 f 
 0 ox 
 sx 
 
 f 
Min   0 oy 
 sy 
 
0 0 1
 
 
Ecuación 6: Matriz de parámetros internos

Con f =distancia focal; s x y s y el tamaño efectivo de píxel en cada eje y ox y


oy la posición del centro del plano proyectivo.

Parámetros extrínsecos

Los parámetros extrínsecos relacionan la relación geométrica de la posición y


orientación de ambas cámaras. Son matrices 3x4 que se pueden deducir
directamente de la matriz fundamental.

83
Anexo C. Geometría

Relación con las coordenadas del mundo

Describamos la relación de las coordenadas de una cámara con las del mundo:

Xw  Xw  X 
 xh      p11 p12 p13 p14   w 
  Y      
y   M M  w   P  Yw   p21 p22 p23 p24   Yw 
 h in ex Z  Z    Z 
w  w  w  p p p p  w
   1   1   31 32 33 34   
     1 

Ecuación 7: Relación de las coordenadas del mundo, matriz de cámara y coordenadas de la


cámara

Las coordenadas xh e yh son homogéneas, así que necesitarán ser divididas por
w para obtener las euclídeas.

84
ANEXO D:
MÉTODOS DE CALIBRACIÓN Y
LOCALIZACIÓN 3D

D.1 Calibración epipolar


D.1.1 Cámaras en posición libre. Método 1:
Obtención de la matriz Fundamental y epipolos con el método de los
seis puntos
D.1.2 Cámaras en posición libre. Método 2:
Obtención de la matriz Fundamental con el método robusto
R.A.N.S.A.C.
D.1.2 Cálculo de matrices canónicas de cámaras a partir de la matriz
fundamental y el segundo epipolo

D.2 Localización 3D
D.2.1 Configuración 1: Posición libre de las cámaras
D.2.2 Configuración 2: Cámaras alineadas

Explicación teórica y práctica de los métodos geométricos de visión 3D aplicados.


Anexo D. Métodos de calibración y localización 3D

Motivo
Al comenzar el proyecto, se marcó el objetivo de conseguir una localización
espacial lo más flexible posible. El sistema podía haberse limitado a conceptos de
trigonometría y de semejanza de triángulos para obtener las tres coordenadas a
partir de los datos obtenidos por dos cámaras alineadas, pero decidimos
adentrarnos en la Geometría Epipolar para poder aplicar sus conceptos y así
permitir al usuario situar las cámaras sin ninguna restricción de posición ni de
orientación.
Para el cálculo de la posición 3D con posiciones de cámaras no rígidas es necesario
un previo proceso de calibración para la estimación de los parámetros que
intervienen.

Proceso
Este proceso fue muy costoso, ya que requiere escribir mucho código repetitivo
para resolver los sistemas, es complicado corroborar la validez de los métodos
implementados utilizando datos ideales y los resultados obtenidos de los métodos
son matrices que encapsulan mucha información, pero es difícil comprobar la
validez de los resultados, ya que la idealidad de ellos no es posible con unas
cámaras tan poco precisas. Por ello, elegimos el único método encontrado que
tenía un paso intermedio comprobable: el “6-point algorithm” (Algoritmo de los 6
puntos), que se describe a continuación. Este método tiene la ventaja de que es
fácil de comprobar visualmente la validez de los cálculos del paso intermedio, pero
después comprobamos que el último paso, a pesar de ser correcto
matemáticamente, es poco tolerante en el escenario habitual ante pequeños
errores de medición.
La solución escogida fue la de aplicar el método R.A.N.S.A.C., que es el método
más utilizado para calibración de cámaras, ya que tiene la gran ventaja para
nuestro escenario de que dados un conjunto de parejas de puntos como entrada
del método, desestima aquellos cuya propiedades epipolares más difieren de las
del resto. Es considerado un método robusto.
De todas formas, para agilizar el desarrollo de las siguientes fases, fue desarrollado
el método trigonométrico, que es mucho más rápido de calibrar, más cómodo para
trabajar sin moverse del puesto de trabajo y requiere de menos esfuerzo de cálculo
por parte del ordenador.

86
Anexo D. Métodos de calibración y localización 3D

D.1 CALIBRACIÓN EPIPOLAR

El esquema de ejecución para calcular la matriz F se puede esquematizar de la


siguiente manera (Fig. 43).:

Captar 20 puntos Ejecutar método


R.A.N.S.A.C.

Captar 4 puntos Calcular


coplanares homografía

Captar 2 puntos no Calcular Matriz


coplanares con los Fundamental
anteriores

Fig. 43: Esquema para el cálculo de la matriz fundamental

A continuación se explican los métodos aplicados. Cabe reseñar que los dos
métodos epipolares difieren en la manera de calcular la matriz fundamental, pero
una vez calculada, el método para calcular las matrices de cámara es común.

87
Anexo D. Métodos de calibración y localización 3D

D.1.1 CÁMARAS EN POSICIÓN LIBRE.


MÉTODO 1:
OBTENCIÓN DE LA MATRIZ FUNDAMENTAL Y EPIPOLOS CON
EL MÉTODO DE LOS SEIS PUNTOS

ALGORITMO DE LOS SEIS PUNTOS

I. Dadas cuatro correspondencias de puntos coplanares no alineados xi  x 'i ,


hallar la matriz homografía H que los relaciona tal que x 'i  Hxi , i  1..4
.

II. Determinar el epipolo de la segunda cámara e ' como intersección de la


recta que contiene los puntos Hx5 y x '5 y la definida por Hx 6 y x '6 .

III. Los puntos X5 y X 6 han de estar fuera del plano definido por X1 , X2 , X 3 y
X4 .

IV. F  [e']x H

[A2]

88
Anexo D. Métodos de calibración y localización 3D

DIAGRAMA DE ESTADOS DEL CÁLCULO DE LA MATRIZ FUNDAMENTAL EN


EL PROGRAMA DE DEMOSTRACIÓN

Fig. 44: Diagrama de estados del cálculo de la matriz fundamental en el programa de


demostración por el método de los seis puntos.

89
Anexo D. Métodos de calibración y localización 3D

OBTENCIÓN DE LA MATRIZ HOMOGRAFÍA H

Dados cuatro puntos ( X1 , X2 , X 3 , X 4 ) sobre un mismo plano del espacio 3D que


cumplan la única condición de no estar alineados, sus respectivas proyecciones
sobre las dos cámaras ( xi  x 'i ) proporcionan la información necesaria para
calcular la matriz homografía H que relaciona las proyecciones p1 y p2 de la
siguiente manera (en coordenadas homogéneas sobre el espacio proyectivo 2D):

 x1   w ' x2 
   
p1   y1  , p'2   w ' y2 
1   w' 
 1  

h11 h12 h13 


 
H12  h21 h22 h23 
h h23 
 31 h32

p'2  H12p1

Ecuación 8: Transformación homográfica

Con cuatro correspondencias, llegamos al siguiente sistema con solución directa. El


desarrollo se incluye al final del presente sección.

 xa1 y a1 1 0 0 0 x a1x a2 y a1x a2  h11   x a2 


    
 xb1 yb1 1 0 0 0 xb1xb2 yb1xb2  h12   xb2 
    
x y c1 1 0 0 0 x c1x c2 y c1x c2     
 c1  h13   xc2 
x y d1 1 x a1 y a1 1 x d1x d2  x a1y a2 y d1x d2  y a1y a2  h21   x d2  y a2 
 d1 
0 0 0 x a1  xb1 y a1  yb1 2 x a1y a2  xb1yb2 y a1y a2  yb1yb2  h22   y a2  yb2 

    
0 0 0 xb1  x c1 yb1  y c1 2 xb1yb2  x c1y c2 yb1yb2  y c1y c2  h23   yb2  y c2 
    
0 0 0 x c1  x d1 y c1  y d1 2 x c1y c2  x d1y d2 y c1y c2  y d1y d2  h31   y c2  y d2 
    
 0 0 0 x d1 y d1 1 x d1y d2 y d1y d2  h32   y d2 
Ecuación 9: Sistema planteado para hallar la matriz homografía

90
Anexo D. Métodos de calibración y localización 3D

En nuestra biblioteca este cálculo se aplica en la función:

calculaHomografia( Punto2D a1, Punto2D a2,


Punto2D b1, Punto2D b2,
Punto2D c1, Punto2D c2,
Punto2D d1, Punto2D d2)

La función está descrita en el Anexo H.2.

CÁLCULO DEL EPIPOLO

La Geometría Epipolar es un campo de la Geometría que estudia las relaciones


entre las proyecciones de los puntos tridimensionales sobre varios planos de
proyección. Está íntimamente relacionada con la visión estéreo.

La proyección de un punto P en el plano de proyección Pi es la intersección entre


dicho punto y el punto focal O .

Con dos planos proyectivos, la recta epipolar es la recta que une los puntos focales
de dichos planos proyectivos. Los epipolos son las intersecciones de dicha recta con
cada plano proyectivo.

La proyección sobre uno de los planos proyectivos de todos los puntos del espacio
cuya proyección sobre el otro sea un mismo punto, forma una recta que pasa por
su epipolo.

De esta forma dadas dos parejas de proyecciones, podemos calcular el epipolo


intersectando las rectas formadas por cada proyección sobre el segundo plano y
sobre el primero premultiplicada por la matriz homografía.

91
Anexo D. Métodos de calibración y localización 3D

CÁLCULO DE LA MATRIZ FUNDAMENTAL A PARTIR DE LA MATRIZ


HOMOGRAFÍA Y EL EPIPOLO DEL SEGUNDO PLANO PROYECTIVO

Llamaremos e ' al epipolo del segundo plano proyectivo.

[e']x será la matriz antisimétrica:

 0 e 'z e 'y 
 
[e ']x   e ' 0 e 'x 
 
e 'y e 'x 0 

Ecuación 10: Matriz antisimétrica basada en el epipolo

El producto de matrices [e]x H  F nos proporcionará la matriz fundamental.

La importancia de la matriz fundamental F reside en que representa la posición


relativa de las cámaras: una proyección sobre la primera cámara de un punto del
espacio visible representa el rayo formado por dicho punto y el foco de la cámara.
Dicho rayo se proyecta en la segunda cámara como una línea. La matriz
fundamental es la matriz que relaciona los dos lugares geométricos de la forma
l'  Fx . La relación inversa también es directa: l  F T x ' .

La propiedad que cumple la matriz fundamental para cualquier punto del espacio
visible es la de que sus respectivas proyecciones x y x ' han de cumplir la igualdad
x  TFx  0 , ya que por definición de la representación homogénea de rectas, un
T
punto x pertenece a una recta l si y sólo si x l  0.

92
Anexo D. Métodos de calibración y localización 3D

CONCLUSIONES DEL MÉTODO

El método de los seis puntos es matemáticamente válido, pero tiene un grave


problema: la estimación de los epipolos por intersección de rectas es muy poco
tolerante a errores de medición. Las pendientes de las rectas obtenidas suelen ser
prácticamente iguales (Fig. 45)., con lo que su intersección es muy poco precisa.

Fig. 45: Líneas epipolares sobre un objeto real

93
Anexo D. Métodos de calibración y localización 3D

DESARROLLO PARA EL CÁLCULO DE LA MATRIZ HOMOGRAFÍA CON


CUATRO PUNTOS COPLANARES

Dadas cuatro correspondencias de puntos coplanares no alineados xi  x 'i , se


plantean las siguientes igualdades:

h11 h12 h13   x a1   w a x a2 


    
h h23   y a1    w a y a2 
 21 h22
h h23   1   w a 
 31 h32

h11 h12 h13   xb1   wb xb2 


    
h h23   yb1    wb yb2 
 21 h22
h h23   1   wb 
 31 h32

h11 h12 h13   x c1   w c x c2 


    
h h23   y c1    w c y c2 
 21 h22
h h23   1   w c 
 31 h32

h11 h12 h13   x d1   w d x d2 


    
h h23   y d1    w d y d2 
 21 h22
h h23   1   w d 
 31 h32
Ecuación 11: Relaciones para el cálculo de la matriz homografía

Las anteriores igualdades forman de sistema de doce ecuaciones con doce


incógnitas (los datos de entrada son las equis y las íes griegas, que son las
coordenadas de las correspondencias). Agrupado, queda:

h11x a1  h12 y a1  h13  w a x a2



h21x a1  h22 y a1  h23  w a y a2

h31x a1  h32 y a1  h33  w a
h x  h y  h  w x
 11 b1 12 b1 13 b b2

h21xb1  h22 yb1  h23  wb yb2



h31xb1  h32 yb1  h33  wb

h11x c1  h12 y c1  h13  w c x c2

h21x c1  h22 y c1  h23  w c y c2
h x  h y  h  w
 31 c1 32 c1 33 c

h11x d1  h12 y d1  h13  w d x d2



h21x d1  h22 y d1  h23  w d y d2
h x  h y  h  w
 31 d1 32 d1 33 d

94
Anexo D. Métodos de calibración y localización 3D

Si se reescribe en forma compacta de productos de matrices [A7]:

 x a1 y a1 1 0 0 0 0 0   w a x a2 
   
x yb1 1 0 0 0 0 0  w x 
 b1  b b2 
x y c1 1 0 0 0 0 
0  h11   w x 
 c1    c c2 
x y d1 1 0 0 0 0 0  h12   w d x d2 
 d1
 0 0 0 x a1 y a1 1 0 0  h13   w a y a2 

   
 0 0 0 xb1 yb1 1 0 0  h21   wb yb2 
   
 0 0 0 x c1 y c1 1 0 0  h22   w c y c2 
    
 0 0 0 x d1 y d1 1 0 0  h23   w d y d2 
    
 0 0 0 0 0 0 x a1 y a1  h31   w a  1
    
 0 0 0 0 0 0 xb1 yb1  h32   wb  1
   
 0 0 0 0 0 0 x c1 y c1   w  1
  c 
 0 0 0 0 0 0 x d1 y d1   w  1
  d 

El valor de los factores de escala wi de las coordenadas homogéneas no aporta


ninguna información en este caso; sólo se busca la matriz H . Con lo que podemos
sustituir cada wi por los valores obtenidos despejando en las últimas cuatro
ecuaciones en función de h31 y h32 y reducir el sistema a uno de ocho ecuaciones
con ocho incógnitas.

Para ello, despejamos de la siguiente manera:


h31x a1  h32 y a1  w a  1



h31xb1  h32 yb1  wb  1


h31x c1  h32 y c1  w c  1


h31x d1  h32 y d1  w d  1


h31x a1  h32 y a1  1  w a



h31xb1  h32 yb1  1  wb


h31x c1  h32 y c1  1  w c


h31x d1  h32 y d1  1  w d

95
Anexo D. Métodos de calibración y localización 3D

Sustituimos en las 8 ecuaciones restantes y separamos nuestras incógnitas.

h11x a1  h12 y a1  h13  w a x a2



h21x a1  h22 y a1  h23  w a y a2
h11xb1  h12 yb1  h13  wb xb2

h21xb1  h22 yb1  h23  wb yb2

h11x c1  h12 y c1  h13  w c x c2
h21x c1  h22 y c1  h23  w c y c2

h11x d1  h12 y d1  h13  w d x d2

h21x d1  h22 y d1  h23  w d y d2



h11x a1  h12 y a1  h13  h31x a1  h32 y a1  1 x a2


h21x a1  h22 y a1  h23  h31x a1  h32 y a1  1 y a2



h11xb1  h12 yb1  h13  h31xb1  h32 yb1  1 xb2


h21xb1  h22 yb1  h23  h31xb1  h32 yb1  1 yb2



h11x c1  h12 y c1  h13  h31x c1  h32 y c1  1 x c2



h21x c1  h22 y c1  h23  h31x c1  h32 y c1  1 y c2

h x  h y  h  h x  h y  1 x

 11 d1 12 d1 13 31 d1 32 d1 d2

h21x d1  h22 y d1  h23  h31x d1  h32 y d1  1 y d2


h11x a1  h12 y a1  h13  h31x a1x a2  h32 y a1x a2  x a2



h21x a1  h22 y a1  h23  h31x a1y a2  h32 y a1y a2  y a2


h11xb1  h12 yb1  h13  h31xb1xb2  h32 yb1xb2  xb2


h21xb1  h22 yb1  h23  h31xb1yb2  h32 yb1yb2  yb2


h11x c1  h12 y c1  h13  h31x c1x c2  h32 y c1x c2  x c2

h21x c1  h22 y c1  h23  h31x c1y c2  h32 y c1y c2  y c2



h11x d1  h12 y d1  h13  h31x d1x d2  h32 y d1x d2  x d2


h21x d1  h22 y d1  h23  h31x d1y d2  h32 y d1y d2  y d2

 x a1 y a1 1 0 0 0 x a1x a2 y a1x a2   h11   x a2 


    
 yb1xb2  h12   xb2 
 xb1 yb1 1 0 0 0 xb1xb2
x
 c1 y c1 1 0 0 0 x c1x c2 y c1x c2  h13   x c2 

 x d1 y d1 1 0 0 0 x d1x d2 y d1x d2  h21   x d2 
 0 
 0 0 x a1 y a1 1 x a1y a2 y a1y a2  h22   y a2 
    
 0 0 0 xb1 yb1 1 xb1yb2 yb1yb2  h23   yb2 
    
 0 0 0 x c1 y c1 1 x c1y c2 y c1y c2  h31   y c2 
    
 0 0 0 x d1 y d1 1 x d1y d2 y d1y d2  h32   y d2 

96
Anexo D. Métodos de calibración y localización 3D

Para resolverlo mediante la diagonalización de Gauss debemos evitar las


submatrices nulas (Pendiente referencia), para ello sumamos las filas 4ª y 5ª a la
4ª, la 5ª y la 6ª a la 5ª, 6ª y 7ª a 6ª y 7ª y 8ª a 7ª:

 x a1 y a1 1 0 0 0 x a1x a2 y a1x a2  h11   x a2 


    
x yb1 1 0 0 0 xb1xb2 yb1xb2  h   x 
 b1   12 b2 
x y c1 1 0 0 0 x c1x c2 y c1x c2  h   x 
 c1   13   c2 
x y d1 1 x a1 y a1 1 x d1x d2  x a1y a2 y d1x d2  y a1y a2  h21   x d2  y a2 
 d1 
0
 0 0 x a1  xb1 y a1  yb1 2 x a1y a2  xb1yb2 y a1y a2  yb1yb2  h22   y a2  yb2 
    
0 0 0 xb1  x c1 yb1  y c1 2 xb1yb2  x c1y c2 yb1yb2  y c1y c2  h23   yb2  y c2 
    
0 0 0 x c1  x d1 y c1  y d1 2 x c1y c2  x d1y d2 y c1y c2  y d1y d2  h31   y c2  y d2 
    
 0 0 0 x d1 y d1 1 x d1y d2 y d1y d2  h32   y d2 

Ecuación 12: Resolución directa de la matriz Homografía

La solución del sistema obtenido es directamente calculable con el método de


Gauss-Jordan, con lo que el desarrollo ha sido completado. [A19]

97
Anexo D. Métodos de calibración y localización 3D

D.1.2 CÁMARAS EN POSICIÓN LIBRE.


MÉTODO 2:
OBTENCIÓN DE LA MATRIZ FUNDAMENTAL F POR EL
MÉTODO ROBUSTO R.A.N.S.A.C.

DESCRIPCIÓN DEL ALGORITMO GENERAL R.A.N.S.A.C.

El método RANSAC (RANdom SAmple Consensous) es un buen método para


escenarios como el actual. La falta de resolución de las cámaras implica la
necesidad de desestimar algunos datos para obtener una buena aproximación de la
matriz fundamental. En este concepto se basa este método.

El algoritmo es el siguiente:

1. Seleccionar aleatoriamente una muestra s de puntos del conjunto total S y


calcular el modelo con este subconjunto.

2. Determinar el subconjunto de puntos Si que están dentro de un umbral de


distancia al modelo.
El subconjunto Si es el conjunto consenso y define los “inliers” de S .

3. Si el conjunto Si es mayor que un umbral T , volver a estimar el modelo


utilizando todos los puntos de Si y terminar.

4. Si el tamaño de Si es menor que T , seleccionar un nuevo subconjunto y


repetir el paso anterior.

5. Después de N intentos, seleccionar el subconjunto Si con mayor consenso,


volviendo a estimar el modelo utilizando todos los puntos del subconjunto Si
.

[A14]

98
Anexo D. Métodos de calibración y localización 3D

FUNCIÓN OPENCV FINDFUNDAMENTALMAT

Para el cálculo de la matriz Fundamental F en el segundo método, hemos utilizado


la función cvFindFundamentalMat perteneciente a la biblioteca de visión por
computador OpenCV. Para poder utilizarla en nuestro código C#, hemos utilizado el
wrapper de OpenCV a C# CvLib [W8].

Entero cvFindFundamentalMat (
Matriz2xN_Ptos CjtoProyecciones1,
Matriz2xN_Ptos CjtoProyecciones2,
Matriz3x3 MatrizFundamental,
Entero Método=RANSAC,
Real ErrorMáximo,
Real NivelDeConfianza,
Vector Rechazados=0);

ENTRADAS

CjtoProyecciones1 y CjtoProyecciones2 son las matrices que recogen de


correspondencias de proyecciones de puntos. La primera fila de cada matriz
corresponde a las coordenadas x de las proyecciones de la respectiva cámara, y la
segunda a las y. Han de ser de idéntica longitud y el número de puntos adquiridos
ha de ser mayor que ocho. La precisión del método aumenta al introducir más
puntos.

ErrorMáximo es la mayor distancia que toleramos de una proyección a la recta


epipolar calculada con la otra proyección y la matriz fundamental F que estamos
buscando.

NivelDeConfianza es el tanto por uno de posibilidades de que la matriz


fundamental F sea calculada.

99
Anexo D. Métodos de calibración y localización 3D

SALIDAS

Devuelve 0 si no encontrado, 1 si encontrada una solución.

Matriz3x3 MatrizFundamental: matriz fundamental calculada.

Vector Rechazados: vector del tamaño de la cantidad de puntos introducidos con


un 1 si la pareja de puntos forma parte del conjunto consenso Si , y un 0 si el
punto ha sido rechazado.

100
Anexo D. Métodos de calibración y localización 3D

D.1.3 CÁLCULO DE MATRICES CANÓNICAS DE CÁMARAS A PARTIR


DE LA MATRIZ FUNDAMENTAL Y EL SEGUNDO EPIPOLO

Un par de matrices de cámaras determinan únicamente una matriz fundamental. El


inverso no se cumple: la información que da la matriz fundamental es
independiente del sistema de referencia que se elija.

La forma canónica del par de matrices asociadas a una determinada matriz


fundamental consiste en definir la matriz de la primera cámara como P1   I | 0  ,
donde I es una matriz unidad 3  3 y 0 es un vector nulo de tamaño 3 .

Geométricamente, la forma canónica de las matrices de cámara nos indica que


situamos el origen de coordenadas en el foco de la primera cámara: el eje Z en
dirección perpendicular al plano de proyección y los ejes X e Y de la misma
manera en la que tratamos las coordenadas X e Y de los puntos de proyección.

Dada una matriz fundamental F y S una matriz cualquiera 3  3 , se define la


forma canónica del par de matrices de cámara como:

P1  I | 0  y P2  SF | e' .

Se considera una buena elección para S , la matriz [e']x comentada en el apartado


anterior.

La forma general de la segunda cámara es P2  [[e ']x F  e ' v T | e '] , con v


cualquier vector de tamaño 3 y  un escalar no nulo.

Cabe destacar que dadas dos proyecciones y las matrices de proyección de sus
respectivas cámaras es posible reconstruir la estructura 3D salvo por la escala.
Este hecho se comprende fácilmente ya que si se mueven las cámaras a través de
los respectivos rayos de proyección de forma proporcional a sus distancias iniciales
del punto, las propiedades geométricas se mantienen; con varios puntos, se
mantienen pero con un factor de escalado.

101
Anexo D. Métodos de calibración y localización 3D

D.2 LOCALIZACIÓN 3D

A continuación se explica el método utilizado para la reconstrucción 3D en la


configuración epipolar, así como la calibración y localización 3D para la
configuración de cámaras alineadas.

D.2.1 CONFIGURACIÓN 1: POSICIÓN LIBRE DE CÁMARAS

Para la estimación de la posición 3D a partir de los puntos capturados por dos


cámaras en posición libre es conveniente afrontar el problema desde el punto de
vista de la geometría epipolar del sistema.
Con dos cámaras, cada cámara recibe un rayo de proyección. Estos dos rayos
normalmente se intersecan en un punto del espacio. Con lo que dada una
configuración de dos cámaras es posible calcular la posición de un punto
observando su posición con dos cámaras diferentes. Hemos dicho “normalmente”,
porque este punto puede ser un punto del infinito (punto impropio).
Si obviamos esta excepción (o la controlamos), podemos calcular la posición de un
punto en el espacio de la siguiente manera (Ecuación 14):
Para dos cámaras con matrices de proyección P1 y P2 de la forma de Ecuación 13:
pi i i
p13 i 
 11 p12 p14 
 i i i i 
Pi  p21 p22 p23 p24 
 i 
p31 pi32 pi33 pi34 
 
Ecuación 13: Definición de la matriz de proyección

La relación espacio 3D – proyecciones es la siguiente:

X X
 a1     a2   
       
 b   P Y ,  b   P Y
 1 1    2 2  
w  Z w  Z
 1  1   2  1 
   
Ecuación 14: Relación matricial entre las coordenadas del mundo y las captadas por las
cámaras

Sabemos los puntos observados en cada cámara x1 , x2 , y1 e y2 dados por


a1 w1 , b1 w1 , a2 w2 y b2 w2 . Necesitamos resolver los parámetros X, Y y Z
(la posición 3D del punto).

102
Anexo D. Métodos de calibración y localización 3D

Si operamos, las igualdades que obtenemos directamente son las de la Ecuación


15. Para i=1 y 2:

 i
a1  Xp11 i
 Yp12 i
 Zp13 i
 p14


b  Xpi  Ypi  Zpi  pi
 1 21 22 23 24


 i i i i
w1  Xp31  Yp32  Zp33  p34

Ecuación 15: Relación entre las coordenadas del mundo y las captadas por las cámaras

Si eliminamos las variables de la izquierda de de la igualdad con xiwi  ai y


yiwi  bi obtenemos:

Xx pi  Yx pi  Zx pi  x pi  Xpi  Ypi  Zpi  pi


 i 31 i 32 i 33 i 34 11 12 13 14

Xy pi  Yy pi  Zy pi  y pi  Xpi  Ypi  Zpi  pi
 i 31 i 32 i 33 i 34 21 22 23 24

Factorizamos en función de nuestras incógnitas (X, Y y Z) y obtenemos:

 i i i i i i i i
X(xip31  p11 )  Y(xip32  p12 )  Z(xip33  p13 )  p14  xip34


 i i i i i i i i
X(yip31  p21 )  Y(yip32  p22 )  Z(yip33  p23 )  p24  yip34

Formulado en forma matricial:

 x p1  p1 x1p132  p112 1 
x1p133  p13  1 1 
 1 31 11    p14  x1p34 
  X  
1 1
 y1p31  p21 y1p132  p122 y1p133  p123    p124  y1p134 
  
 Y    2 
 x2p231  p11
2
x2p232  p12
2
x2p233  p13
2
   p14  x2p234 
  Z  
 y p2  p2 2   2 
 2 31 21 y2p232  p222 2
y2p33  p23  p2
 24  y p
2 34 

Ecuación 16: Relación 3D-proyecciones para el cálculo de las coordenadas 3D

Obtenemos un sistema de la forma AX=B. Para despejar X, nos gustaría invertir A


directamente, pero no es posible ya que no es una matriz cuadrada, en su lugar,
utilizamos la matriz pseudo-inversa de Moose-Penrose:
T 1
Multiplicamos a cada lado por A T a la izquierda y luego por (A A) , cuya
inversión es posible por ser cuadrada, con lo que nos queda:

(A T A)1 A T AX  (A T A)1 A TB

T 1 T
De esta forma podemos eliminar (A A) A A , ya que una matriz multiplicada por
su inversa es la matriz identidad (elemento neutro del producto de matrices).
De esta forma obtenemos:

X  (A T A)1 A TB
Ecuación 17: Ecuación básica de la visión estéreo

Que es la ecuación básica para la visión estéreo (Ecuación 17). [A1]

103
Anexo D. Métodos de calibración y localización 3D

D.2.2 CONFIGURACIÓN 2: CÁMARAS ALINEADAS

Fig. 46: Geometría en un sistema de visión estéreo con cámaras alineadas

La Fig. 45 representa la geometría del problema de la recuperación de la posición


(x,z) en el caso de cámaras en posición alineada. Cuando hablamos de “posición
alineada”, queremos decir que las cámaras han de estar situadas sobre el mismo
plano, enfocando en la misma dirección y que su desplazamiento relativo se hace
en el eje de las x., como la Fig. 46.

Fig. 47: Wiimotes alineados

104
Anexo D. Métodos de calibración y localización 3D

Esta configuración libera al sistema informático de gran cantidad de cálculos y


equivale al sistema de visión humana, de hecho, esta es la configuración más
extendida y la que se utiliza para grabar películas en tres dimensiones (Fig. 47).

Fig. 48: Cámara estereoscópica

Se puede analizar como una configuración singular de la geometría epipolar


(epipolos en el infinito), con lo que la matriz de parámetros intrínsecos sería la
indicada en Ecuación 18, o como describe la figura (Fig. 49)., que es una visión en
la que se pueden aplicar las propiedades de semejanza de triángulos y de
trigonometría [A6].

 f 0 0 0
 
K  0 f 0 0 
0 0 1 0 
 

Ecuación 18: Matriz de calibración con cámaras alineadas

Fig. 49: Enfoque epipolar de dos cámaras alineadas

105
Anexo D. Métodos de calibración y localización 3D

PARÁMETROS DE CALIBRACIÓN

Dada una pareja de correspondencias, los parámetros que necesitamos para


completar el sistema son dos (Fig. 46).:

• F = Distancia focal de cada cámara.

• B = 2h = Distancia relativa de las cámaras (distancia base).

La funciones de la biblioteca para esta configuración se encuentran en la clase


Geometría.

RECONSTRUCCIÓN 3D

Para el cálculo las tres coordenadas, se resuelven las respectivas igualdades


(Ecuación 19).

bf x1  Z y1  Z
Z X Y
x1  x2 f f

Ecuación 19: Reconstrucción 3D con cámaras alineadas

[A18]

106
ANEXO E:
ESTADO DEL ARTE

E.1 Proyectos relacionados


• Wiimote Virtual Reality Desktop
• Head Tracking For Desktop Vr Displays Using The Wii Remote
• Two-Handed Interaction In Open Space
• Wiimote 3d Library
• Optical Tracking Using Commodity Hardware
• Tangible 3D: Hand Gesture Interaction for Immersive 3D Modeling
• Virtual 3D Drawing Tool for Stage Performances
E.2 Interacción 3D
• Cursores 3D
• Tangible 3D

Explora la situación actual de líneas similares de investigación.


Anexo E. Estado del arte

E.1 PROYECTOS RELACIONADOS

WIIMOTE VIRTUAL REALITY DESKTOP

Concepto
Estimación de posición 3D basada en cuatro emisores con posición relativa fija
(Fig. 50):

Fig. 50: Patrón de cuatro LEDs del proyecto Wiimote Virtual Reality Desktop

Utiliza dos cámaras: una para localizar la cara del usuario y otra para el cursor
situado en la mano (Fig. 51):

Fig. 51: Posición de las cámaras en el proyecto Wiimote Virtual Reality Desktop

Tiene la limitación respecto a nuestro sistema de ser necesario un Wiimote para


cada punto a localizar. [A16]

108
Anexo E. Estado del arte

HEAD TRACKING FOR DESKTOP VR DISPLAYS USING THE WII REMOTE

Este es el proyecto que inspiró nuestro trabajo. (Fig. 52)

Fig. 52 Head Tracking For Desktop VR

El concepto es parecido al nuestro. Son necesarios dos emisores de infrarrojo, uno


en cada extremo de las gafas y una sola cámara. Estima la profundidad en función
de la separación de los puntos captados.
Su aplicación mueve el punto de vista de la cámara sobre una escena basada en
DirectX.
Nuestro proyecto utiliza dos mandos y un solo punto para cada posición que se
desea detectar. Lo que supone una mayor complejidad de conceptos geométricos
aplicados, pero mucha mayor versatilidad.

109
Anexo E. Estado del arte

TWO-HANDED INTERACTION IN OPEN SPACE

Este proyecto se basa en el reconocimiento de gestos en el espacio bidimensional.


Es capaz de reconocer movimientos de tipo pellizco en ambas manos, es decir,
relacionar dos focos de luz con el índice y pulgar de cada mano (Fig. 53) y
reconocer cuándo están lo suficientemente cerca como para representar un
pellizco. Con la detección de este único gesto y el uso de dos cursores (uno por
mano), se demuestra la capacidad de interacción que proporciona al estilo de las
demostraciones de pantallas táctiles. [A17]

Fig. 53: Two Handed Interaction In Open Space

110
Anexo E. Estado del arte

WIIMOTE 3D LIBRARY

Este proyecto no tiene apenas documentación en caracteres occidentales, pero al


ver el vídeo de demostración se ve cómo calcula correctamente la posición 3D de
un punto del espacio a partir de dos cámaras alineadas (Fig. 54). El código
disponible no proporciona más funciones. [W16]

Tenemos dudas de su correcto funcionamiento: en su vídeo de demostración, el


trazado del dibujo aparece antes de ser marcado.

Fig. 54: Wiimote 3D Library

111
Anexo E. Estado del arte

OPTICAL TRACKING USING COMMODITY HARDWARE

Un equipo de investigación de la Universidad de Cambridge demuestra en el


artículo “Optical tracking using commodity hardware” [A9] un método de
localización espacial de emisores de infrarrojo captados por dos cámaras Wiimote.
Demuestran unos resultados muy buenos, pero tiene el problema de tener que los
cálculos de calibración se hacen con MatLab, con lo que son necesarias la
importación y exportación de datos.
El proyecto se quedó en un ejercicio de investigación y, según dicen ellos, no está
enfocado a ser utilizado por aplicaciones externas.

Fig. 55: Optical Tracking Using Commodity Hardware

112
Anexo E. Estado del arte

TANGIBLE 3D: HAND GESTURE INTERACTION FOR IMMERSIVE 3D


MODELING

Este proyecto presenta una de las aplicaciones que teníamos en mente. Consiste
en un sistema inmersivo de modelado 3d. Para la detección de los punteros, utiliza
dos fragmentos de papel en los dedos (Fig. 56), para reflejar la “luz negra” (Fig.
57). [A5]

Fig. 56: Tangible 3d: Hand Gesture Interaction For Immersive 3d Modeling

Fig. 57. Lámparas fluorescentes de “luz negra”

113
Anexo E. Estado del arte

VIRTUAL 3D DRAWING TOOL FOR STAGE PERFORMANCES

Este reciente sistema calcula la posición 3D de un mejorado emisor infrarrojo (Fig.


58) en base a la geometría epipolar de hasta seis Wiimotes (Fig. 59).

Está enfocado al dibujo 3D en performances (Fig. 60) [A15].

Fig. 58: Demostración de dibujo 3D

Fig. 59: Posición de cuatro cámaras

Fig. 60: Puntero infrarrojo con visibilidad mejorada

114
Anexo E. Estado del arte

E.2 PERIFÉRICOS DE INTERACCIÓN 3D

RATONES 3D

Estos periféricos están indicados para simplificar la tarea de modelado 3D. En


general son muy completos (Fig. 61) pero también hay versiones simplificadas y
más asequibles (Fig. 62).

Fig. 61: Ratón 3D 3Dconnexion [W34]

El avance reside en su pieza central (Fig. 62), que permite movimientos en los tres
ejes.

Fig. 62. Movimientos posibles con un ratón 3D

115
Anexo E. Estado del arte

Las versiones previas de estos productos (Spaceball) tenían la pieza clave esférica
(Fig. 63). El la actualidad se consideran obsoletos comparados con los que
acabamos de exponer.

Fig. 63: Spaceball

TANGIBLE 3D

Este periférico permite interaccionar y sentir. El mecanismo aparatoso para estimar


la posición y orientación también se usa en otros proyectos no tactiles. (Fig. 64)

Fig. 64: Periférico Tangible 3D

116
ANEXO F:
DESCRIPCIÓN DE MATERIALES

F.1 Wiimotes
F.2 Cámara del Wiimote
F.3 Antena Bluetooth
F.4 Punteros de luz infrarroja
F.5 Trípode

Analiza las características técnicas de los materiales necesitados.


Anexo F. Descripción de materiales

F.1 WIIMOTES

Wiimote (abreviatura de “Wii remote”) es el término que se usa informalmente


para nombrar los mandos de la consola Wii de Nintendo.
Cada Wiimote está formado por un acelerómetro, unos botones y una cámara,
situada en la cara frontal (Fig. 66), capaz de captar hasta cuatro fuentes de luz
infrarroja. (Fig. 65)
Los datos se transmiten vía BlueTooth por el aire a la consola, que también es
capaz comunicarse con el Wiimote.
Programadores como han analizado los mensajes que se emiten y han creado
bibliotecas capaces de abstraer gran parte de la información intercambiada: como
pulsaciones de botones, orientación del mando o posición de los focos de
infrarrojos captados.
Se pueden conectar simultáneamente hasta cuatro Wiimotes, con pequeñas
modificaciones sobre las bibliotecas publicadas.
Actualmente se pueden adquirir a partir de 20 € c/u.

Fig. 65: Wiimote

118
Anexo F. Descripción de materiales

F.2 CÁMARAS DE LOS WIIMOTES

La cámara integrada en la cara frontal del Wiimote es monocromática y de 128 x


96 píxeles; pero no está preparada para usar como una cámara al uso: el Wiimote
lleva un preprocesador incorporado que mediante una técnica de análisis de
subpíxeles simula una precisión ocho veces mayor (1024 x 768).
La información que envía no es la de la imagen adquirida, sino las coordenadas x
e y de los centros de los cuatro focos de luz infrarroja de mayor intensidad; para
ello, delante del objetivo se encuentra un filtro paso-banda de longitud de onda
940 ± 40 nm, con lo que se consigue filtrar la luz visible para el ojo humano y
sólo adquiere la luz infrarroja de nuestros punteros.
Además, a cada foco se le asocia su intensidad en una escala de cinco grados. Su
angular es de aproximadamente 35º en el eje horizontal y de 25º en el vertical.
La frecuencia de envío de datos es de 100 Hz; es decir, 100 descripciones del
estado del Wiimote por segundo. [W11]

Fig. 66: Cámara infrarroja

119
Anexo F. Descripción de materiales

F.3 ANTENA BLUETOOTH

Para la comunicación con la computadora, se requiere una antena Bluetooth (Fig.


67). Las utilizadas para el proyecto se conectan a través del puerto USB y tienen el
aspecto de una memoria PenDrive USB. Su precio en el mercado es de 6 €.

Para su comunicación con el sistema se requiere un programa para establecer la


comunicación. El más utilizado es el BlueSoleil.

Fig. 67: Antena Bluetooth

120
Anexo F. Descripción de materiales

F.4 PUNTEROS DE LUZ INFRARROJA

Para la emisión de luz infrarroja, el mejor método es el de utilizar diodos emisores


de luz infrarroja, o más comúnmente llamados LEDs infrarrojos (LED: Light-
Emitting Diode). Como aparece en la descripción de las cámaras, la longitud de
onda idónea es la de 940 nm. Se han utilizado del modelo TSAL6400 [W33], su
voltaje es de entre 1.35 y 1.6 V, con lo que se puede acoplar sus patas
directamente a una pila común AA, sin necesidad de añadir resistencias ni
componentes adicionales, salvo, obviamente, el del interruptor en uno de los
punteros.

Fig. 68: Puntero infrarrojo

En el Anexo A.2 se adjuntas indicaciones para el montaje casero de los punteros.

121
Anexo F. Descripción de materiales

F.5 TRÍPODE

Para conseguir un trípode que pudiera colocar nuestros Wiimotes en la posición


deseada, se tomaron dos opciones: la primera fue utilizar un pie de micrófono (Fig.
70) y la segunda fue separar de una vieja cámara la pieza que conecta con un
trípode de cámaras fotográficas, para encajar el Wiimote como si de una cámara de
fotos se tratara (Fig. 69-70).

Fig. 69: Wiimote adaptado para trípode fotográfico

Fig. 70: Trípodes para el Wiimote

122
ANEXO G:
RESTRICCIONES FÍSICAS

G.1 Montaje
G.2 Direccionalidad
G.3 Interferencias
G.4 Longitud de onda
G.4 Angular de las cámaras

Análisis de las limitaciones de los medios físicos.


Anexo G. Restricciones físicas

Actualmente hay muchos proyectos en curso relacionados con las posibilidades de


interacción del PC con el Wiimote, pero cuando se comenzó el proyecto había muy
poca documentación sobre el tema. Así que los que estábamos desarrollando
proyectos similares, hemos tenido que superar adversidades que cualquiera que
empezara ahora se evitaría si lee algo de otros proyectos similares.
Las restricciones físicas a resolver se pueden diferenciar en los siguientes grupos:
• Montaje
• Direccionalidad
• Interferencias
• Longitud de onda
• Angular de las cámaras de los Wiimotes

G.1 MONTAJE

Uno de los temas delicados en cuanto a la preparación de los materiales para el


sistema, era la correcta configuración del puntero infrarrojo: en los primeros
tutoriales sobre cómo fabricar un puntero infrarrojo se indicaba que se debía
conseguir un puntero de un LED y sustituirlo por un diodo de luz infrarroja.
Funcionaba, pero defectuosamente: el punto se captaba de forma discontinua e
irregular. Como no teníamos ninguna evidencia de que el punto se debía captar
mejor, continuamos operando de esta manera varios meses, durante los cuales
hubimos de comprar, desmontar y montar infinidad de mecheros y bolígrafos con
luz en bazares orientales, hasta que decidimos montar un puntero con pilas de
mayor capacidad. A veces funcionaba bien durante un periodo que oscilaba entre la
hora y los dos días; otras veces, se captaba mal directamente. Las pilas eran muy
pequeñas, y por el precio de loa artículos en las que se encontraban, de baja
calidad; con lo que tener un puntero fiable era una necesidad.
Con la compra de una remesa de los LEDs recomendados por el autor de la librería
Wiimotelib, se encargó un puntero ya fabricado
Con la ayuda del personal de apoyo a la invesitigación, fabricamos un puntero con
pilas comunes AA y un interruptor. Algo fallaba, ya que no emitía luz. Adquirimos
una nueva remesa de diodos y con su identificador encontramos su hoja de
especificaciones. La solución era la más sencilla posible: el voltaje de caída de uno
de estos diodos era similar al de una pila AA, con lo que al conectarlo directamente
en los bornes, daba una luz muy buena, mucho mejor que cualquiera de los
punteros anteriores. De hecho, al probar la nueva luz con los Wiimotes, vimos que
habríamos trabajado mucho mejor y nos habríamos ahorrado mucho tiempo y
esfuerzo si hubiéramos dado este paso antes.

124
Anexo G. Restricciones físicas

La explicación está en que las minúsculas pilas de botón que se utilizaban al


principio tenían muy poca capacidad y el voltaje teórico, que en muchos casos se
apreciaba al principio, disminuía con muy poco uso.

G.2 DIRECCIONALIDAD

Otro de los problemas de los emisores infrarrojo es su direccionalidad: la luz es


sólo detectable con la cámara del Wiimote si apunta directamente a ella, con muy
poco ángulo de margen, cerca de 20º, según el modelo (Fig. 71). Es decir,
necesitamos que las cámaras estén enfrentadas a nuestros emisores, lo que impide
la libre disposición de los mandos. La Fig. 70 ilustra la visibilidad de la luz en
función del águlo de visión de nuestros LEDs TSAL6400.

Fig. 71: Relación ángulo-luz en los diodos TSAL6400

Para subsanar esta limitación, la solución adoptada ha sido la de conectar cuatro


LEDs en serie a las pilas. De esta forma, se disponen en forma de rombo, con
ligeras diferencias de orientación los cuatro emisores, para conseguir un mayor
ángulo de visibilidad.
Esta decisión podía causar dos problemas: el primero es el de que sea detectados
más de un punto por cursor, cuando nuestros cuatro emisores representan un
único punto; y el segundo es la falta de precisión que implica que nuestro punto
sea realmente el punto de los cuatro que consiga detectar.
El problema de la detección de puntos adicionales sólo se presenta cuando se está
muy cerca de los Wiimotes (en torno a 20-30 cm.) y el segundo problema sólo es
relevante en la misma situación, ya que al alejarse, la distancia entre los cuatro
emisores es mínima y sólo implicaría que sitúe el punto unos pocos milímetros más
atrás.

125
Anexo G. Restricciones físicas

G.3 INTERFERENCIAS

La luz infrarroja se encuentra presente en muchos lugares y situaciones, con lo que


puede ser necesario tomar medidas o simplemente tener en cuenta este hecho
para evitar que el sistema confunda nuestros punteros con otro fenómeno
lumínico.
La refracción de cualquier luz puede descomponer la luz inicial en luz de la longitud
de onda que reconocen los Wiimotes. Por ello a veces pude ser necesario bajar las
persianas o intentar, en la medida de lo posible, no orientar el sistema de
reconocimiento hacia la luz solar. De todas formas, todos estos problemas son
detectables con el programa de demostración, de tal forma que antes de iniciar
una aplicación podemos localizar y evitar la fuente de nuestro problema, si está
relacionado con interferencias infrarrojas.
El proceso de incandescencia de las bombillas o de velas también genera luz dentro
del rango visible de los Wiimotes.
Además de interferencias externas, pueden generarse reflejos de los propios
emisores que pretendemos captar. Este problema se puede presentar si se
interactúa sobre una superficie que refleje, como algunas mesas.

G.4 LONGITUD DE ONDA

Cuando comenzamos el proyecto, no existía documentación acerca de la longitud


de onda más apropiada para su adquisición a través de los Wiimotes. Se suponía
que la cámara era capaz de captar luz infrarroja independientemente de su
longitud de onda. Esto es cierto parcialmente, pues los diodos con longitudes de
onda que no son las empíricamente comprobadas como ideales (940 nm.) son
detectados pero con menor consistencia.
La asunción de que se trabajaba igual a diferentes frecuencias nos ocasionó un
problema imprevisto:
Como solución a la excesiva direccionalidad de los diodos, se pensó en usar una
fuente potente de luz infrarroja y con cinta reflectante reflejarla en los puntos que
sean de nuestro interés, de tal forma que los puntos con dicho material funcionen
como los diodos utilizados pero sin el problema de la direccionalidad. Para ello se
compró un potente fojo de luz infrarroja (Fig. 72) en una tienda de videovigilancia
encontrada en Internet, y cinta reflectante (Fig. 73) en otra de náutica.

126
Anexo G. Restricciones físicas

Fig. 72: Foco de luz infrarroja

Los resultados no fueron buenos: la luz directa del foco sí era detectada de cerca,
pero no lo era cuando ésta estaba reflejada. Esto se debe a que la longitud de onda
del foco era de 850 nm. mientras que la óptima de las cámaras de los Wiimotes es
de 940 nm.

Fig. 73: Cinta reflectante

Además, durante las pruebas, notamos ciertas molestias en los ojos que pueden
ser causadas por la incidencia directa de una luz potente que no activa la
contracción de las pupilas. Por nuestra salud, decidimos aparcar esta variante, pero
contemplarla como opción a tener en cuenta si se usara una luz más tenue o si se
añadiera una luz visible sincronizada con la infrarroja, para así contraer las pupilas.

127
Anexo G. Restricciones físicas

G.5 ANGULAR DE LAS CÁMARAS

Las cámaras de los Wiimotes tienen un angular de entre 20 y 30 grados


sexagesimales en los ejes Y y Z respectivamente. Esto no es un problema, pero sí
una restricción a tener en cuenta. Con el programa de demostración, se aprecia
empíricamente la visibilidad de cada punto. La causa de que un punto no sea
percibido por la cámara se presenta más frecuentemente a causa de la
direccionalidad de los emisores antes mencionada que por no estar en el espacio
visible por las cámaras (Fig. 74).

Fig. 74: Angular del eje X de las cámaras de los Wiimotes

128
ANEXO H:
BIBLIOTECA

H.1 Clase Geometría


H.2 Clase Geometría Epipolar
H.3 Clase Gestos
H.4 Clase Dibujar
H.5 Clase Mapeo

Explicación de las clases, sus funciones y funcionamiento.


Anexo H. Biblioteca

H.1 CLASE GEOMETRÍA

La clase Geometría contiene los tipos, métodos y atributos necesarios para


abstraer y poder utilizar los conceptos básicos de calibración y localización espacial
independientes de la geometría epipolar.

ESQUEMA DE LA CLASE GEOMETRÍA

clase estática Geometría

TIPOS:

clase Punto2D: números reales x,y;

clase Punto3D: números reales x,y,z;

clase Correspondencia: Punto2D pA,pB;

MÉTODOS:

real CalculaDistanciaBasal
(Punto2D p(100)izq,p(100)dch,p(000)izq,p(000)dch)

real CalculaDistanciaFocal
(Punto2D p(000)izq, p(000)dch, p(001)izq, p(001)dch)

Punto3D Calcula3D
(Punto2D pA, pB; real DistanciaBasal, DistanciaFocal)

130
Anexo H. Biblioteca

DESCRIPCIÓN DE LA CLASE GEOMETRÍA

TIPOS:

clase Punto2D: números reales x,y;

La clase Punto2D contiene las coordenadas (x, y) de un punto del plano.

clase Punto3D: números reales x,y,z;

La clase Punto3D contiene las coordenadas (x, y, z) de un punto del espacio.

clase Correspondencia: Punto2D pA,pB;

La clase Correspondencia es la abstracción de la relación inherente entre las dos


proyecciones de un mismo punto del espacio sobre las dos cámaras.

131
Anexo H. Biblioteca

MÉTODOS:

real CalculaDistanciaBasal
(Punto2D p(100)izq,p(100)dch,p(000)izq,p(000)dch)

CalculaDistanciaBasal calcula la distancia entre Wiimotes tomando como unidad


de distancia la distancia entre los puntos introducidos en la calibración.

Entrada: Proyecciones de nuestros puntos (1,0,0) , (0,0,0).

Salida: Distancia de las cámaras en unidades de medida proporcionales a


nuestra distancia entre los puntos anteriores.

real CalculaDistanciaFocal
(Punto2D p(000)izq, p(000)dch, p(001)izq, p(001)dch)

CalculaDistanciaFocal calcula la distancia focal de las cámaras a partir de los


puntos adquiridos en la etapa de calibración.

Entrada: Proyecciones de nuestros puntos (0,0,0) , (0,0,1).

Salida: Distancia focal en unidades de medida proporcionales a nuestra distancia


entre los puntos anteriores.

Punto3D Calcula3D
(Punto2D pA, pB; real DistanciaBasal, DistanciaFocal)

Calcula3D calcula la posición espacial del punto cuyas proyecciones son los datos
de entrada de la función.

132
Anexo H. Biblioteca

H.2 CLASE GEOMETRÍA EPIPOLAR

Esta clase contiene los atributos del sistema métodos y funciones auxiliares
referidos a la geometría epipolar.

ESQUEMA DE LA CLASE GEOMETRÍA EPIPOLAR

ATRIBUTOS DE CLASE:

Matriz3x3 Homografía;
Matriz3x3 Fundamental;
Matriz3x4 Cámara1;
Matriz3x4 Cámara2;
Punto3D Origen;

133
Anexo H. Biblioteca

MÉTODOS:

Punto2D CalculaHomogéneo
(Punto2D p)

Punto2D Intersección
(Punto2D r1_a, r1_b, r2_a, r2_b)

CalculaCámaras
(Punto2D epipolo)

real CalculaÁngulo
(Punto3D r1_a, r1_b, r2_a, r2_b)

Punto3D ProductoVectorial
(Punto3D dir1, dir2)

Punto3D Normaliza
(Punto3D vector1)

Punto3D CalculaTraslación
(Punto2D pto_origen_a, pto_origen_b)

CalculaRotación
(Punto3D Dir1, Dir2)

Calibración
(Punto3D p(000),p(111))

Punto3D Calcula3D
(Punto2D Proy1, Proy2)

Punto3D Calcula3D2
(Punto2D Proy1, Proy2)

134
Anexo H. Biblioteca

DESCRIPCIÓN DE LA CLASE GEOMETRÍA EPIPOLAR

MÉTODOS:

Punto2D CalculaHomogéneo
(Punto2D p)

CalculaHomogéneo calcula, a partir de la proyección de un punto del plano


definido, su homogéneo, es decir su proyección sobre la segunda cámara.

Si el punto no forma parte del plano, es útil para el cálculo de los epipolos.

Entrada: Proyección de nuestro punto sobre la primera cámara.

Salida: Su punto homogéneo.

Punto2D Intersección
(Punto2D r1_a, r1_b, r2_a, r2_b)

Intersección calcula el punto 2D intersección de dos rectas del plano. Cada recta
la definimos por dos puntos que pertenezcan a ella.

Entrada: 2 puntos de la primera recta y otros dos de la segunda.

Salida: Punto intersección de las rectas que definen los puntos de entrada.

CalculaCámaras
(Punto2D epipolo)

CalculaCámaras calcula las matrices de proyección canónicas a partir de la matriz


fundamental F y el segundo epipolo e ' . La matriz fundamental F ha de estar
previamente calculada por uno de los dos métodos disponibles.

Entrada: Epipolo de la seguna cámara y matriz fundamental F .

Salida: Matrices de proyección canónicas del sistema: P1  [I | 0] y P2 .

135
Anexo H. Biblioteca

real CalculaÁngulo
(Punto3D r1_a, r1_b, r2_a, r2_b)

CalculaÁngulo calcula el ángulo formado por los dos vectores directores.

Entrada: 2 puntos 3D que representan la dirección de los vectores.

Salida: Ángulo formado por los dos vectores (en radianes).

Punto3D ProductoVectorial
(Punto3D dir1, dir2)

ProductoVectorial calcula la dirección del vector resultado de su producto


vectorial (sin normalizar).

Entrada: 2 puntos 3D que representan la dirección de los vectores.

Salida: Dirección del vector producto vectorial.

Punto3D Normaliza
(Punto3D vector1)

Normaliza convierte un vector 3D cualquiera en su equivalente de modulo uno.

Entrada: Punto3D vector1 representa un vector, cuya dirección son sus


componentes (x, y, z) .

Salida: El vector equivalente, con módulo unidad.

Punto3D CalculaTraslación
(Punto2D pto_origen_a, pto_origen_b)

CalculaTraslación guarda la posición 3D del punto, calculada a partir de sus


respectivas proyecciones. La traslación y la rotación son los parámetros necesarios
para definir un cambio de sistema de referencia y así permitir al usuario definir el
suyo.

Entrada: Las dos proyecciones del origen del sistema de referencia elegido por el
usuario.

Salida: Guarda como atributo de clase la posición 3D del origen y si se desea se


puede utilizar desde la salida de la función.

136
Anexo H. Biblioteca

CalculaRotación
(Punto3D Dir1, Dir2)

CalculaRotación la matriz de rotación correspondiente a la transformación del


sistema de referencia de Dir1 a Dir2.

Entrada: 2 vectores.

Salida: Guarda como atributo de clase la matriz de rotación.

Calibración
(Punto3D p(000),p(111))

Entrada: Puntos (0,0,0) y (1,1,1).

Salida: Aplica el factor de escalado a los atributos de clase correspondientes a


las matrices de cámara: Cámara1 y Cámara2.

Punto3D Calcula3D
(Punto2D Proy1, Proy2)

Calcula3D calcula la posición 3D que representan las proyecciones, basándose en


los datos guardados en la calibración y definición del sistema de referencia. Se
diferencia de la función Calcula3D2 en que el método de resolución del sistema
utiliza la descomposición SVD, mucho más fiable que los métodos tradicionales de
resolución de sistemas.

Entrada: Las 2 proyecciones de un punto del espacio.

Salida: Su posición 3D.

Punto3D Calcula3D2
(Punto2D Proy1, Proy2)

Calcula3D2 calcula la posición 3D que representan las proyecciones como en la


función Calcula3D2 pero en vez de resolverlo usando la descomposición SVD, lo
hace por mínimos cuadrados.

Entrada: Las 2 proyecciones de un punto del espacio.

Salida: Su posición 3D.

137
Anexo H. Biblioteca

H.3 CLASE GESTOS

La clase Gestos es la encargada del reconocimiento de gestos predefinidos. El


reconocimiento de gestos se basa en la descomposición de la trayectoria en
segmentos con misma dirección.
Una vez terminado el gesto, se analizan las direcciones y se busca en la biblioteca.
Si existe el gesto, se devuelve su identificador, además de un evento -que puede
ser o no tratado- que contiene la información del gesto reconocido y la posición en
la que se comenzó el gesto.
Esta versión de la biblioteca es capaz de distinguir gestos de uno o dos segmentos,
además del click.
Las direcciones contempladas son las seis básicas del espacio 3D: izquierda,
derecha, arriba, abajo, delante y detrás.
Así, la biblioteca Gestos, tal y como está implementada actualmente, reconoce
1  6  6 * 5  37 gestos. A cada gesto se le puede asignar una tarea diferente,
con lo que he considerado que es un número más que suficiente de gestos
diferentes reconocidos.

138
Anexo H. Biblioteca

ESQUEMA DE LA CLASE GESTOS

MÉTODOS PÚBLICOS

ComienzaGesto (Punto3D Posición)

ContinúaGesto (Punto3D Posición)

Gesto TerminaGesto (Punto3D Posición)

EVENTOS PÚBLICOS

ArgsEventosGesto

( Gesto3D Gesto;

Punto3D PuntoInicial)

TIPOS PÚBLICOS

Los gestos que reconoce la biblioteca son los siguientes:

Gestos simples (Fig. 75):

Fig. 75: Gestos simples reconocibles

139
Anexo H. Biblioteca

Gestos compuestos (Fig. 76):

Fig. 76: Gestos compuestos reconocibles

140
Anexo H. Biblioteca

DESCRIPCIÓN DE LA CLASE GESTOS

MÉTODOS PÚBLICOS

ComienzaGesto
(Punto3D PosiciónInicial)

ComienzaGesto es la función que se debe invocar cuando detectemos que el usuario


está comenzando un gesto. Esta función es la encargada de activar el mecanismo
de reconocimiento de gestos.
Entrada: Posición en la que iniciamos el gesto.
Salida: Inicia el reconocimiento de gestos.

ContinúaGesto
(Punto3D PosiciónActual)

ContinúaGesto es la función encargada de comparar la distancia euclídea entre la


posición actual y la posición inicial de tramo; en caso de que sea mayor que el
umbral definido, se reconoce la dirección y se añade a la lista de direcciones de
tramo.
Entrada: Posición actual del cursor 3D.
Salida: Actualización (si procede) de la lista de direcciones de tramo.

Gesto TerminaGesto
()

TerminaGesto desactiva el mecanismo de reconocimiento de gestos, analiza la lista


de direcciones de tramo y devuelve el gesto en caso de ser reconocido. Además
envía en forma de eventos la información del gesto, para así poder ser tratada
asíncronamente en cualquier parte del programa.

Salida: Gesto reconocido.

141
Anexo H. Biblioteca

CLASE DIBUJAR

La clase Dibujar encapsula ciertas funciones de dibujo de rectas y puntos en


OpenGl, API que facilita el dibujo en 3D.

Para utilizarla es necesario haber instalado un wrapper de OpenGl (se explica cómo
en Anexo A.3).

FUNCIONES DE LA CLASE DIBUJAR

Inicia
(real anguloX, anguloY,anguloZ)

DibujaPunto
(Punto2D Punto)

DibujaPunto
( Punto2D Punto;
real Grosor;
real Rojo;
real Verde;
real Azul)

DibujaPuntoInvertido
(Punto2D Punto)

Dibuja
(Punto3D Punto)

DibujaLínea
(Punto3D Punto1, Punto2)

DibujaLínea
(Punto2D Punto1, Punto2)

DibujaEjes
()

DibujaGuíasPunto
(Punto3D Punto)

142
Anexo H. Biblioteca

DESCRIPCIÓN DE LAS FUNCIONES DE LA CLASE DIBUJAR

Inicia
(real anguloX, anguloY,anguloZ)

Inicia actualiza el punto de vista del sistema en función de los tres ángulos
introducidos.

DibujaPunto
(Punto2D Punto)

DibujaPunto dibuja el punto 2D correspondiente sobre el plano Z=0 sin cambiar


los parámetros de color y de tamaño.

DibujaPunto
( Punto2D Punto;
real Grosor;
real Rojo;
real Verde;
real Azul)

DibujaPunto dibuja el punto 2D correspondiente sobre el plano Z=0, como la


función anterior pero definiendo el tamaño de punto (Grosor) y el color con las
componentes en tanto por uno de Rojo, Verde y Azul.

DibujaPuntoInvertido
(Punto2D Punto)

DibujaPuntoInvertido dibuja el punto 2D correspondiente sobre el plano Z=0 sin


cambiar los parámetros de color y de tamaño, pero cambiando de signo la X,
visualización más natural (tipo espejo) para el usuario que tenga las cámaras
frente al usuario.

143
Anexo H. Biblioteca

Dibuja
(Punto3D Punto)

DibujaPunto dibuja el punto 3D correspondiente sin cambiar los parámetros de


color y de tamaño.

DibujaLínea
(Punto3D Punto1, Punto2)

DibujaLínea dibuja la línea 3D que pasa por los puntos introducidos, sin cambiar
los parámetros de color y de tamaño.

DibujaLínea
(Punto2D Punto1, Punto2)

DibujaLínea dibuja la línea 2D sobre el plano Z=0 que pasa por los puntos
introducidos, sin cambiar los parámetros de color y de tamaño.

DibujaEjes
()

DibujaEjes dibuja los tres ejes de coordenadas en los intervalos entre -1 y 1.

DibujaGuíasPunto
(Punto3D Punto)

DibujaEjes dibuja las tres rectas tangentes a los planos X=0, Y=0 y Z=0; y sus
respectivas proyecciones sobre los otros dos planos. La utilizamos para visualizar
mejor la localización espacial de los puntos de nuestro interés.

144
Anexo H. Biblioteca

H.4 CLASE MAPEO

La clase Mapeo es una breve y sencilla clase que escribimos para aprovechar la
potencia del reconocimiento de gestos. Por su utilidad, hemos decidido incluirla en
la biblioteca y no enterrarla como una clase propia del programa de demostración.
La función de esta clase es la de leer un archivo de configuración y ejecutar las
órdenes de acuerdo a los gestos que se reconozcan.
Las configuraciones que recogen las relaciones movimiento-cursor o gesto-evento se
encuentran en archivos *.xml, que son fácilmente editables siguiendo las
convenciones del lenguaje XML; y se puede cargar uno u otro, según convenga para
cada aplicación.

DESCRIPCIÓN DE LA CLASE MAPEO

Ejecuta
(Gesto GestoReconocido, cadenaTxt NombreXml)

Ejecuta abre el archivo NombreXml.xml, busca el par cuyo campo Gesto sea igual
al reconocido, y envía el evento de teclado o la acción descrita.

Entrada: Gesto reconocido y nombre del archivo de configuración.

Salida: Acción descrita en el archivo de configuración.

145
ANEXO I:
FUNCIONES Y ATRIBUTOS
EXTERNOS UTILIZADOS

I.1 WiimoteLib
I.2 OpenGl
I.3 OpenCV
I.4 DotNetMatrix
J.4.1 GeneralMatrix
J.4.2 SingularValueDecomposition
J.4.3 LinearEquationSolver
I.5 AutoItLib

Breve revisión del material ajeno utilizado en la programación.


Anexo I. Funciones y atributos externos utilizados

I.1 BIBLIOTECA WIIMOTELIB

WiimoteLib es la biblioteca encargada de abstraer la comunicación con los


Wiimotes.

TIPOS:

clase WiimoteState:
entero indexID;
IRState IRstate;
evento WiimoteChangedEventHandler OnWiimoteChanged;

[..];

estructura IRState:
entero RawX1, RawX2;
entero RawY1, RawY2;
entero Size1, Size2;
booleano Found1, Found2;
real X1, X2;
real Y1, Y2; [..];

MÉTODOS:

clase Wiimote:
booleano Connect;
booleano Disconnect;
[..];

Delegado WiimoteChangedEventHandler
( object sender,
WiimoteChangedEventArgs args)

147
Anexo I. Funciones y atributos externos utilizados

booleano Connect
()

Connect establece la conexión de la instancia Wiimote que ejecute el método.

booleano Disconnect
()

Disconnect cierra el hilo de comunicación con el Wiimote.

booleano WiimoteChangedEventHandler
(object sender, WiimoteChangedEventArgs args)

WiimoteChangedEventHandler es el manejador que controla los eventos del


Wiimote contenidos en WiimoteChangedEventArgs args.

EVENTOS

clase WiimoteState:
entero indexID;
IRState IRstate;
evento WiimoteChangedEventHandler OnWiimoteChanged;
[..];

estructura IRState:
entero RawX1, RawX2;
entero RawY1, RawY2;
entero Size1, Size2;
booleano Found1, Found2;
real X1, X2;
real Y1, Y2; [..];

entero indexID

indexID identifica el número de mando.

148
Anexo I. Funciones y atributos externos utilizados

IRState IRstate

IRstate es una estructura que contiene la información que obtiene el Wiimote en


cada momento.

entero RawXi,RawYi

RawXi,RawYi son las coordenadas de cada punto i adquirido en la escala de


píxeles de la cámara Wiimote tal que x  [0..1023] e y  [0..767] .

real Xi,Yi

RawXi,RawYi son las coordenadas de cada punto i adquirido en la escala absoluta


del rango visible de la cámara Wiimote tal que x, y  [0..1] .

booleano Foundi

Foundi devuelve verdadero si el punto i es visible, falso si no lo es.

evento WiimoteChangedEventHandler OnWiimoteChanged

OnWiimoteChanged es el evento que nos indica que ha habido un cambio en el


estado del Wiimote: movimiento del mando, cambios en los puntos adquiridos,
botón pulsado o soltado… Se debe añadir una función que maneje estos eventos
para cada mando conectado con el sistema.

149
Anexo I. Funciones y atributos externos utilizados

I.2 BIBLIOTECA OPENGL

Biblioteca encargada de la representación gráfica.

FUNCIONES

InitializeContexts();
Invalidate();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glPushMatrix();
glColor3f(Red, Green, Blue);
glPointSize(Grosor);
glVertex3f(Punto.x, Punto.y, 0f);
glBegin(GL_POINTS);
glEnd();
glBegin(GL_LINES);
glEnd();
glFlush;
glRotatef(anguloX, 1.0f, 0.0f, 0.0f);
glRotatef(anguloY, 0.0f, 1.0f, 0.0f);
glRotatef(anguloZ, 0.0f, 0.0f, 1.0f);

150
Anexo I. Funciones y atributos externos utilizados

I.3 TOOL-KIT OPENCV

OpenCv proporciona herramientas para el campo de la Visón por Computador.

TIPOS

estructura CvMat
( entero cols;
IntPtr data;
entero hdr_refcount;
entero height;
IntPtr ptr;
IntPtr refcount;
entero rows;
entero step;
entero type;
entero width)

CvMat es la estructura que maneja las colecciones de datos dentro de la biblioteca


OpenCV. En nuestro caso, esta estructura contendrá tanto las matrices que
queremos calcular (la matriz fundametal y las de las cámaras), como la colección
de correspondencias .que necesita la función cvFindFundamentalMat.

FUNCIONES

CvMat CvCreateMat
( entero rows;
entero cols;
entero type;)

CvCreateMat crea un elemento de tipo CvMat (matriz o vector) del tipo y


tamaño de filas y columnas introducido.

151
Anexo I. Funciones y atributos externos utilizados

CvSetReal2D
( ref CvMat arr;
entero idx0;
entero idx1;
real value)

CvSetReal2D asigna value a la componente (idx0,idx1) de la matriz arr.

CvSetZero
( ref CvMat arr)

CvSetZet inicializa la matriz arr con ceros.

CvTranspose
( ref CvMat src;
ref CvMat dst)

CvTranspose asigna a dst la transpuesta de src.

CvSVD
( ref CvMat A;
ref CvMat W;
ref CvMat U;
ref CvMat V;
entero flags;)

CvSVD hace la descomposición SVD de la matriz A, de tal forma que A  UWV T ,


con W diagonal; y U=V, matriz de vectores propios.

CvReleaseMatrix
( ref CvMat mat)

CvSVD libera la memoria ocupada por la matriz mat.

152
Anexo I. Funciones y atributos externos utilizados

Entero CvFindFundamentalMat (
Matriz2xN_Ptos CjtoProyecciones1,
Matriz2xN_Ptos CjtoProyecciones2,
Matriz3x3 MatrizFundamental,
Entero Método=RANSAC,
Real ErrorMáximo,
Real NivelDeConfianza,
Vector Rechazados=0);

ENTRADAS

CjtoProyecciones1 y CjtoProyecciones2 son las matrices que recogen de


correspondencias de proyecciones de puntos. La primera fila de cada matriz
corresponde a las coordenadas x de las proyecciones de la respectiva cámara, y
la segunda a las y. Han de ser de identica longitud y el número de puntos
adquiridos ha de ser mayor que ocho. La precisión del método aumenta al
introducir más puntos.

ErrorMáximo es la mayor distancia que toleramos de una proyección a la recta


epipolar calculada con la otra proyección y la matriz fundamental F que estamos
buscando.

NivelDeConfianza es el tanto por uno de posibilidades de que la matriz


fundamental F sea calculada.

SALIDAS

Devuelve 0 si no encontrado, 1 si encontrada una solución.

Matriz3x3 MatrizFundamental: matriz fundamental calculada.

Vector Rechazados: vector del tamaño de la cantidad de puntos introducidos con


un 1 si la pareja de puntos forma parte del conjunto consenso Si , y un 0 si el
punto ha sido rechazado.

153
Anexo I. Funciones y atributos externos utilizados

I.A PAQUETE DOTNETMATRIX

Herramientas para la operación con matrices en .Net.

I.4.1 CLASE GENERALMATRIX

constructor GeneralMatrix
( entero m;
entero n)

GeneralMatrix es el método constructor de la clase GeneralMatrix. Crea un


objeto GeneralMatrix que representa una matriz de dimensiones mxn (m filas y
n columnas).

SetElement
( entero i;
entero j;
real s)

SetElement asigna a la componente [i,j] del objeto GeneralMatrix que lo invoca


el valor s.

real GetElement
( entero i;
entero j)

GetElement devuelve el valorde la componente [i,j] del objeto GeneralMatrix


que lo invoca.

154
Anexo I. Funciones y atributos externos utilizados

I.4.2 CLASE SINGULARVALUEDECOMPOSITION

ATRIBUTOS DE CLASE

SingularValueDecomposition:
matriz U;
matriz V;
vector s;
entero m;
entero n)

U y V son las matrices U y V de la descomposición en valores singulares SVD, s


almacena en forma de vector la diagonal de la matriz diagonal S de la
descomposición SVD, es decir, su valor singulares.

MÉTODOS DE CLASE

GeneralMatrix GetU
()

GetU() devuelve el atributo U de la clase invocante, matriz de tipo


GeneralMatrix que representa los valores singulares izquierdos de la matriz
descompuesta.

GeneralMatrix GetV
()

GetV() devuelve el atributo V de la clase invocante, matriz de tipo


GeneralMatrix que representa los valores singulares derechos de la matriz
descompuesta.

155
Anexo I. Funciones y atributos externos utilizados

I.4.3 CLASE LINEAREQUATIONSSOLVER

Pequeña clase para la resolución de sistemas con matrices por el método de


Gauss-Jordan.

FUNCIONES

booleano GaussianEliminator
( matriz a)
vector r;)

GaussianEliminator almacena en r la solución del sistema del sistema de


ecuaciones definido por la matriz ampliada a.


x  y  10
Ejemplo de uso: queremos resolver el sistema sencillo: 


2x  y  14

1 1 10 
Nuestra matriz ampliada a será la siguiente:  
2 1 14 
 

Tenemos dos incógnitas (x e y), con lo que r será un vector de longitud dos, con la
primera componente el valor de x que cumple las ecuaciones y con y en la
segunda.

ShowMatrix
( matriz a)
cadena Title;)

ShowMatrix muestra por consola el contenido de la matriz a.

ShowSolution
( vector r;)

ShowSolution muestra por consola el contenido del vector solución a.

156
Anexo I. Funciones y atributos externos utilizados

I.5 BIBLIOTECA AUTOITLIB

La biblioteca AutoItLib contiene las herramientas necesarias para interaccionar


con la GUI de Windows.

En nuestro caso, la utilizamos para simular la entrada de teclado. Con esta


herramienta y nuestra biblioteca se pueden integrar diferentes filosofías de
interacción, como reemplazar el cursor del ratón por nuestro emisor 3D o asociar
comportamientos específicos según sea el campo de aplicación.

FUNCIONES UTILIZADAS

Send
( cadena keys;
entero flag)

Send simula la pulsación de las teclas contenidas en keys. Si flag=1, se simulan


las teclas de cada carácter de la cadena; si flag=0, se pueden mandar teclas no
alfanuméricas o comandos como “mantener pulsado” o “soltar tecla”.

Su página web proporciona los códigos relacionados con cada tecla o combinación
de teclas.

157
ANEXO J:
GLOSARIO

Recoge definiciones de los tecnicismos utilizados en la documentación, y de


conceptos que probablemente resulten desconocidos al lector y no han sido
explicados en el texto.
Anexo J. Glosario

Anaglifo: Superposición de dos imágenes, una en color rojo y otra en verde,


que producen, al ser miradas con lentes especiales, una impresión
de relieve.
Avatar: En Internet y otras tecnologías de comunicación modernas, se
denomina avatar a una representación gráfica, generalmente
humana, que se asocia a un usuario para su identificación. Los
avatares pueden ser fotografías o dibujos artísticos, y algunas
tecnologías permiten el uso de representaciones tridimensionales .
API: Una interfaz de programación de aplicaciones o API (del inglés
application programming interface) es el conjunto de funciones y
procedimientos (o métodos, en la programación orientada a
objetos) que ofrece cierta biblioteca para ser utilizado por otro
software como una capa de abstracción. Usados generalmente en
las bibliotecas.
Biblioteca: En ciencias de la computación, una biblioteca es un conjunto de
subprogramas utilizados para desarrollar software. Las bibliotecas
contienen código y datos, que proporcionan servicios a programas
independientes, es decir, pasan a formar parte de éstos. Esto
permite que el código y los datos se compartan y puedan
modificarse de forma modular.
Biomedicina: La biomedicina es la disciplina que se ocupa de estudiar los
movimientos del cuerpo humano, bajo circunstancias y
condiciones diferentes. Además, analiza la energía y las cargas
mecánicas involucradas en dichos movimientos.
Bluetooth: Bluetooth es una especificación industrial para Redes Inalámbricas
de Área Personal (WPANs) que posibilita la transmisión de voz y
datos entre diferentes dispositivos mediante un enlace por
radiofrecuencia en la banda ISM de los 2,4 GHz.
Cursor: Marca movible, que sirve como indicador en la pantalla de
diversos aparatos, p. ej., de un computador.
Dll: Dynamic Link Library o más comúnmente DLL (en español
biblioteca de enlace dinámico) es el término con el que se refiere
a los archivos con código ejecutable que se cargan bajo demanda
de un programa por parte del sistema operativo. Esta
denominación se refiere a los sistemas operativos Windows siendo
la extensión con la que se identifican los ficheros, aunque el
concepto existe en prácticamente todos los sistemas operativos
modernos.
Estructura de datos: En programación, una estructura de datos es una forma de
organizar un conjunto de datos elementales con el objetivo de
facilitar su manipulación. Un dato elemental es la mínima
información que se tiene en un sistema. Una estructura de datos
define la organización e interrelación de éstos y un conjunto de
operaciones que se pueden realizar sobre ellos.

159
Anexo J. Glosario

Evento: Un evento es un mensaje de software que indica que algo ha


ocurrido, como un tecleo o un click de un mouse.
GUI: La interfaz gráfica de usuario, conocida también como GUI (del
inglés graphical user interface) es un tipo de interfaz de usuario
que utiliza un conjunto de imágenes y objetos gráficos para
representar la información y acciones disponibles en la interfaz.
Hilo de ejecución: Un hilo de ejecución, en sistemas operativos, es una característica
que permite a una aplicación realizar varias tareas a la vez
(concurrentemente). Los distintos hilos de ejecución comparten
una serie de recursos tales como el espacio de memoria, los
archivos abiertos, situación de autenticación, etc. Esta técnica
permite simplificar el diseño de una aplicación que debe llevar a
cabo distintas funciones simultáneamente.
Infrarrojo: Se dice de la radiación del espectro electromagnético de mayor
longitud de onda que el rojo y de alto poder calorífico.
Interfaz: Conexión física y funcional entre dos aparatos o sistemas
independientes.
Just-In-Time: En informática, la compilación en tiempo de ejecución (también
conocida por sus siglas inglesas, JIT, just-in-time), también
conocida como traducción dinámica, es una técnica para mejorar
el rendimiento de sistemas de programación que compilan a
bytecode, consistente en traducir el bytecode a código máquina
nativo en tiempo de ejecución.
Llamada al sistema: En Computación, llamada al sistema, es el mecanismo usado por
un programa aplicativo para solicitar un servicio al Sistema
Operativo.
Luz negra: Se denomina radiación ultravioleta, "luz negra" o radiación UV a la
radiación electromagnética cuya longitud de onda está
comprendida aproximadamente entre los 400 nm (4x10-7 m) y
los 15 nm (1,5x10-8 m). Su nombre proviene de que su rango
empieza desde longitudes de onda más cortas de lo que los
humanos identificamos como el color violeta.
MAC: En redes de computadoras la dirección MAC (siglas en inglés de
Media Access Control o control de acceso al medio) es un
identificador de 48 bits (6 octetos) que corresponde de forma
única a una ethernet de red.

160
Anexo J. Glosario

Máquina de estados: Se denomina máquina de estados a un modelo de


comportamiento de un sistema con entradas y salidas, en donde
las salidas dependen no sólo de las señales de entradas actuales
sino también de las anteriores. Las máquinas de estados se
definen como un conjunto de estados que sirve de intermediario
en esta relación de entradas y salidas, haciendo que el historial de
señales de entrada determine, para cada instante, un estado para
la máquina, de forma tal que la salida depende únicamente del
estado y las entradas actuales.
Periférico: En informática, se denominan periféricos a los aparatos o
dispositivos auxiliares e independientes conectados a la unidad
central de procesamiento de una computadora.

[W23], [W24]

161

S-ar putea să vă placă și