0% encontró este documento útil (0 votos)
19 vistas62 páginas

Sensor de Rango con Cámaras en Modo RS

Cargado por

d22210014
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
19 vistas62 páginas

Sensor de Rango con Cámaras en Modo RS

Cargado por

d22210014
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

SEP Tecnológico Nacional de México

Instituto Tecnológico de Tijuana


Departamento de Ingenierı́a Eléctrica y Electrónica

Sensor de rango utilizando múltiples cámaras trabajando en


modo obturador rodante

Trabajo de tesis presentado por:


Juan Carlos Dibene Simental

para obtener el grado de:


Maestro en Ciencias de la Ingenierı́a

Director de tesis:
Dra. Yazmin Maldonado Robles

Co-Director de tesis:
Dr. Leonardo Trujillo Reyes
Dr. Enrique Dunn Rivera

Tijuana, Baja California, México.


Septiembre de 2018
RESUMEN

Sensor de rango utilizando múltiples cámaras trabajando en modo obturador


rodante

Juan Carlos Dibene Simental

En esta tesis se presenta un método para estimar la posición y orientación de un sistema de


dos cámaras a alta frecuencia. Para operar a alta frecuencia se utiliza la propiedad de obturador
rodante presente en muchas de las cámaras comerciales. En modo obturador rodante las lı́neas del
sensor de imagen se integran de forma secuencial en tiempos diferentes. Esto permite detectar los
cambios de pose del sistema de cámaras entre lı́neas de imagen sucesivas. La pose del sistema de
cámaras se estima a nivel de lı́nea de imagen con la ayuda de un patrón especial que se incrusta en
la escena observada por el sistema de cámaras. El método se evaluó utilizando imágenes sintéticas
en donde la pose del sistema de cámaras se conoce. Después, el método se evaluó indirectamente
con imágenes reales para las cuales no se conoce la pose real del sistema de cámaras, pero se conoce
que todas las lı́neas de imagen corresponden a la misma pose del sistema de cámaras. Finalmente,
Se implementó un primer prototipo en una plataforma reconfigurable.
Palabras Clave: Estimación de Pose, Múltiples Cámaras, Alta frecuencia, Obturador Rodante,
Plataforma Reconfigurable.

c ITT Septiembre de 2018. Derechos Reservados. El autor otorga al ITT el permiso de repro-
ducir y distribuir copias de esta Tesis en su totalidad o en partes.

i
ii
AGRADECIMIENTOS

A mi directora de tesis, la Dra. Yazmin Maldonado Robles, por la oportunidad de formar parte de
su equipo de investigación durante estos años.

Al Dr. Leonardo Trujillo Reyes por su apoyo y sus consejos durante estos años.

Al Dr. Enrique Dunn Rivera por aceptar mi estancia de investigación en el Stevens Institute of
Technology, por su paciencia al compartir sus conocimientos, y por su apoyo excepcional.

A mis compañeros y amigos por su apoyo.

A mi familia, en especial a mis padres, por su apoyo incondicional.

Este trabajo fue financiado por:

• La beca de maestrı́a CONACYT No. 605992 (agosto 2016 - julio 2018).

• Proyecto CONACYT Fronteras de la Ciencia ”Aprendizaje evolutivo a gran escala” FC-2015-


2/044.

• Proyecto PEI “Clasificador de emociones 2.0 utilizando medios fisiológicos, cerebrales y


conductuales” CONACYT No. 242595, en colaboración con Neuroaplicaciones y Tecnologı́as
S.A.P.I de C.V.

Parte de este proyecto se desarrolló durante una estancia de investigación en el Stevens Institute
of Technology ubicado en Hoboken, New Jersey, en el periodo del 28 de noviembre de 2017 al 4 de
abril de 2018.

iii
iv
CONTENIDO

Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i
Lista de Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi
Lista de Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii

1 Introducción 1
1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Objetivo general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2 Objetivos especı́ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Organización de la tesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Método propuesto 3
2.1 Estimación de pose a alta frecuencia con obturador rodante . . . . . . . . . . . . . . 3
2.1.1 Estimación de pose de una cámara . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.2 Modelo de cámara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.3 Distorsión de lente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.4 Solución del problema P3P . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.5 Estimación de pose al nivel de lı́nea de imagen . . . . . . . . . . . . . . . . . 7
2.2 Patrón geométrico de referencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.1 Diseño del patrón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.2 Modelo del patrón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Estimación de pose del sistema de dos cámaras . . . . . . . . . . . . . . . . . . . . . 18
2.3.1 Solución para las distancias entre las dos cámaras y los puntos 3D . . . . . . 20
2.3.2 Solución para la pose del sistema de dos cámaras . . . . . . . . . . . . . . . . 22
2.4 Detección del patrón a nivel de subpı́xel . . . . . . . . . . . . . . . . . . . . . . . . . 24

3 Implementación en plataforma reconfigurable 27


3.1 Diseño de hardware para el PL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.1 Módulo Sincronización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.2 Módulo Detector de patrón . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.3 Módulo P3P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2 Aplicación de software para el PS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.1 Bucle principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

v
4 Resultados 41
4.1 Simulación con imágenes sintéticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2 Experimentos con imágenes reales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

5 Conclusiones y trabajo futuro 45


5.1 Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2 Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

A Código fuente 49

vi
LISTA DE FIGURAS

2.1 Captura de una imagen en modo RS. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3


2.2 Sensor de imagen 2D como varios sensores de imagen 1D. . . . . . . . . . . . . . . . 3
2.3 Problema Perspective Three Point. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4 Algunos tipos de distorsión radial de lente. . . . . . . . . . . . . . . . . . . . . . . . 6
2.5 El patrón se diseñó de tal forma que es posible determinar las coordenadas de los
puntos observados sobre el plano del patrón a partir de sus puntos correspondientes
en una lı́nea de imagen. Ası́ se obtienen los puntos correspondientes necesarios para
realizar la estimación de pose de la cámara. . . . . . . . . . . . . . . . . . . . . . . . 9
2.6 La razón de cruce de cuatro lı́neas que se intersectan en el mismo punto es con-
stante. Las razones de cruce (A, B; C, D) y (A0 , B 0 ; C 0 , D0 ) son iguales y no es posible
distinguir entre l y l0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.7 Las razones de cruce (A, B; C, D) y (A0 , B 0 ; C 0 , D0 ) dependen de la posición de A y A0
sobre lA . Esto permite determinar A y A0 . No es posible determinar la orientación
de l ni de l0 ya que todas las lı́neas que pasan por sus respectivos puntos en lA tienen
la misma razón de cruce. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.8 Las razones de cruce (A, B; C, D) y (E, D; C, B) describen a la lı́nea l y las razones
de cruce (A0 , B 0 ; C 0 , D0 ) y (E 0 , D0 ; C 0 , B 0 ) describen a la linea l0 . Todas las lı́neas
posibles sobre el patrón que intersecten a lA , lB , lC , lD y lE tienen diferentes pares
de razones de cruce que las describen. . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.9 El patrón se limita a la región 0 ≤ y ≤ 75 para asegurar que lB siempre se observe
entre lA y lC , y que lD se observe entre lC y lE . Esto simplifica el modelo del patrón
al reducir las combinaciones posibles de las lı́neas observadas a solo dos: A, B, C, D
y E o su inverso E, D, C, B y A. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.10 Patrón compuesto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.11 Patrón completo. Para realizar la detección de los puntos correspondientes es nece-
sario observar todas las lı́neas de al menos uno de los conjuntos lU o lV . Las anota-
ciones en color blanco no son parte del patrón. . . . . . . . . . . . . . . . . . . . . . 17
2.12 Problema Non Perspective Three Point para dos cámaras. . . . . . . . . . . . . . . . 18
2.13 Detección a nivel subpı́xel de las lı́neas del patrón (1 de 2). . . . . . . . . . . . . . . 25
2.13 Detección a nivel subpı́xel de las lı́neas del patrón (2 de 2). . . . . . . . . . . . . . . 26

3.1 El equipo utilizado consiste en una tarjeta ZCU102 con dos módulos LI-IMX274MIPI-
FMC que contienen un sensor de imagen Sony IMX274 con modo de captura RS. . . 27
3.2 Zynq UltraScale+ EG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

vii
3.3 Diagrama de bloques del diseño de hardware. El video de ambas cámaras se procesa
para detectar el patrón en la escena y estimar la pose del sistema de cámaras. Se
incluye funcionalidad para almacenar imágenes de las cámaras en una tarjeta SD.
Para simplificar el diagrama solo se muestran los bloques más importantes. . . . . . 30
3.4 Diagrama de bloques del módulo Detector de patrón. Los pixeles de cada lı́nea de
video se procesan para detectar los puntos correspondientes a las lı́neas del patrón. . 31
3.5 Diagrama de bloques del módulo P3P. Los puntos correspondientes se obtienen de
los descriptores de patrón y se estima la pose del sistema de cámaras con P3P. . . . 33
3.6 Diagrama de bloques de la aplicación en el PS. Primero se configuran los módulos
en el PL, PS, y las cámaras. Después se entra al bucle principal en donde se detecta
el estado de los pushbuttons de la tarjeta ZCU102 y se realiza la acción asociada a
cada botón. Cuando el módulo P3P finaliza la estimación de pose, su lı́nea P3P IRQ
cambia de bajo a alto para pedir una interrupción. Al detectarse esta condición, se
detiene la ejecución del bucle principal y se procede a ejecutar P3P ISR. Ahı́ se leen
los resultados del módulo P3P y se almacenan en memoria. Al finalizar P3P ISR, la
ejecución regresa al bucle principal para continuar desde donde se quedó. . . . . . . 34
3.7 Configuración experimental con la tarjeta ZCU102 y PC de desarrollo. . . . . . . . . 39
3.8 Muestra de las imágenes capturadas para la calibración de las cámaras IMX274. . . 40
3.9 Imágenes del patrón capturadas con las cámaras IMX274. . . . . . . . . . . . . . . . 40

4.1 Imágenes sintéticas de ejemplo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41


4.2 Detección de las lı́neas del patrón en las imágenes de ejemplo. . . . . . . . . . . . . . 42
4.3 Muestra de las imágenes utilizada para la calibración del sistema de dos cámaras. . . 43
4.4 Comparación de pose para un mismo par de imágenes reales. Primero se estima la
pose del sistema de cámaras con una lı́nea de imagen de cada cámara y después se
estima nuevamente la pose con diferentes lı́neas de imagen. Las dos poses obtenidas
se comparan y se calcula el error entre las poses. . . . . . . . . . . . . . . . . . . . . 44

viii
LISTA DE TABLAS

3.1 Formato COLOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31


3.2 Estructura del descriptor de patrón. . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3 Mapa de memoria del módulo P3P. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.4 Configuración del módulo P3P. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.1 Estimación de pose del sistema de cámaras para las imágenes de ejemplo. . . . . . . 42
4.2 Resultados de la estimación de pose para los 40 pares de imágenes generadas. . . . . 42
4.3 Resultados de la comparación de pose para los diez pares de imágenes reales. . . . . 44

ix
x
1
Introducción

En aplicaciones de realidad virtual (VR, del inglés Virtual Reality) y realidad aumentada (AR,
del inglés Augmented Reality) se requiere que el sistema opere a una velocidad adecuada para que sea
convincente para el usuario. Una de las etapas más importantes en este sistema es la etapa de rastreo
(del inglés tracking). En esta etapa se realizan principalmente las mediciones de desplazamiento
y rotación relativas del dispositivo para estimar el posicionamiento del mundo virtual respecto al
mundo real [1].
En [1] se presenta un método novedoso para rastreo de alta frecuencia utilizando cámaras con
modo de captura de obturador rodante (RS, del inglés Rolling Shutter ). En modo RS, las lı́neas de
la imagen se capturan de manera secuencial con un tiempo muy pequeño entre lı́neas sucesivas. Con
esto, los autores de [1] proponen tratar una cámara RS como un sensor de lı́neas de alta frecuencia
en donde cada una de las lı́neas constituye una muestra individual. De esta manera, es posible
operar a una frecuencia miles de veces mayor que la frecuencia de captura de cuadro de la cámara.
Se utilizan cinco pares de cámaras en configuración estéreo para obtener suficientes datos para
realizar el rastreo. Cada par de cámaras estéreo estima la profundidad del pixel central de cada
lı́nea de imagen. Esto se realiza a partir de caracterı́sticas de la escena, tales como texturas, bordes,
etc., lo que permite su uso en entornos generalizados. El rastreo se realiza de forma diferencial a
partir de los cambios entre lı́neas sucesivas de la imagen actual y con datos de la imagen anterior,
asumiendo poco movimiento (del inglés small motion). Sin embargo, debido a esto, el método en [1]
es susceptible al acumulamiento de errores a lo largo del tiempo, el cual es un fenómeno conocido
como drift.
Recientemente, el estado del arte [2] extiende la propuesta en [1] para aprovechar la distorsión
radial de las lentes de las cámaras. Esto induce un conjunto de restricciones sobre el proceso de
rastreo que permite reducir el número de cámaras de diez a solo cuatro y también evita la necesidad
de realizar la rectificación estéreo de cada par de cámaras.
En esta tesis se desarrolló un método de rastreo de alta frecuencia basado en [1]. Se utiliza un
sistema de dos cámaras cuya pose se estima directamente a partir de puntos de control. Los puntos
se obtienen de un patrón especial plano que se incrusta en la escena observada por el sistema de
cámaras, a partir de cómo se observa el patrón en las lı́neas de imagen de ambas cámaras.
A diferencia de [1], el método en esta tesis no presenta drift debido a que la estimación de pose
del sistema de cámaras no se realiza de forma incremental. Es decir, no se requiere conocer la pose
anterior del sistema de cámaras para estimar su pose actual. Sin embargo, el uso de este método se
confina solo a la región en donde es posible para ambas cámaras observar adecuadamente el patrón,
lo que no permite su uso en entornos generalizados y limita la cantidad de poses del sistema de
cámaras que se pueden detectar. Al igual que en [2], el método en esta tesis no requiere realizar
la rectificación estéreo del par de cámaras, lo que simplifica su implementación. Sin embargo, la
distorsión de lente se considera como una fuente de error que es necesario corregir.

1
Introducción

En contraste con [1] y [2], parte de este trabajo está diseñado a nivel de hardware. Se elaboró una
primera implementación del método desarrollado en una plataforma reconfigurable con dos cámaras
RS. Las lı́neas de imagen de ambas cámaras se procesan en una FPGA para realizar la estimación
de pose del sistema de dos cámaras en tiempo real con ciertas limitaciones. Esto corresponde a la
contribución tecnológica de esta tesis, dado que los trabajos anteriores, en su mayorı́a, se reportan
al nivel de software.

1.1 Objetivos

1.1.1 Objetivo general


Diseñar e implementar un prototipo de sensor de rango que integra información de dos o más
cámaras operando en modo obturador rodante, operando al nivel de lı́nea de captura, para obtener
un desempeño de alta frecuencia en aplicaciones que requieren procesamiento en tiempo real de
datos visuales.

1.1.2 Objetivos especı́ficos


• Desarrollar un método para estimar la pose del sistema de cámaras al nivel de lı́nea de imagen.

• Evaluar el método con simulaciones y datos reales.

• Implementar un prototipo del método desarrollado en una plataforma reconfigurable.

1.2 Organización de la tesis

En el Capı́tulo 2 se describe el modo de captura RS, la estimación de pose de una cámara y como
se integran para la estimación de pose a alta frecuencia. Después se presenta el diseño del patrón y
la manera en que se obtienen del patrón los puntos correspondientes necesarios para la estimación
de pose del sistema de dos cámaras. Se procede a describir el procedimiento para encontrar la pose
del sistema de cámaras y se presenta la detección del patrón a nivel de subpı́xel para mejorar los
resultados de la estimación de pose del sistema de cámaras. En el Capı́tulo 3 se presenta una primera
implementación en una plataforma reconfigurable. En el Capı́tulo 4 se muestran las simulaciones
realizadas con imágenes sintéticas para la validación del método y los experimentos con imágenes
reales. En el Capı́tulo 5 se encuentran las conclusiones y trabajo futuro.

2
2
Método propuesto

2.1 Estimación de pose a alta frecuencia con obturador rodante

La operación a alta frecuencia es posible aprovechando el modo de captura RS de la cámara [1].


En modo RS las lı́neas de la imagen se capturan de forma secuencial en tiempos diferentes, como
se muestra en la Figura 2.1. Debido al efecto RS, cada lı́nea de la imagen puede corresponder a
una pose diferente de la cámara y los cambios de pose que ocurran de una lı́nea a otra se pueden
detectar.

Figura 2.1: Captura de una imagen en modo RS.

Las lı́neas del sensor de imagen 2D se consideran como un conjunto de sensores de imagen 1D
y cada uno constituye una muestra de la pose actual de la cámara [1]. La estimación de pose se
realiza al nivel de lı́nea de imagen y, ası́, la frecuencia de operación depende del tiempo de captura
de una lı́nea de imagen en lugar del tiempo requerido para capturar una imagen completa o cuadro.

Figura 2.2: Sensor de imagen 2D como varios sensores de imagen 1D.

3
Método propuesto

Para una resolución de cuadro de H lı́neas de W pixeles cada una (W × H), se consideran H
sensores 1D de W pixeles cada uno. Si la frecuencia de captura de cuadro (FPS, del inglés Frames
Per Second ) es f , la frecuencia de operación al nivel de lı́nea es aproximadamente Hf . A manera
de ejemplo, esto se ilustra en la Figura 2.2 para un sensor de resolución 4K que opera a 60 FPS.

2.1.1 Estimación de pose de una cámara


Una manera de estimar la pose de una cámara es resolviendo el problema Perspective Three Point
(P3P) ilustrado en la Figura 2.3.

Figura 2.3: Problema Perspective Three Point.

Dados tres puntos P1 , P2 y P3 en un marco de referencia global, sus puntos correspondientes p1 ,


p2 y p3 en la imagen, y la matriz de calibración de la cámara K, encontrar la pose (R, T ) del marco
global respecto al marco de referencia de la cámara. Este problema tiene máximo cuatro soluciones.
A continuación, se describe brevemente el modelo de una cámara y su conexión con los
parámetros de P3P.

2.1.2 Modelo de cámara


La relación entre un punto observado en el espacio 3D, P = [x, y, z]T y su punto correspondiente
en la imagen 2D, p = [u, v]T , está dada por [12]:
 
  x
u   y 
s v  = K R|T  
z  (2.1)
1
1

4
2.1 Estimación de pose a alta frecuencia con obturador rodante

donde:

• x, y, z son las coordenadas del punto 3D.


 
• R|T es la matriz de pose del marco global respecto al marco de la cámara.

• K es la matriz de calibración de la cámara.

• u, v son las coordenadas en pixeles del punto 2D.

• s es un factor de escala
 
La matriz R|T transforma los puntos del marco global al marco de la cámara según:
   
xcamara xglobal
 ycamara  = R  yglobal  + T (2.2)
zcamara zglobal

Donde R es una matriz de rotación 3D de 3 × 3 que representa la orientación del marco global
respecto al marco de la cámara y T es elvector de 3 × 1 de la posición del marco global en el marco
de la cámara. Dado que la matriz R|T es de 3 × 4, P se representa en coordenadas homogéneas
como P̃ = [x, y, z, 1]T para realizar la multiplicación de acuerdo a la Ecuación 2.1.
Sustituyendo el vector cero (0) en el lado izquierdo de la Ecuación 2.2 se encuentra que la posición
de la cámara en el marco global es −RT T y su orientación es RT , dado que para las matrices de
rotación se tiene que RT R = RRT = I, donde I es la matriz identidad.
La matriz de calibración de la cámara, K, tiene la siguiente forma [8]:
 
fx 0 cx
K =  0 fy cy 
0 0 1

donde:

• fx , fy son las longitudes focales en pixeles en la dirección x y y.

• cx , cy son las coordenadas en pixeles del punto principal en la imagen.

La longitud focal, f , es la distancia entre el plano de la imagen y el centro de proyección de la


cámara. Por definición, el plano de imagen es paralelo al plano xy del marco de la cámara y f se
ubica sobre el eje z. Se tiene fx = mx f y fy = my f , donde mx y my son el número de pixeles por
unidad de distancia en la dirección x y y respectivamente. Usualmente fx = fy lo que indica que
los pixeles del sensor de imagen son cuadrados.
El punto principal corresponde a la intersección del eje z del marco de la cámara con el plano
de la imagen y usualmente se ubica en el centro de la imagen.

5
Método propuesto

La matriz K transforma los puntos del marco de la cámara al marco de referencia de imagen.
Los resultados se obtienen en coordenadas homogéneas como p̃ = [su, sv, s]T de acuerdo a:

su = fx xcamara + cx zcamara
sv = fy ycamara + cy zcamara (2.3)
s = zcamara

Las coordenadas en pixeles de la imagen se calculan como:


xcamara
u = fx + cx
zcamara
ycamara (2.4)
v = fy + cy
zcamara
Esta transformación asume una proyección lineal en la cual las lı́neas rectas de la escena resultan
en lı́neas rectas de la imagen. Sin embargo, las lentes de las cámaras reales introducen distorsión
de tal forma que las lı́neas rectas en la escena aparecen como curvas en la imagen [9].

2.1.3 Distorsión de lente


En la Figura 2.4 [12] se muestran algunos tipos de distorsión de lente. La distorsión es más pro-
nunciada para los pixeles más alejados del centro de la imagen.

(a) Sin distorsión. (b) Distorsión de barril. (c) Distorsión de cojı́n.

Figura 2.4: Algunos tipos de distorsión radial de lente.

Una forma de modelar la distorsión de las lentes se describe en [12, 9]. Las Ecuaciones 2.3 y 2.4
se expanden como:
xcamara
x0 =
zcamara
0 ycamara
y =
zcamara

r2 = x02 + y 02

6
2.1 Estimación de pose a alta frecuencia con obturador rodante

1 + k1 r2 + k2 r4 + k3 r6
x00 = x0 + 2p1 x0 y 0 + p2 (r2 + 2x02 )
1 + k4 r2 + k5 r4 + k6 r6
1 + k1 r2 + k2 r4 + k3 r6
y 00 = y 0 + 2p2 x0 y 0 + p1 (r2 + 2y 02 )
1 + k4 r2 + k5 r4 + k6 r6

u = fx x00 + cx
v = fy y 00 + cy

donde k1 , k2 , k3 , k4 , k5 , k6 , p1 y p2 son los coeficientes de distorsión. El procedimiento para obtener


la matriz K y los coeficientes de distorsión de una cámara se describe en [13]. La matriz K y los
coeficientes de distorsión no dependen de la escena observada y, por lo tanto, pueden ser reutilizados
mientras no cambien las caracterı́sticas de la cámara.

2.1.4 Solución del problema P3P


Para el problema P3P, los datos de entrada son tres puntos en el espacio 3D, Pi = [xi , yi , zi ]T , sus
pixeles correspondientes en la imagen pi = [ui , vi ]T , con i = 1, 2, 3, y la matriz de calibración K
de la cámara. Las incógnitas a resolver son R y T , que implı́citamente contienen la orientación y
posición de la cámara.
Entre las soluciones existentes del problema P3P, en [3] se utiliza la ley de cosenos para crear
un sistema de tres ecuaciones cuadrático, donde las incógnitas son las distancias de la cámara a los
puntos observados. Ya que se encuentran las distancias, se resuelve para R y para T . En [4] no se
utiliza leyes de cosenos. En cambio, se utiliza un método geométrico que no requiere determinar las
distancias y permite resolver directamente la pose de la cámara. Recientemente, en [5] se presenta
un método algebraico eficiente que crea un sistema de ecuaciones trigonométricas con el cual se
encuentra R y después se resuelve para T . A diferencia de [4], el método de [5] evita el cálculo
de resultados intermedios innecesarios para obtener mayor exactitud y ser más robusto con menor
costo computacional.

2.1.5 Estimación de pose al nivel de lı́nea de imagen


Para realizar la estimación de pose con P3P al nivel de lı́nea de imagen con cámaras RS existen
varias consideraciones importantes.
Se requieren imágenes sin distorsión de lente. Para esto es necesario utilizar lentes de baja
distorsión. Aunque es posible compensar la distorsión en las imágenes a partir de los coeficientes de
distorsión, esto requiere utilizar pixeles de otras lı́neas de imagen que pueden haber sido capturadas
con diferente pose de la cámara.
Se requiere una forma de obtener los puntos correspondientes necesarios para P3P a partir de
una lı́nea de imagen. P3P requiere que los puntos observados sean no colineales. De lo contrario,
o si dos o más de los puntos en la imagen coinciden, P3P tiene un número infinito de soluciones
[5]. Para imágenes sin distorsión, esto implica que no se pueden utilizar los puntos observados en
una sola lı́nea de imagen si los puntos observados yacen sobre una superficie planar en la escena. A
lo sumo, solo se pueden utilizar dos de los puntos. No es posible obtener los puntos de diferentes
lı́neas de imagen debido a que cada lı́nea de imagen puede ser capturada con una pose diferente.
La forma en que se obtienen los puntos correspondientes necesarios para la estimación de pose
se presenta en la siguiente sección.

7
Método propuesto

2.2 Patrón geométrico de referencia

Para facilitar la detección de puntos correspondientes se elaboró un patrón que se incrusta en la


escena observada por la cámara. Dado que la operación del sensor es al nivel de lı́nea de imagen,
el patrón se diseñó de tal forma que es posible determinar los puntos 3D observados en el plano
asociado al patrón a partir de sus puntos 2D correspondientes en la lı́nea de imagen.
El patrón se diseñó con razones de cruce (del inglés, cross-ratios). La razón de cruce es un
número asociado a cuatro puntos colineales. Dados cuatros puntos A, B, C y D sobre una lı́nea su
razón de cruce se define como:

AC · BD
(A, B; C, D) = (2.5)
BC · AD

donde AC, BD, BC y AD son las distancias entre los puntos. La razón de cruce es invariante bajo
transformaciones proyectivas [14]. Entonces sı́ A, B, C y D son puntos 3D del patrón en la escena
y a, b, c y d son sus puntos 2D correspondientes en la lı́nea de imagen se tiene que:

(a, b; c, d) = (A, B; C, D) (2.6)

debido a que a, b, c y d son una transformación proyectiva de A, B, C y D. La propiedad de


invarianza de la razón de cruce también permite determinar correctamente los puntos 3D observados
sin importar la pose de la cámara relativa al patrón, mientras se observe adecuadamente el patrón
en la lı́nea de imagen. En la Figura 2.5 se ilustra el uso del patrón.

2.2.1 Diseño del patrón


Para el diseño del patrón se inicia con una configuración de cuatro lı́neas: lA , lB , lC y lD , con un
punto en común, como se muestra en la Figura 2.6. Si la lı́nea l corresponde a una lı́nea sobre
el patrón, observada en una lı́nea de la imagen, y A, B, C y D son los puntos de intersección de
l con lA , lB , lC y lD , es posible calcular (A, B; C, D) a partir de las distancias entre sus pixeles
correspondientes a, b, c y d. Sin embargo, bajo esta configuración no es posible determinar la
posición y orientación de l, ya que para cualquier lı́nea sobre el patrón el valor de (A, B; C, D) es el
mismo.
Si lA se dibuja tal que no pase por el punto común de lB , lC y lD , como se muestra en la Figura
2.7, el valor de (A, B; C, D) deja de ser constante y ahora depende del desplazamiento de A sobre
lA . Esto permite determinar A. Aun ası́, no es posible determinar la orientación de l debido a que
todas las lı́neas que pasan por A comparten el mismo valor de (A, B; C, D). Por ende, tampoco es
posible determinar B, C y D.
Al agregar una quinta lı́nea, lE , como se muestra en la Figura 2.8, es posible obtener una segunda
medición de razón de cruce: (E, D; C, B). De la misma forma que (A, B; C, D), (E, D; C, B) depende
del desplazamiento de E sobre lE y es posible determinar E. Dado que dos puntos son suficientes
para describir una lı́nea, con A y E es posible determinar l y los puntos B, C y D.
Aunque con esta configuración es posible determinar A, B, C, D y E a partir de a, b, c, d y e,
existe ambigüedad debido a que es posible observar lA , lB , lC , lD y lE de dos formas: en el orden
a, b, c, d y e o como e, d, c, b y a. A manera de ejemplo, si la cámara se coloca de frente al patrón,
sin rotación relativa entre ambos, el orden observado es a, b, c, d y e. Ahora, si la cámara se rota
de forma que quede volteada el orden es e, d, c, b y a.

8
2.2 Patrón geométrico de referencia
Figura 2.5: El patrón se diseñó de tal forma que es posible determinar las coordenadas de los puntos observados sobre el plano
del patrón a partir de sus puntos correspondientes en una lı́nea de imagen. Ası́ se obtienen los puntos correspondientes necesarios
para realizar la estimación de pose de la cámara.
9
Método propuesto

Figura 2.6: La razón de cruce de cuatro lı́neas que se intersectan en el mismo punto es constante.
Las razones de cruce (A, B; C, D) y (A0 , B 0 ; C 0 , D0 ) son iguales y no es posible distinguir entre l y l0 .

Figura 2.7: Las razones de cruce (A, B; C, D) y (A0 , B 0 ; C 0 , D0 ) dependen de la posición de A y A0


sobre lA . Esto permite determinar A y A0 . No es posible determinar la orientación de l ni de l0 ya
que todas las lı́neas que pasan por sus respectivos puntos en lA tienen la misma razón de cruce.

10
2.2 Patrón geométrico de referencia

Figura 2.8: Las razones de cruce (A, B; C, D) y (E, D; C, B) describen a la lı́nea l y las razones
de cruce (A0 , B 0 ; C 0 , D0 ) y (E 0 , D0 ; C 0 , B 0 ) describen a la linea l0 . Todas las lı́neas posibles sobre
el patrón que intersecten a lA , lB , lC , lD y lE tienen diferentes pares de razones de cruce que las
describen.

Para evitar esta ambigüedad, la configuración de lA , lB , lC , lD y lE es tal que el rango de


(A, B; C, D) no se traslapa con el rango de (E, D; C, B). Esto permite identificar entre (A, B; C, D)
y (E, D; C, B) y realizar los ajustes necesarios para determinar correctamente A, B, C, D y E.

2.2.2 Modelo del patrón


Para el modelo del patrón se definen las lı́neas lA , lB , lC , lD y lE utilizando dos puntos 2D, P = hx, yi,
para cada una. De forma experimental se encontró que muchos de los cálculos se simplifican si lA ,
lC y lE son paralelas y el ángulo entre lB y lC es igual al que existe entre lC y lD . Con base en esto
se eligieron los siguientes puntos para construir lA , lB , lC , lD y lE :
PA1 = h10, 0i PA2 = h10, 1i
PB1 = h20, 0i PB2 = h19, 10i
PC1 = h30, 0i PC2 = h30, 1i
PD1 = h40, 0i PD2 = h41, 10i
PE1 = h65, 0i PE2 = h65, 1i
donde el superı́ndice denota el número de punto. Los puntos se convierten a coordenadas ho-
mogéneas como P̃ = hx, y, zi con z = 1. Ası́, cada lı́nea se representa con un vector de tres
elementos obtenido del producto cruz, denotado por el sı́mbolo ×, de ambos puntos:

11
Método propuesto

lA = P̃A1 × P̃A2
lB = P̃B1 × P̃B2
lC = P̃C1 × P̃C2
lD = P̃D1 × P̃D2
lE = P̃E1 × P̃E2

La lı́nea l, observada en la lı́nea de imagen, se modela a partir de los puntos A y E:

à = P̃A1 + tA n̂A
Ẽ = P̃E1 + tE n̂E
l = Ã × Ẽ

donde los escalares tA y tE son las incógnitas que representan el desplazamiento de A sobre lA y E
sobre lE . Los vectores unitarios n̂A y n̂E son la dirección de lA y lE , definidos como:

P̃A2 − P̃A1
n̂A =
|P̃A2 − P̃A1 |
P̃E2 − P̃E1
n̂E =
|P̃E2 − P̃E1 |

Los puntos de intersección de l con lA , lB , lC , lD y lE son:

à = l × lA
B̃ = l × lB
C̃ = l × lC
D̃ = l × lD
Ẽ = l × lE

Los puntos se convierten de coordenadas homogéneas a 2D:

Ãx Ãy
A=h , i
Ãz Ãz
B̃x B̃y
B =h , i
B̃z B̃z
C̃x C̃y
C =h , i
C̃z C̃z
D̃x D̃y
D =h , i
D̃z D̃z
Ẽx Ẽy
E =h , i
Ẽz Ẽz
donde el subı́ndice denota el componente x, y o z del vector.

12
2.2 Patrón geométrico de referencia

Realizando las operaciones con la herramienta simbólica de MATLAB se obtiene:

A = h10, tA i
10tE − 65tA + 11000 450tA + 100tE
B=h , i
tE − tA + 550 tE − tA + 550
7tA + 4tE
C = h30, i
11
65tA − 10tE + 22000 250tA + 300tE
D=h , i
tA − tE + 550 tA − tE + 550
E = h65, tE i

Dado que la razón de cruce es la medición que se obtiene de la lı́nea de imagen, es necesario
definir A, B, C, D y E en términos de (a, b; c, d) y (e, d; c, b). La relación de tA y tE con (a, b; c, d)
y (e, d; c, b) se obtiene de las Ecuaciones 2.5 y 2.6:

AC · BD
(a, b; c, d) =
BC · AD
CE · BD
(e, d; c, b) =
CD · BE

Realizando las operaciones se obtiene:

2 2 2 2
RA tA + 600RA tA + 90000RA − 160000 = 0
2 2 2 2
RE tE + 900RE tE + 202500RE − 490000 = 0

donde RA = (a, b; c, d) y RE = (e, d; c, b). Resolviendo para tA y tE se encuentran dos soluciones


para cada una:

−300RA ± 400
tA =
RA
−450RE ± 700
tE =
RE

Para seleccionar una de las dos soluciones se analiza la gráfica del patrón como se muestra en la
Figura 2.9. El patrón se restringe a la región 0 ≤ y ≤ 75. En esta región tA ≥ 0 y tE ≥ 0. Dado que
RA > 0 y RE > 0, una de las soluciones de tA y tE siempre es negativa. Entonces, estas soluciones
se descartan y se obtiene:

−300RA + 400
tA =
RA
−450RE + 700
tE =
RE

13
Método propuesto

Figura 2.9: El patrón se limita a la región 0 ≤ y ≤ 75 para asegurar que lB siempre se observe
entre lA y lC , y que lD se observe entre lC y lE . Esto simplifica el modelo del patrón al reducir las
combinaciones posibles de las lı́neas observadas a solo dos: A, B, C, D y E o su inverso E, D, C,
B y A.

Los puntos A, B, C, D y E en términos de la razón de cruce son:


400 − 300RA
A = h10, i
RA
70RA − 260RE + 260RA RE 700RA + 1800RE − 1800RA RE
B =h , i
7RA − 4RE + 4RA RE 7RA − 4RE + 4RA RE
2800RA + 2800RE − 3900RA RE
C = h30, i
11RA RE
260RE − 70RA + 70RA RE 2100RA + 1000RE − 2100RA RE
D =h , i
4RE − 7RA + 7RA RE 4RE − 7RA + 7RA RE
700 − 450RE
E = h65, i
RE
16
Dentro de la región 0 ≤ y ≤ 75 se tiene que 15 < RA ≤ 43 y 43 < RE ≤ 14 9 . Esto se utiliza
para determinar el orden observado de a, b, c, d y e. Si al realizar las mediciones de RA y RE
en la lı́nea de imagen se encuentra que RA esta en el rango de RE y RE en el de RA se realizan
las siguientes correcciones: intercambiar RA con RE , A con E y B con D. Estas correcciones son
necesarias debido a que se asume que el orden observado es a, b, c, d y e. En el caso inverso a es la
observación de E, b la de D, c sigue siendo la de C, d es la de B y e la de A, por lo que RA es en
realidad RE y RE es RA .

14
2.2 Patrón geométrico de referencia

Se puede observar que existen lı́neas sobre el patrón que no intersectan a lA , lB , lC , lD y lE


por lo que no pueden ser determinadas. Para determinar estas lı́neas se crea un nuevo patrón como
se muestra en la Figura [Link] nuevo patrón se crea de la misma forma, con la diferencia de
que se intercambian los componentes x y y de los puntos P iniciales y la delimitación del patrón
es 0 ≤ x ≤ 75. El rango de RA y RE es el mismo pero los puntos A, B, C, D y E tienen sus
componentes x y y intercambiados.
Los dos patrones se combinan como se muestra en la Figura 2.11. El patrón ahora se compone
U , lU , lU , lU , lU , lV , lV , lV , lV y lV , y los puntos 2D sobre el patrón se calculan con
de diez lı́neas: lA B C D E A B C D E
las Ecuaciones 2.7 y 2.8.

AU = hAx , Ay i
B U = hBx , By i
C U = hCx , Cy i (2.7)
U
D = hDx , Dy i
E U = hEx , Ey i

Donde RA = (aU , bU ; cU , dU ) y RE = (eU , dU ; cU , dU ).

AV = hAy , Ax i
B V = hBy , Bx i
C V = hCy , Cx i (2.8)
V
D = hDy , Dx i
E V = hEy , Ex i

Donde RA = (aV , bV ; cV , dV ) y RE = (eV , dV ; cV , dV ).

Para facilitar la detección del patrón en la escena se agrega un borde de colores y las lı́neas
se dibujan sobre un fondo oscuro. Las lı́neas y sus intersecciones son de diferentes colores para
identificar a cuál de los dos conjuntos lU o lV pertenecen.
La detección de puntos correspondientes con el patrón requiere que la imagen no tenga distorsión
de lente. De lo contrario, los puntos observados en una lı́nea de imagen describen una curva sobre
el patrón y el análisis de razón de cruce es inválido. Sin embargo, los puntos observados del patrón
en una lı́nea de imagen sin distorsión no pueden ser utilizados para estimar la pose con P3P debido
a que requiere que los puntos sean no colineales.
Para solucionar esto se decidió utilizar un sistema de dos cámaras. Cada cámara observa el
patrón y se realiza la detección de puntos correspondientes. Con suficiente desfase en la captura de
las lı́neas de imagen entre las cámaras se puede asegurar que los puntos observados con la primera
cámara no sean colineales con los puntos observados con la segunda. La estimación de pose del
sistema de dos cámaras se realiza a partir de una selección de puntos correspondientes de ambas
cámaras, asumiendo que ambas lı́neas de imagen se capturaron al mismo tiempo. Esto se presenta
en la siguiente sección.

15
Método propuesto

(a) La lı́nea l no se puede determinar ya que no intersecta a lA , lB , lC , lD y lE .

(b) El patrón se duplica y se orienta tal que la lı́nea l se puede determinar.

Figura 2.10: Patrón compuesto.

16
2.2 Patrón geométrico de referencia

Figura 2.11: Patrón completo. Para realizar la detección de los puntos correspondientes es necesario
observar todas las lı́neas de al menos uno de los conjuntos lU o lV . Las anotaciones en color blanco
no son parte del patrón.

17
Método propuesto

2.3 Estimación de pose del sistema de dos cámaras

La estimación de pose del sistema de dos cámaras se realiza con el método presentado en [6]. El
método resuelve de forma general el problema Non Perspective Three Point (NP3P) para múltiples
cámaras sin un centro de proyección común. El caso particular para dos cámaras, ilustrado en la
Figura 2.12, se presenta a continuación.

Figura 2.12: Problema Non Perspective Three Point para dos cámaras.

Dados tres puntos P1 , P2 y P3 en un marco de referencia global, sus puntos correspondientes en


imagen p1 , p2 y p3 , las matrices de calibración de las cámaras K1 y K2 , y la pose de las cámaras
(R1 , T1 ) y (R2 , T2 ) respecto a un marco de referencia local, encontrar la pose (R, T ) del marco global
respecto al marco local. Este problema tiene máximo ocho soluciones
El problema se simplifica si el marco de la cámara 1 se alinea con el marco local tal que R1 = I
y T1 = 0. Para encontrar (R2 , T2 ) se realiza la calibración estéreo como se indica en [10]. Los
resultados de la calibración estéreo se pueden reutilizar mientras no cambie la pose relativa entre
las cámaras.
Los vectores unitarios fˆ se calculan como:

f1 = K1−1 p̃1 fˆ1 = f1 /|f1 | (2.9)


f2 = K1−1 p̃2 fˆ2 = f2 /|f2 | (2.10)
f3 = R2 K2−1 p̃3 fˆ3 = f3 /|f3 | (2.11)

18
2.3 Estimación de pose del sistema de dos cámaras

A partir de todo esto se construye el siguiente sistema de ecuaciones:


RP1 + T = s1 fˆ1 (2.12)
RP2 + T = s2 fˆ2 (2.13)
RP3 + T = s3 fˆ3 + T 2 (2.14)
donde s1 y s2 son las distancias del centro de proyección de la cámara 1 a P1 y P2 , y s3 es la
distancia del centro de proyección de la cámara 2 a P3 .
La incógnita T se elimina restando las Ecuaciones 2.12, 2.13 y 2.14 como sigue:
R(P1 − P2 ) = s1 fˆ1 − s2 fˆ2 (2.15)
R(P1 − P3 ) = s1 fˆ1 − s3 fˆ3 − T2 (2.16)
R(P2 − P3 ) = s2 fˆ2 − s3 fˆ3 − T2 (2.17)
La rotación de un vector no altera su magnitud por lo que la incógnita R se elimina tomando
la norma al cuadrado de los vectores:
|P1 − P2 |2 = s21 + s22 − 2(fˆ1 · fˆ2 )s1 s2
|P1 − P3 |2 = s2 + s2 − 2(fˆ1 · fˆ3 )s1 s3 − 2(fˆ1 · T2 )s1 + 2(fˆ3 · T2 )s3 + |T2 |2
1 3
|P2 − P3 | = 2
s22 + s23 − 2(fˆ2 · fˆ3 )s2 s3 − 2(fˆ2 · T2 )s2 + 2(fˆ3 · T2 )s3 + |T2 |2
donde el sı́mbolo · denota el producto punto.
El sistema de ecuaciones se reescribe como:
0 = s21 + s22 − As1 s2 − W1 (2.18)
0 = s21 + s23 − Bs1 s3 − Cs1 + Ds3 − W2 (2.19)
0= s22 + s23 − Es2 s3 − F s2 + Ds3 − W3 (2.20)
con:
A = 2(fˆ1 · fˆ2 )
B = 2(fˆ1 · fˆ3 )
C = 2(fˆ1 · T2 )
D = 2(fˆ3 · T2 )
E = 2(fˆ2 · fˆ3 )
F = 2(fˆ2 · T2 )
W1 = |P1 − P2 |2
W2 = |P1 − P3 |2 − |T2 |2
W3 = |P2 − P3 |2 − |T2 |2
El sistema de ecuaciones se resuelve utilizando resultantes [11]. Mediante resultantes se eliminan
s1 y s2 para obtener un polinomio de grado ocho en s3 . Resolviendo el polinomio se obtienen ocho
soluciones para s3 y las soluciones de s1 y s2 se obtienen mediante sustitución. Una vez encontradas
s1 , s2 y s3 se resuelve para R y finalmente para T . Con esto es posible encontrar hasta ocho poses
diferentes. Para seleccionar solo una de las ocho poses se aplican algunas restricciones sobre s1 , s2
y s3 , y se utiliza un punto adicional. Este procedimiento se detalla a continuación.

19
Método propuesto

2.3.1 Solución para las distancias entre las dos cámaras y los puntos 3D
Para eliminar s1 se crean las Ecuaciones 2.21 y 2.22. La Ecuación 2.21 se construye sumando las
Ecuaciones 2.18 y 2.19, y restando la Ecuación 2.20. Ecuación 2.22 es la suma de las Ecuaciones
2.19 y 2.20 menos la Ecuación 2.18.

a2 s21 + a1 s1 + a0 = 0 (2.21)
b1 s1 + b0 = 0 (2.22)

donde:

a2 = 2
a1 = −As2 − Bs3 − C
a0 = Es2 s3 + F s2 + W3 − W2 − W1
b1 = As2 − Bs3 − C
b0 = 2s23 − Es2 s3 − F s2 + 2Ds3 + W1 − W3 − W2

La Ecuación 2.22 se multiplica por s1 para obtener una tercera Ecuación. La representación en
forma de matriz de estas tres ecuaciones es:
 2    
s1 0 b1 b0 0
M1 s1  = 0 M1 =  0 b1 b0 
1 0 a2 a1 b0

La matriz M1 es una matriz de Sylvester [11]. El determinante de M1 es el resultante de las


Ecuaciones 2.21 y 2.22. Si el resultante es cero las Ecuaciones 2.21 y 2.22 tienen una raı́z común en
s1 . Entonces el determinante de M1 se iguala con cero para crear la Ecuación 2.23:
c12 s43 + c11 s33 s2 + c10 s23 s22 + c9 s33 + c8 s23 s2 + c7 s3 s22 + c6 s23 + c5 s3 s2 + c4 s22 + c3 s3 + c2 s2 + c0 = 0 (2.23)

donde:

c12 = 8 − 2B 2
c11 = 2EB 2 − 8E
c10 = 2A2 − 2BAE + 2E 2
c9 = −2DB 2 − 4CB + 16D
c8 = 2F B 2 + 4CEB − 8F − 8DE
c7 = 2A2 D + 4EF − 2ABF − 2ACE
c6 = 8W1 − 8W2 − 8W3 − 2B 2 W1 + 2B 2 W3 − 2C 2 + 8D2 − 4BCD
c5 = 2EC 2 + 4BF C − 8DF − 4EW1 + 4EW2 + 4EW3 + 2ABW1 + 2ABW2 − 2ABW3
c4 = −2W2 A2 − 2CAF + 2F 2
c3 = 8DW1 − 2C 2 D − 8DW2 − 8DW3 − 4BCW1 + 4BCW3
c2 = 2C 2 F − 4F W1 + 4F W2 + 4F W3 + 2ACW1 + 2ACW2 − 2ACW3
c0 = −2C 2 W1 + 2C 2 W3 + 2W12 − 4W1 W2 − 4W1 W3 + 2W22 + 4W2 W3 + 2W32

20
2.3 Estimación de pose del sistema de dos cámaras

Para eliminar s2 las Ecuaciones 2.19 y 2.23 se reescriben en términos de s2 :

s22 + d1 s2 + d0 = 0 (2.24)
e2 s22 + e1 s2 + e0 = 0 (2.25)

donde:

d1 = −Es3 − F
d0 = s23 + Ds3 − W3
e2 = c10 s23 + c7 s3 + c4
e1 = c11 s33 + c8 s23 + c5 s3 + c2
e0 = c12 s43 + c9 s33 + c6 s23 + c3 s3 + c0

La matriz de Sylvester M2 se construye a partir de las Ecuaciones 2.24 y 2.25:


 3    
s2 0 1 d1 d0 0
s22  0  0 1 d1 d0 
M2 
s2  = 0
   M2 = e2 e1 e0 0 

1 0 0 e2 e1 e0
El resultante se iguala con cero para obtener la Ecuación 2.26:

g8 s83 + g7 s73 + g6 s63 + g5 s53 + g4 s43 + g3 s33 + g2 s23 + g1 s3 + g0 = 0 (2.26)

donde:

g8 = E 2 c10 c12 + Ec10 c11 + Ec11 c12 + c210 − 2c10 c12 + c211 + c212

g7 = 2c7 c10 − 2c7 c12 + 2c8 c11 − 2c9 c10 + 2c9 c12 + 2Dc210 + Dc211 − 2Dc10 c12 + Ec7 c11 + Ec8 c10 +
Ec8 c12 + Ec9 c11 + F c10 c11 + F c11 c12 + E 2 c7 c12 + E 2 c9 c10 + DEc10 c11 + 2EF c10 c12

g6 = 2c4 c10 − 2c4 c12 + 2c5 c11 − 2c6 c10 − 2c7 c9 + 2c6 c12 − 2W3 c210 − W3 c211 + c27 + c28 + c29 + D2 c210 +
4Dc7 c10 − 2Dc7 c12 + 2Dc8 c11 − 2Dc9 c10 + Ec4 c11 + Ec5 c10 + Ec7 c8 + Ec5 c12 + Ec6 c11 +
Ec8 c9 + F c7 c11 + F c8 c10 + F c8 c12 + F c9 c11 + 2W3 c10 c12 + E 2 c4 c12 + E 2 c6 c10 + E 2 c7 c9 +
F 2 c10 c12 + DEc7 c11 + DEc8 c10 + DF c10 c11 + 2EF c7 c12 + 2EF c9 c10 − EW3 c10 c11

g5 = 2c4 c7 + 2c2 c11 − 2c3 c10 − 2c4 c9 + 2c5 c8 − 2c6 c7 + 2c3 c12 + 2c6 c9 + 2Dc27 + Dc28 + 4Dc4 c10 −
2Dc4 c12 + 2Dc5 c11 − 2Dc6 c10 − 2Dc7 c9 + Ec2 c10 + Ec4 c8 + Ec5 c7 + Ec2 c12 + Ec3 c11 + Ec5 c9 +
Ec6 c8 + F c4 c11 + F c5 c10 + F c7 c8 + F c5 c12 + F c6 c11 + F c8 c9 − 4W3 c7 c10 + 2W3 c7 c12 −
2W3 c8 c11 + 2W3 c9 c10 − 2DW3 c210 + 2D2 c7 c10 + E 2 c3 c10 + E 2 c4 c9 + E 2 c6 c7 + F 2 c7 c12 +
F 2 c9 c10 + DEc4 c11 + DEc5 c10 + DEc7 c8 + DF c7 c11 + DF c8 c10 + 2EF c4 c12 + 2EF c6 c10 +
2EF c7 c9 − EW3 c7 c11 − EW3 c8 c10 − F W3 c10 c11

21
Método propuesto

g4 = 2c2 c8 − 2c0 c10 − 2c3 c7 − 2c4 c6 + 2c0 c12 + 2c3 c9 − 2W3 c27 − W3 c28 + c24 + c25 + c26 + D2 c27 +
W32 c210 + 4Dc4 c7 + 2Dc2 c11 − 2Dc3 c10 − 2Dc4 c9 + 2Dc5 c8 − 2Dc6 c7 + Ec2 c7 + Ec4 c5 +
Ec0 c11 + Ec2 c9 + Ec3 c8 + Ec5 c6 + F c2 c10 + F c4 c8 + F c5 c7 + F c2 c12 + F c3 c11 + F c5 c9 +
F c6 c8 − 4W3 c4 c10 + 2W3 c4 c12 − 2W3 c5 c11 + 2W3 c6 c10 + 2W3 c7 c9 + 2D2 c4 c10 + E 2 c0 c10 +
E 2 c3 c7 + E 2 c4 c6 + F 2 c4 c12 + F 2 c6 c10 + F 2 c7 c9 + DEc2 c10 + DEc4 c8 + DEc5 c7 + DF c4 c11 +
DF c5 c10 + DF c7 c8 + 2EF c3 c10 + 2EF c4 c9 + 2EF c6 c7 − 4DW3 c7 c10 − EW3 c4 c11 −
EW3 c5 c10 − EW3 c7 c8 − F W3 c7 c11 − F W3 c8 c10

g3 = 2c2 c5 − 2c0 c7 − 2c3 c4 + 2c0 c9 + 2c3 c6 + 2Dc24 + Dc25 − 2Dc0 c10 + 2Dc2 c8 − 2Dc3 c7 −
2Dc4 c6 + Ec2 c4 + Ec0 c8 + Ec2 c6 + Ec3 c5 + F c2 c7 + F c4 c5 + F c0 c11 + F c2 c9 + F c3 c8 + F c5 c6 −
4W3 c4 c7 − 2W3 c2 c11 + 2W3 c3 c10 + 2W3 c4 c9 − 2W3 c5 c8 + 2W3 c6 c7 − 2DW3 c27 + 2D2 c4 c7 +
E 2 c0 c7 + E 2 c3 c4 + F 2 c3 c10 + F 2 c4 c9 + F 2 c6 c7 + 2W32 c7 c10 + DEc2 c7 + DEc4 c5 + DF c2 c10 +
DF c4 c8 + DF c5 c7 + 2EF c0 c10 + 2EF c3 c7 + 2EF c4 c6 − 4DW3 c4 c10 − EW3 c2 c10 − EW3 c4 c8 −
EW3 c5 c7 − F W3 c4 c11 − F W3 c5 c10 − F W3 c7 c8

g2 = D2 c24 + DEc2 c4 + DF c2 c7 + DF c4 c5 − 4DW3 c4 c7 + 2Dc2 c5 − 2Dc3 c4 − 2c0 Dc7 + c0 E 2 c4 +


2EF c3 c4 + 2c0 EF c7 − EW3 c2 c7 − EW3 c4 c5 + Ec2 c3 + c0 Ec5 + F 2 c3 c7 + c6 F 2 c4 + c0 c10 F 2 −
c10 F W3 c2 − c8 F W3 c4 − F W3 c5 c7 + F c2 c4 + c6 F c2 + F c3 c5 + c0 c8 F + 2c10 W32 c4 + W32 c27 −
2c8 W3 c2 + 2W3 c3 c7 − 2W3 c24 + 2c6 W3 c4 − W3 c25 + 2c0 c10 W3 + c22 + c23 − 2c0 c4 + 2c0 c6

g1 = c3 F 2 c4 + c0 c7 F 2 − c7 F W3 c2 − c5 F W3 c4 + DF c2 c4 + c3 F c2 + 2Ec0 F c4 + c0 c5 F + 2c7 W32 c4 −


EW3 c2 c4 − 2c5 W3 c2 − 2DW3 c24 + 2c3 W3 c4 + 2c0 c7 W3 + Dc22 + Ec0 c2 − 2Dc0 c4 + 2c0 c3

g0 = F 2 c0 c4 − F W3 c2 c4 + F c0 c2 + W32 c24 + 2W3 c0 c4 − W3 c22 + c20

Al resolver la Ecuación 2.26 se obtienen ocho soluciones para s3 . Para cada solución de s3 se
obtiene s2 de la Ecuación 2.27. Ecuación 2.27 es una combinación lineal de las Ecuaciones 2.24 y
2.25. A partir de s3 y s2 , se obtiene s1 resolviendo la Ecuación 2.22.
(e1 − e2 d1 )s2 + e0 − e2 d0 = 0 (2.27)

2.3.2 Solución para la pose del sistema de dos cámaras


Una vez encontradas las distancias se resuelve para R. Para esto se crea el siguiente sistema de
ecuaciones a partir de las Ecuaciones 2.15 y 2.16:
X1 = RY1
X2 = RY2
X3 = RY3

22
2.3 Estimación de pose del sistema de dos cámaras

donde:

X1 = s1 fˆ1 − s2 fˆ2
X2 = s1 fˆ1 − s3 fˆ3 − T2
X3 = X1 × X2

Y1 = P1 − P2
Y2 = P1 − P3
Y3 = Y1 × Y2

Si se define:

X = [X1 , X2 , X3 ]
Y = [Y1 , Y2 , Y3 ]

el sistema de ecuaciones se representa como:

X = RY

Entonces:

R = XY −1

A partir de R, se resuelve para T con la Ecuación 2.12.


Para seleccionar una de las ocho poses (R, T ) primero se descartan las soluciones complejas.
Debido a la inexactitud al realizar las mediciones en la imagen es posible que algunas soluciones
tengan un componente imaginario pequeño. Estas se consideran como reales y no se descartan. Si
se considera que los puntos observados están enfrente de la cámara se tiene que s1 > 0, s2 > 0 y
s3 > 0 por lo que las soluciones negativas también se descartan.
La selección entre las poses restantes se realiza utilizando un cuarto punto, P4 . Al igual que P3 ,
este punto es observado por la cámara 2. Para cada pose se calcula el error de reproyección de P4 ,
denotado por ε, como sigue:

p̃04 = K2 R2T (RP4 + T − T2 )


(2.28)
ε = |p04 − p4 |

donde p04 es la reproyección de P4 en la imagen de la cámara 2 y p4 es el punto correspondiente de


P4 en la imagen de la cámara 2. Finalmente, se selecciona (R, T ) que minimice ε.
De forma experimental se encontró que se obtienen mejores resultados para la estimación de
pose del sistema de dos cámaras si la detección de las lı́neas del patrón en las lı́neas de imagen se
realiza a nivel de subpı́xel. El método utilizado para realizar la detección del patrón al nivel de
subpı́xel se presenta en la siguiente sección.

23
Método propuesto

2.4 Detección del patrón a nivel de subpı́xel

Para realizar la detección de las lı́neas del patrón a nivel de subpı́xel, cada pixel de la lı́nea de
imagen se convierte a dos canales como max(rojo, azul), para lU , y max(verde, azul), para lV .
Se suaviza cada canal con un filtro gaussiano y se calcula el gradiente. Al graficar el gradiente se
observan picos que corresponden al inicio y al fin de cada lı́nea del patrón. Estos son los bordes
de la lı́nea. El gradiente de ambos bordes se modela como una curva gaussiana y para calcular su
posición en la lı́nea de imagen se ajusta una curva de este tipo utilizando mı́nimos cuadrados de la
misma manera que en [7]. La razón por la que se utilizan curvas gaussianas es que el gradiente de
una función escalón (borde de lı́nea) que ha sido suavizada con un filtro gaussiano tiene esta forma.
El modelo de la curva gaussiana es:

−(u − µ)2
 
f (u) = A exp
2σ 2

donde:

• A es el máximo valor del gradiente.

• µ es el punto central de la curva que representa la coordenada del borde.

• σ es el grado de suavizado del borde.

El ajuste consiste en encontrar A, µ y σ que minimicen el error cuadrático. Sin embargo, se


requieren valores iniciales de los parámetros. Para esto, primero se realiza una detección rápida de
las lı́neas a nivel de pixel. Esta detección consiste en encontrar los pixeles en donde ocurren las
transiciones de negro al color de la lı́nea y del color a negro. El punto medio entre las transiciones
se considera como el centro de la lı́nea. Dependiendo de si las lı́neas detectadas pertenecen a lU o a
lV , se selecciona el canal max(rojo, azul) o max(verde, azul) para realizar la detección a subpı́xel.
Los parámetros se inicializan a partir de los pixeles vecinos a los centros encontrados. Para el
borde inicial, A se inicializa con el máximo valor del gradiente de los pixeles a la izquierda del centro
y µ se inicializa con su coordenada. Para el borde final, la inicialización se realiza de forma similar
con el gradiente negado de los pixeles a la derecha del centro. En ambos casos se utiliza σ = 1. Ya
encontrados los valores iniciales, se procede a realizar el ajuste de las curvas a los bordes.
Una vez terminado el ajuste para ambos bordes se calcula el centro de la lı́nea como:

µinicio + µf in
µcentro =
2
donde:

• µinicio es la coordenada del borde inicial.

• µf in es la coordenada del borde final.

Este procedimiento se repite para las cinco lı́neas, lA , lB , lC , lD y lE del patrón. Los puntos 2D
correspondientes a las lı́neas del patrón ahora tienen la forma hµcentro , vi y los puntos observados
sobre el patrón en el espacio 3D se determinan con las Ecuaciones 2.7 y 2.8. El procedimiento
completo se ilustra con la Figura 2.13.

24
250

200

150

100

Intensidad
50

2.4 Detección del patrón a nivel de subpı́xel


0

-50

-100

562 564 566 568 570 572 574 576 578 580 582
u
(a) Lı́nea del patron detectada rápidamente a nivel de pixel. (b) En la gráfica del gradiente se observan picos que corresponden a los
Dado que la lı́nea pertenece al conjunto lu , el análisis para cambios abruptos de intensidad que ocurren al inicio y al fin de la lı́nea.
refinar su detección a nivel de subpı́xel se realiza sobre el canal Estos son los bordes de la lı́nea y, para encontrar sus coordenadas, sus
rojo y azul. gradientes se modelan como curvas gaussianas.

Figura 2.13: Detección a nivel subpı́xel de las lı́neas del patrón (1 de 2).
25
26

Método propuesto
250 250

200 200

150 150

100 100
Intensidad

Intensidad
50 50

0 0

-50 -50

-100 -100

562 564 566 568 570 572 574 576 578 580 582 562 564 566 568 570 572 574 576 578 580 582
u u

(c) Se ajusta una curva gaussiana al gradiente de cada borde con mı́nimos (d) El centro de la lı́nea se toma como el punto medio entre los bordes.
cuadrados. La media de las curvas es la coordenada de cada borde. Este punto representa el subpı́xel en donde se detectó la lı́nea.

Figura 2.13: Detección a nivel subpı́xel de las lı́neas del patrón (2 de 2).
3
Implementación en plataforma reconfigurable

La implementación se realizó con el Xilinx Zynq UltraScale+ MPSoC ZCU102 Evaluation Kit y dos
cámaras LI-IMX274MIPI-FMC. El equipo completo se muestra en la Figura 3.1.

Figura 3.1: El equipo utilizado consiste en una tarjeta ZCU102 con dos módulos LI-IMX274MIPI-
FMC que contienen un sensor de imagen Sony IMX274 con modo de captura RS.

El dispositivo central de la tarjeta ZCU102 es el chip Zynq UltraScale+ EG (ZUS). El ZUS está
compuesto principalmente de dos partes [15]: Programmable Logic (PL) y Processing System (PS),
como se muestra en la Figura 3.2 [15]. El PL es en esencia una FPGA y el PS es una computadora
con soporte para varios sistemas operativos. Ambos pueden comunicarse entre sı́ y compartir datos.

27
Implementación en plataforma reconfigurable

Figura 3.2: Zynq UltraScale+ EG.

El diseño de hardware para el PL se elabora con Vivado. En Vivado, los diseños se realizan
de manera visual similar a LabVIEW o Simulink. Cada diseño se compone de un diagrama de
bloques. Los bloques representan funciones o módulos sintetizables en el PL. Vivado incluye varios
módulos que permiten utilizar las caracterı́sticas del ZUS y la tarjeta ZCU102. Para elaborar
módulos personalizados se utiliza Vivado HLS. Vivado HLS genera módulos compatibles con Vivado
a partir de código C, C++ ó System C e incluye varias bibliotecas que agilizan la implementación de
algoritmos en el PL. El desarrollo de software para el PS se realiza con Xilinx SDK. Los lenguajes que
soporta son C y C++. Además de las bibliotecas estándar de C y C++, Xilinx SDK contiene drivers
para los módulos incluidos en Vivado. En el caso de módulos personalizados los drivers generados
por Vivado HLS se tienen que importar. Los drivers son funciones que facilitan al software la
comunicación con el hardware del PL y del PS.
El flujo de trabajo consiste en primero realizar el diseño de hardware para el PL con Vivado y
Vivado HLS. Una vez terminado, se realiza la sı́ntesis para obtener el bitstream a programar en la
FPGA. Después, el diseño se exporta a Xilinx SDK y se elabora el software para el PS encargado
de inicializar el hardware. Finalmente, se realiza la programación de la FPGA y la descarga del
software en la memoria principal de la tarjeta ZCU102 para su ejecución.

28
3.1 Diseño de hardware para el PL

Se decidió utilizar el kit ZCU102 debido a que presentaba la posibilidad de facilitar bastante
la implementación. La tarjeta ZCU102 permite conectar fácilmente dos cámaras LI-IMX274MIPI-
FMC. El fabricante proporciona los drivers para estas cámaras y Xilinx proporciona un diseño de
referencia y documentación que permite empezar a utilizar las cámaras y el kit rápidamente.

3.1 Diseño de hardware para el PL

En la Figura 3.3 se presenta el diseño de hardware elaborado con Vivado y Vivado HLS. El diseño
se basa en parte en [16]. Las cámaras se configuran mediante comandos enviados a través de los
módulos AXI IIC para operar a una resolución de 3840x2160 pixeles (4K) a 60 FPS. El video se
recibe en el PL por los módulos MIPI CSI-2 RX Subsystem. Por cada ciclo de reloj de video se
adquieren dos pixeles. Cada pixel consta de ocho bits que representan su luminancia después del
mosaico de Bayer de la cámara. El color de los pixeles se reconstruye a partir de la intensidad de
sus pixeles vecinos por los módulos Sensor Demosaic para obtener video en formato R8B8G8. Los
módulos Gamma LUT permiten aplicar una función arbitraria sobre los canales RGB del video.
Para todos los canales se aplica la función identidad. Los módulos Video Processing Subsystem
convierten el video a formato YUV422 para reducir el ancho de banda de video. Esto es necesario
para que los módulos Video Frame Buffer Write puedan almacenar los cuadros de video en la
memoria principal. De ahı́ se pueden transferir a una tarjeta SD. El módulo AXI GPIO lee el
estado de los pushbuttons de la tarjeta ZCU102 con la intención de que el usuario pueda indicar al
sistema cuando realizar esta transferencia.

3.1.1 Módulo Sincronización


El módulo Sincronización convierte las señales de sincronización del video para facilitar su proce-
samiento a nivel de lı́nea de video. Esto se describe a continuación. El video se transmite con el
protocolo AXI4-Stream que incluye tres buses: TDATA, TUSER y TLAST. Cada ciclo de reloj
se transmite un bloque de dos pixeles por TDATA. Para el primer bloque de un cuadro de video
TUSER se mantiene en alto y para los demás bloques del mismo cuadro se mantiene en bajo.
TLAST se mantiene en bajo excepto para el último bloque de cada lı́nea donde se mantiene en
alto. La conversión consiste en mantener TUSER en alto para el primer bloque de cada lı́nea con el
fin de simular cuadros de 3840x1 pixeles. Además, el número de la lı́nea se almacena en el primer
bloque de cada lı́nea. Aunque se pierden los primeros dos pixeles de cada lı́nea todo esto simplifica
bastante el diseño de los módulos que le siguen.

3.1.2 Módulo Detector de patrón


Los módulos Detector de patrón procesan las lı́neas de video para encontrar los pixeles en donde
se observan las lı́neas del patrón. En la Figura 3.4 se muestra el diagrama de bloques del módulo
Detector de patrón. Los bloques de pixeles se convierten a formato COLOR de tres bits según la
Tabla 3.1. Para esto, los pixeles se convierten de formato RBG a HSV y de HSV a COLOR. Los
dos pixeles convertidos se insertan en un registro de desplazamiento de longitud seis pixeles. Los
cuatro pixeles restantes son los pixeles de los dos bloques anteriores. A partir de este registro se
genera un solo COLOR que se utiliza para detectar el borde de colores y las lı́neas del patrón. El
propósito de la conversión a COLOR con el registro de desplazamiento es realizar un suavizado de
la imagen para reducir el efecto del ruido que sea muy económico en el uso de recursos de la FPGA.

29
30

Implementación en plataforma reconfigurable


Figura 3.3: Diagrama de bloques del diseño de hardware. El video de ambas cámaras se procesa para detectar el patrón en la
escena y estimar la pose del sistema de cámaras. Se incluye funcionalidad para almacenar imágenes de las cámaras en una tarjeta
SD. Para simplificar el diagrama solo se muestran los bloques más importantes.
3.1 Diseño de hardware para el PL

Figura 3.4: Diagrama de bloques del módulo Detector de patrón. Los pixeles de cada lı́nea de video
se procesan para detectar los puntos correspondientes a las lı́neas del patrón.

Tabla 3.1: Formato COLOR.

Valor Etiqueta Descripción


0 COLOR M Magenta
1 COLOR R Rojo
2 COLOR Y Amarillo
3 COLOR G Verde
4 COLOR C Cian
5 COLOR B Azul
6 COLOR W Blanco
7 COLOR K Negro

El detector de borde del patrón detecta las transiciones de color verde a rojo, rojo a azul y
azul a negro. Una vez detectadas estas tres transiciones en este orden se considera que los pixeles
siguientes se encuentran dentro del patrón y se activa el detector de lı́neas del patrón. El detector
de lı́neas del patrón detecta las transiciones de negro a rojo y rojo a negro, en el caso de las lı́neas
lU , y las transiciones de negro a verde y verde a negro, en el caso de las lı́neas lV . El color azul,
correspondiente a las intersecciones de lU y lV , se considera equivalente a los colores rojo y verde.
Las coordenadas de los pixeles correspondientes a las lı́neas del patrón se entregan en una estructura
de diez bytes denominada descriptor de patrón presentada en la Tabla 3.2.
El valor del campo row se extrae del primer bloque de la lı́nea de video. A partir de las
coordenadas en donde se detectan las transiciones se van llenando los campos a, b, c, d y e. El
campo type indica el conjunto al que pertenecen las lı́neas observadas y se llena al detectar la quinta
lı́nea de lU o lV . Para cada lı́nea de video se entrega un descriptor, aunque no se observe el patrón
o se observe parcialmente. Esta condición se indica con el campo valid. Al momento de llenar
el campo e, valid cambia de bajo a alto y el descriptor se envı́a inmediatamente. Si se detecta
TLAST alto antes de llenar todos los campos, valid permanece en bajo y se envı́a el descriptor.

31
Implementación en plataforma reconfigurable

Tabla 3.2: Estructura del descriptor de patrón.

Bit Campo Descripción


0-11 a Coordenada u de a (0 − 3839)
12-23 b Coordenada u de b (0 − 3839)
24-35 c Coordenada u de c (0 − 3839)
36-47 d Coordenada u de d (0 − 3839)
48-59 e Coordenada u de e (0 − 3839)
60-71 row Coordenada v de a-e (0 − 2159)
72 type 0 si a-e pertenecen al conjunto lU , 1 si pertenecen a lV
73 valid 1 si a-e son todos válidos, 0 de lo contrario
74-79 reserved Siempre es 0

3.1.3 Módulo P3P


El módulo P3P determina los puntos correspondientes a partir de los descriptores de patrón y con
ellos realiza la estimación de pose del sistema de cámaras. En la Figura 3.5 se muestra su diagrama
de bloques.
Los puntos observados del patrón se calculan a partir de (a, b; c, d) y (e, d; c, b) con la Ecuación
2.7 si type es lU o con la Ecuación 2.8 si type es lV . Del descriptor 1 se obtienen los puntos P1 y
P2 , y del descriptor 2 se obtienen P30 y P40 . En ambos casos, los puntos corresponden a las lı́neas del
patrón en los extremos: lA y lE debido que el cálculo de A y E requiere mucho menos operaciones
que el cálculo de B, C o D.
Los puntos P30 y P40 se convierten a la cámara 1 para simular como si los cuatro puntos fueran
vistos por esa cámara. La conversión se realiza como sigue:

P3 = P30 − T2
P4 = P40 − T2

Los puntos p1 , p2 , p3 y p4 se construyen a partir de los campos a, b, c, d, e, y row de ambos


descriptores y los vectores unitarios fˆ1 , fˆ2 , fˆ3 y fˆ4 se calculan con las Ecuaciones 2.9 a 2.11.
Con P1 , P2 , P3 , fˆ1 , fˆ2 y fˆ3 se resuelve el problema P3P de una cámara para estimar la pose del
sistema de cámaras. Dado que P3P entrega hasta cuatro soluciones, se selecciona (R, T ) utilizando
la reproyección de P4 de forma similar a la ecuacion 2.28. Finalmente, la señal valid indica si la
solución es válida.
Se utilizó la implementación en C++ de [17] que a su vez se basa en [5]. El código C++ se
reescribió para utilizar números en formato punto fijo en lugar de números en formato punto flotante
para ahorrar recursos de la FPGA y reducir la latencia, tal que el módulo P3P opere en tiempo
real.
Las señales de interrupción (IRQ) de los módulos AXI IIC, MIPI CSI-2 RX Subsystem, Video
Frame Buffer Write y P3P se conectan al módulo AXI Interrupt Controller para permitir al software
en el PS detectar eventos importantes de estos módulos y responder adecuadamente.

32
3.2 Aplicación de software para el PS

Figura 3.5: Diagrama de bloques del módulo P3P. Los puntos correspondientes se obtienen de los
descriptores de patrón y se estima la pose del sistema de cámaras con P3P.

3.2 Aplicación de software para el PS

La configuración del hardware es realizada por una aplicación que se ejecuta en el PS. La aplicación
se elaboró con Xilinx SDK y en la Figura 3.6 se presenta su diagrama de bloques. La comunicación
entre la aplicación y el hardware ocurre mediante registros mapeados en memoria por el protocolo
AXI4-Lite. Además de los módulos en el PL se configuran algunos módulos del PS.
El módulo SD/eMMC del PS se configura utilizando el driver xilffs incluı́do en Xilinx SDK. Este
driver permite leer y escribir archivos en una tarjeta SD con sistema de archivos FAT (FATFS).
Con esto es posible almacenar las imágenes de las cámaras en la tarjeta SD. Para que la aplicación
detecte las interrupciones de los módulos en el PL, además de configurar el módulo AXI Interrupt
Controller, es necesario configurar el General Interrupt Controller (GIC) del Application Processing
Unit (APU) del PS. Finalmente, se configuran los puertos EMIO del PS. En el diseño de hardware
elaborado, estos se conectan a los puertos de reset de los módulos en PL y de las cámaras. Esto
permite aplicar reset al hardware desde la aplicación. La configuración de los módulos SD/eMMC,
GIC, EMIO, AXI Interrupt Controller, AXI GPIO, AXI IIC, Video Frame Buffer Write, Video
Processing Subsystem, Gamma LUT, Sensor Demosaic y MIPI CSI-2 Rx Subsystem se realiza a
partir de los drivers, ejemplos y documentación incluidos en Xilinx SDK.
Los módulos Sincronización, Detector de patrón y P3P se configuran con los drivers generados
por Vivado HLS. Con los drivers del módulo P3P se envı́an los parámetros K1 , K2 , R2 y T2 , y
se reciben los resultados R, T y valid de acuerdo a la Tabla 3.3. Estos parámetros se obtienen
realizando la calibración de ambas cámaras [13, 10] y se muestran, junto con sus valores equivalentes
escritos en los registros de hardware del módulo P3P, en la Tabla 3.4. Los parámetros y la pose
estimada se representan en formato punto fijo de veinticuatro bits con signo a complemento de dos.
Para configurar ambas cámaras se utiliza el driver en C del sensor Sony IMX274 del repositorio
de Linux [18]. El driver se modificó debido a que la aplicación se ejecuta sin sistema operativo
(standalone). Todas las llamadas al sistema operativo Linux se eliminan y todas las transacciones
IIC se redirigen al driver de AXI IIC.

33
Implementación en plataforma reconfigurable

Figura 3.6: Diagrama de bloques de la aplicación en el PS. Primero se configuran los módulos en
el PL, PS, y las cámaras. Después se entra al bucle principal en donde se detecta el estado de
los pushbuttons de la tarjeta ZCU102 y se realiza la acción asociada a cada botón. Cuando el
módulo P3P finaliza la estimación de pose, su lı́nea P3P IRQ cambia de bajo a alto para pedir una
interrupción. Al detectarse esta condición, se detiene la ejecución del bucle principal y se procede
a ejecutar P3P ISR. Ahı́ se leen los resultados del módulo P3P y se almacenan en memoria. Al
finalizar P3P ISR, la ejecución regresa al bucle principal para continuar desde donde se quedó.

34
3.2 Aplicación de software para el PS

3.2.1 Bucle principal


Después de la inicialización del hardware se procede a ejecutar el bucle principal de la aplicación.
En este bucle se lee de manera continua el estado de los pushbuttons de la tarjeta ZCU102 y se
realiza la acción correspondiente a cada botón al detectar que se ha presionado. Solo se utilizan dos
botones numerados 0 y 1.
Al presionar el botón 0, la aplicación guarda las imágenes de las cámaras en la tarjeta SD en
formato YUV422. Estas imágenes son los cuadros de video almacenados por los módulos Video
Frame Buffer Write (DMA) en la memoria principal.
Para evitar que los DMA escriban sobre las imágenes mientras se transfieren a la tarjeta SD,
lo cual destruye las imágenes, se utilizan dos Frame Buffers (FB). Cada FB abarca un espacio de
memoria suficiente para almacenar un cuadro de video. Cuando un canal DMA termina de transferir
un cuadro a memoria se selecciona el otro FB como destino para la siguiente transferencia, tal que
se alternan entre cuadros. Al presionar el botón ambos DMA detienen esta alternancia y utilizan
como destino para las siguientes transferencias el mismo FB con el que estaban trabajando (DMA
lock). El contenido del otro FB, que es el último cuadro capturado completamente, se transfiere a
la tarjeta SD y debido al DMA lock permanece intacto durante toda la transferencia, la cual dura
un tiempo equivalente a varios cuadros. Al finalizar la transferencia los FB continúan alternándose
(DMA unlock) entre cuadros.
Al presionar el botón 1 se muestran los últimos resultados obtenidos del módulo P3P en la PC
de desarrollo. La forma en que se obtienen los resultados se describe a continuación.
El módulo P3P se configura tal que solo la interrupción ap done está permitida. Para esto, todas
las interrupciones se habilitan en el registro P3PGIE, pero solo se habilita ap done en P3PIE. Cuando
el módulo P3P termina la estimación de pose ap done del registro P3PIF cambia de bajo a alto y lo
mismo sucede para la lı́nea P3P IRQ conectada a AXI Interrupt Controller. Al detectar esto, AXI
Interrupt Controller envı́a una señal al GIC y este a su vez envı́a una señal (nIRQ) al procesador
ARM Cortex A53 que ejecuta la aplicación. El procesador entra en el estado de excepción IRQ.
La ejecución del bucle principal se detiene y el procesador guarda los datos de contexto necesarios
para continuar después desde la instrucción que no se ejecutó debido a la interrupción.
Ya guardados los datos, la ejecución salta al vector de excepción IRQ para ejecutar el IRQ
Exception Handler. De ahı́ la ejecución pasa a la rutina de servicio de interrupción (ISR) del GIC,
después al ISR del AXI Interrupt Controller y finalmente llega al ISR del módulo P3P. El ISR
del módulo P3P primero deshabilita todas las interrupciones en P3PGIE (IRQ disable). Después se
indica al módulo P3P que la interrupción se ha reconocido escribiendo un 1 al bit ap done de P3PIF
(IRQ acknowledge), con lo cual regresa de alto a bajo junto con la lı́nea P3P IRQ. Los resultados
se leen de los registros de hardware mapeados en la región de memoria 0xB01000B0 a 0xB0100117
y se almacenan en variables globales. Se habilitan nuevamente las interrupciones en P3PGIE (IRQ
enable) y la operación del módulo P3P se reinicia escribiendo un 1 al bit ap start de P3PCNT.
Al finalizar P3P ISR la ejecución regresa en el orden inverso a IRQ Exception Handler. El
contexto se restaura y la ejecución del bucle principal continua desde donde se quedó. Al presionar
el botón, los resultados guardados en las variables globales se envı́an por UART a la PC de desarrollo
y se despliegan en terminal.
En la Figura 3.7 se presenta la configuracion experimental con la tarjeta ZCU102, las dos
camaras y la PC de desarrollo. En la Figura 3.8 se muestra un par de las imágenes capturadas con
la aplicación para la calibración de ambas cámaras. En total se utilizaron treinta y cuatro pares de
imágenes. En la Figura 3.9 se presenta un par de imágenes del patrón.

35
Implementación en plataforma reconfigurable

Tabla 3.3: Mapa de memoria del módulo P3P.

Control del módulo P3P

0xB0100000 P3PCNT Control Signals (R/W)


Bit Campo Descripción
0 ap start (1=iniciar) regresa a 0 al módulo aceptar la señal de inicio
1 ap done (0=no terminado, 1=terminado) regresa a 0 al ser leı́do (R)
2 ap idle (0=activo, 1=inactivo) (R)
3 ap ready (0=no acepta datos, 1=acepta datos) (R)
4-6 Reservado
7 auto restart (0=sin reinicio automático, 1=reiniciar al terminar)
8-31 Reservado

0xB0100004 P3PGIE Global Interrupt Enable (R/W)


Bit Campo Descripción
0 gie (0=deshabilitar todas las interrupciones, 1=revisar P3PIE)
1-31 Reservado

0xB0100008 P3PIE Interrupt Enable (R/W)


Bit Campo Descripción
0 ap done IRQ enable (1=habilitar)
1 ap ready IRQ enable (1=habilitar)
2-31 Reservado

0xB010000C P3PIF Interrupt Status (R/W)


Bit Campo Descripción
0 ap done IRQ (1=interrupción solicitada)
1 ap ready IRQ (1=interrupción solicitada)
2-31 Reservado

Se debe indicar al módulo P3P que las interrupciones han sido procesadas escribiendo un 1 al bit
correspondiente de P3PIF. Esto regresa el bit a 0.

Matrices de calibración K1 y K2

0xB0100010 P3PFX1 Recı́proco de fx de K1 (R/W)


0xB0100018 P3PFY1 Recı́proco de fy de K1 (R/W)
0xB0100030 P3PFX2 Recı́proco de fx de K2 (R/W)
0xB0100038 P3PFY2 Recı́proco de fy de K2 (R/W)
Bit Campo
0-21 Parte fraccional
22 Parte entera
23 Signo
24-31 Reservado

36
3.2 Aplicación de software para el PS

0xB0100020 P3PCX1 cx de K1 (R/W)


0xB0100028 P3PCY1 cy de K1 (R/W)
0xB0100040 P3PCX2 cx de K2 (R/W)
0xB0100048 P3PCY2 cy de K2 (R/W)
Bit Campo
0-10 Parte fraccional
11-22 Parte entera
23 Signo
24-31 Reservado

Calibración estéreo (R2 , T2 )

0xB0100050 P3PR200 r00 de R2 (R/W)


0xB0100058 P3PR201 r01 de R2 (R/W)
0xB0100060 P3PR202 r02 de R2 (R/W)
0xB0100070 P3PR210 r10 de R2 (R/W)
0xB0100078 P3PR211 r11 de R2 (R/W)
0xB0100080 P3PR212 r12 de R2 (R/W)
0xB0100090 P3PR220 r20 de R2 (R/W)
0xB0100098 P3PR221 r21 de R2 (R/W)
0xB01000A0 P3PR222 r22 de R2 (R/W)
Bit Campo
0-21 Parte fraccional
22 Parte entera
23 Signo
24-31 Reservado

0xB0100068 P3PT2X tx de T2 (R/W)


0xB0100088 P3PT2Y ty de T2 (R/W)
0xB01000A8 P3PT2Z tz de T2 (R/W)
Bit Campo
0-12 Parte fraccional
13-22 Parte entera
23 Signo
24-31 Reservado

Resultados (R, T ) y valid

0xB01000B0 P3PR00 r00 de R (R)


0xB01000B8 P3PR01 r01 de R (R)
0xB01000C0 P3PR02 r02 de R (R)
0xB01000D0 P3PR10 r10 de R (R)
0xB01000D8 P3PR11 r11 de R (R)
0xB01000E0 P3PR12 r12 de R (R)

37
Implementación en plataforma reconfigurable

0xB01000F0 P3PR20 r20 de R (R)


0xB01000F8 P3PR21 r21 de R (R)
0xB0100100 P3PR22 r22 de R (R)
Bit Campo
0-21 Parte fraccional
22 Parte entera
23 Signo
24-31 Reservado

0xB01000C8 P3PTX tx de T (R)


0xB01000E8 P3PTY ty de T (R)
0xB0100108 P3PTZ tz de T (R)
Bit Campo
0-12 Parte fraccional
13-22 Parte entera
23 Signo
24-31 Reservado

0xB0100110 P3PSTAT Validez de solución (R)


Bit Campo
0 valid (0=error, 1=pose válida)
1-31 Reservado

Tabla 3.4: Configuración del módulo P3P.

Registro Valor Descripción


P3PFX1 0x00052F  
3161 0 1920
P3PFY1 0x00052F
K1 =  0 3161 1080
P3PCX1 0x3C0000
0 0 1
P3PCY1 0x21C000
P3PFX2 0x00052D  
3165 0 1920
P3PFY2 0x00052D
K2 =  0 3165 1080
P3PCX2 0x3C0000
0 0 1
P3PCY2 0x21C000
P3PR200 0x3FFEEE
P3PR201 0xFF8C70
P3PR202 0x009358  
P3PR210 0x006EFC 0.9999 −0.0070 0.0089
P3PR211 0x3FF7E1 R2 =  0.0067 0.9995 0.0307
P3PR212 0x01F7B7 −0.0092 −0.0306 0.9994
P3PR220 0xFF692E
P3PR221 0xFE0951
P3PR222 0x3FF798
 
P3PT2X 0xFBFBEC −32.127
P3PT2Y 0x000169 T2 =  0.044
P3PT2Z 0xFFFF6D −0.017

38
3.2 Aplicación de software para el PS
Figura 3.7: Configuración experimental con la tarjeta ZCU102 y PC de desarrollo.
39
40

Implementación en plataforma reconfigurable


Figura 3.8: Muestra de las imágenes capturadas para la calibración de las cámaras IMX274.

Figura 3.9: Imágenes del patrón capturadas con las cámaras IMX274.
4
Resultados
4.1 Simulación con imágenes sintéticas

La estimación de pose, al nivel de lı́nea de imagen con el patrón, de un sistema de dos cámaras
se evaluó con 40 pares de imágenes de 1024x768 pixeles generadas con K1 , K2 , R2 , T2 , R y T
conocidos, y sin distorsión. Los parámetros para todas las imágenes son:
   
600 0 512 30
K1 = K2 =  0 600 384 T2 =  0 R2 = I
0 0 1 0
mientras que para cada par se tienen diferentes R y T . A continuación, se describe el proceso de
simulación utilizando como ejemplo las imágenes generadas que se presentan en la Figura 4.1. La
pose del sistema de cámaras en el marco global para el ejemplo es:
   
−20 0.8435 0.4184 0.3368
−RT T =  30 RT = −0.4924 0.8529 0.1736
−70 −0.2146 −0.3123 0.9254
considerando que el marco global está dado por el marco de referencia del patrón.

(a) Cámara 1. (b) Cámara 2.

Figura 4.1: Imágenes sintéticas de ejemplo.

Se detecta el patrón en las lı́neas de imagen a nivel de subpı́xel [7] como se muestra en la
Figura 4.2. Las lı́neas de imagen en las que se realiza la detección se seleccionan tal que los puntos
observados no sean colineales. Esto se requiere para la estimación de pose con NP3P [6]. Se calculan
los puntos 3D observados sobre el plano del patrón con las Ecuaciones 2.7 y 2.8. Dado que el marco
global y el marco del patrón son lo mismo, se tiene z = 0 para todos los puntos 3D sobre el patrón.

41
Resultados

(a) Cámara 1. (b) Cámara 2.

Figura 4.2: Detección de las lı́neas del patrón en las imágenes de ejemplo.

Los puntos p1 , P1 , p2 y P2 se obtienen de la lı́nea de imagen de la cámara 1 y los puntos p3 ,


P3 , p4 y P4 de la lı́nea de imagen de la cámara 2. En ambos casos, los puntos corresponden a las
dos lı́neas del patrón en los extremos: lA y lE . Los vectores unitarios fˆ1 , fˆ2 y fˆ3 se calculan con
las Ecuaciones 2.9 a 2.11 y se estima la pose con NP3P. El resultado para el ejemplo se muestra en
la Tabla 4.1. La orientación se muestra representación eje-ángulo (r). La dirección del vector es el
eje y su magnitud es el ángulo en grados. El error se calcula como la norma de la diferencia de los
vectores.
Para los 40 pares de imágenes se realizó la estimación de pose de la misma manera que para el
ejemplo presentado. En la Tabla 4.2 se presenta de forma resumida los resultados obtenidos y se
comparan con los resultados que se obtienen cuando la detección del patrón se realiza solo a nivel de
pixel. La diferencia entre las coordenadas que se obtienen con la detección a subpı́xel y la detección
a pixel es menor que un pixel para la mayorı́a de los casos y en promedio es aproximadamente 21 de
pixel. Sin embargo, la diferencia entre los errores de la estimación de pose del sistema de cámaras
es notable, a tal grado que la detección a subpı́xel reduce los errores en más de un 90%. En la
siguiente sección se muestran experimentos con un sistema de dos cámaras real.

Tabla 4.1: Estimación de pose del sistema de cámaras para las imágenes de ejemplo.

Posición (−RT T ) Orientación (RT → r)


Estimación [−20.0117, 29.7814, −69.8405] [−15.0485, 16.9532, −27.8042]
Real [−20.0000, 30.0000, −70.0000] [−14.8720, 16.8752, −27.8732]
Error 0.2708 0.2050◦

Tabla 4.2: Resultados de la estimación de pose para los 40 pares de imágenes generadas.

Detección Promedio Mediana


Error de posición Subpı́xel 1.6695 1.31
(unidades) Pixel 58.9759 13.81
Error de orientación Subpı́xel 1.0354 0.75
(grados) Pixel 23.5799 8.70

42
4.2 Experimentos con imágenes reales

4.2 Experimentos con imágenes reales

La estimación de pose al nivel de lı́nea de imagen con el patrón se evaluó con un sistema de dos
cámaras real. Primero se realizó la calibración individual de cada cámara [13] y después se realizó
la calibración estéreo [10]. Para ambos procesos se utilizaron 191 pares de imágenes de un tablero
de ajedrez como se muestran en la Figura 4.3.

 
619.4982 0 320.7274
K1 = 0 619.7360 240.4950
0 0 1
 
620.7373 0 320.2150
K2 = 0 620.5822 239.9741
0 0 1
 
0.9999 0.0005 −0.0076
R2 = −0.0005 0.9999 −0.0008
0.0076 0.0008 0.9999
 
−16.1685
T2 =  −0.0279
−0.2383

(a) Cámara 1. (b) Cámara 2.

Figura 4.3: Muestra de las imágenes utilizada para la calibración del sistema de dos cámaras.

Se capturaron diez pares de imágenes de 640x480 pixeles del patrón. Utilizando los coeficientes
de distorsión encontrados en la etapa de calibración se remueve la distorsión de lente de las imágenes.
Las matrices K, presentadas anteriormente, son óptimas para estas imágenes sin distorsión [13].
Debido a que no se conoce la pose real del sistema de cámaras, el método se evalúa tomando
diferentes lı́neas de imagen de los pares de imágenes y comparando las poses que se obtienen. Esto
se muestra en la Figura 4.4. Cada par de imágenes se captura con una pose de cámara diferente,
pero la pose es constante para todas las lı́neas de imagen de un mismo par, por lo que las dos poses
estimadas para el mismo par de imágenes deben ser iguales.

43
Resultados

La detección del patrón en las imágenes es a nivel de subpı́xel [7] y se estima la pose con NP3P
[6] de la misma manera que para las imágenes sintéticas de la sección anterior. El error se calcula
como la norma de la diferencia de T y R en representación eje-ángulo (r) de las dos poses. En la
Tabla 4.3 se presenta de forma resumida los resultados obtenidos para los diez pares de imágenes
capturadas.

(a) Lı́nea cámara 1 primer conjunto. (b) Lı́nea cámara 2 primer conjunto.

(c) Lı́nea cámara 1 segundo conjunto. (d) Lı́nea cámara 2 segundo conjunto.

Figura 4.4: Comparación de pose para un mismo par de imágenes reales. Primero se estima la pose
del sistema de cámaras con una lı́nea de imagen de cada cámara y después se estima nuevamente
la pose con diferentes lı́neas de imagen. Las dos poses obtenidas se comparan y se calcula el error
entre las poses.

Tabla 4.3: Resultados de la comparación de pose para los diez pares de imágenes reales.

Promedio Mediana
Error T (1 unidad es aproximadamente 2.2mm) 4.0406 3.0040
Error r (grados) 12.1910 11.8489

44
5
Conclusiones y trabajo futuro

5.1 Conclusiones

La estimación de pose del sistema de dos cámaras a alta frecuencia se realiza aprovechando el efecto
RS. Con ayuda de un patrón especial incrustado en la escena se obtienen los puntos correspondientes
necesarios para la estimación de pose del sistema de cámaras. Este patrón se diseñó para permitir
la estimación de pose con NP3P al nivel de lı́nea de imagen con cámaras RS. Posibles aplicaciones
del método estudiado son aquellas en donde se requieran mediciones de pose a alta frecuencia.
Para evaluar el método de estimación de pose del sistema de cámaras al nivel de lı́nea de imagen
con el patrón se generaron imágenes sintéticas para las cuales se conoce la pose real del sistema de
cámaras.
El método se evaluó también con imágenes reales para las cuales no se conoce la pose real del
sistema de cámaras. Sin embargo, cada par de imágenes se capturó tal que la pose del sistema
de cámaras es constante para todas las lı́neas de imagen. La pose del sistema de cámaras solo es
diferente para diferentes pares de imágenes. Entonces, la evaluación se realizó de manera indirecta
tomando dos conjuntos diferentes de lı́neas de imágenes de un mismo par y comparando las dos
poses que se obtienen, las cuales deben ser iguales.
Se encontró que la exactitud de la pose estimada del sistema de cámaras depende en gran parte
de la calidad del detector de patrón, tal que es necesario realizar la detección de las lı́neas del patrón
a nivel de subpı́xel. Esto debido a que el cálculo con razones de cruce de los puntos observados
sobre el plano del patrón es muy sensible a los errores de detección, a tal grado que errores de 12 de
pixel pueden incrementar el error de la pose estimada hasta en un orden de magnitud.
En el caso de las imágenes reales, los errores de calibración de las cámaras y de la calibración
estéreo son otra fuente de error que se deben considerar. Los errores al detectar las lı́neas del patrón
son acentuados principalmente por los errores de las matrices de calibración y de los coeficientes de
distorsión de las cámaras.
Se realizó una primera implementación del método en una plataforma reconfigurable. La de-
tección del patrón en las lı́neas de imagen y la estimación de pose del sistema de cámaras se realizan
en una FPGA en tiempo real.
La detección del patrón se hace de dos en dos pixeles en un pipeline capaz de aceptar dos pixeles
cada ciclo de reloj de video. Naturalmente, existe un tiempo desde que se reciben los pixeles hasta
que se procesan completamente que forma parte de la latencia total del sistema.
Los resultados del detector de patrón se envı́an al módulo encargado de realizar la estimación
de pose con P3P. Para operar en tiempo real, el módulo P3P se elaboró tal que la cantidad de ciclos
de reloj de video que transcurren desde que se reciben los resultados del detector de patrón hasta
que se encuentra la pose del sistema de cámaras no excede de una lı́nea de imagen.

45
Conclusiones y trabajo futuro

La implementación elaborada tiene varias limitaciones importantes. La primera es que no se


elimina la distorsión de lente, lo que introduce error en la detección del patrón y afecta la esti-
mación de pose. Para el detector de patrón, la detección de las lı́neas del patrón solo se realiza
a nivel de pixel. Para obtener mejores resultados la detección debe realizarse a nivel de subpı́xel.
Para reconstruir el color de las imágenes, el módulo Sensor Demosaic utiliza la intensidad de los
pixeles vecinos. Esto incluye pixeles en lı́neas anteriores y siguientes lo cual introduce una latencia
equivalente a varias lı́neas de imagen. Además, debido que las lı́neas pueden haber sido capturadas
con diferentes poses del sistema de cámaras se introduce distorsión temporal.
Otra limitación es la falta de sincronización entre las cámaras. Aunque las cámaras se inician
a diferentes tiempos para que exista un desfase entre la captura de las lı́neas de imagen de ambas
cámaras y ası́ evitar que los puntos observados sobre el plano del patrón sean colineales, no es
posible garantizar que ambas lı́neas de imagen se hayan integrado al mismo tiempo. Por lo general,
las lı́neas de imagen de una de las cámaras se capturan antes que las lı́neas de imagen de la otra
cámara. Debido a esto se introduce más distorsión temporal, ya que puede existir una discrepancia
de pose entre ambas lı́neas de imagen.
Finalmente, la limitación más grave es que el método utilizado para convertir los puntos obser-
vados por la cámara 2 a la cámara 1 solo es correcto si la orientación entre el sistema de cámaras
y el patrón en la escena es R = I. Es decir, solo detecta la traslación del sistema de cámaras, pero
no su orientación.

5.2 Trabajo futuro

Como trabajo futuro, se propone eliminar el error introducido por el módulo Sensor Demosaic
utilizando cámaras monocromáticas. Esto incluye modificar el patrón para funcionar con este tipo
de cámaras.
Es necesario encontrar una manera de sincronizar las cámaras para conocer el desfase entre la
captura de sus lı́neas de imagen y asegurar que los puntos observados en las lı́neas de imagen sean
no colineales. También se debe garantizar que las lı́neas de imagen de ambas cámaras se capturen
al mismo tiempo.
Para estimar correctamente la pose del sistema de cámaras se ha de implementar NP3P y la
detección del patrón a nivel de subpı́xel. Debido a la complejidad de resolver el polinomio de octavo
grado, se considera elaborar una implementación hibrida con la FPGA y los procesadores de la
plataforma reconfigurable.
Se debe lidiar con la distorsión de lente. Para eliminar la distorsión se pueden utilizar lentes
de muy baja distorsión. Realizar la corrección en la FPGA no es recomendable debido que se
mezcları́an pixeles capturados con diferentes poses en una misma lı́nea de imagen. También existe
la posibilidad de adaptar el método en manera similar a [2] y aprovechar la distorsión de lente. Con
esto podrı́a reducirse el número de cámaras de dos a una sola.
El patrón diseñado tiene la limitación de que requiere ser proyectado sobre una superficie planar.
Entonces se propone diseñar otro patrón que permita la estimación de pose al nivel de lı́nea que no
tenga esta limitación.
Finalmente, se requiere implementar una forma de medir el tiempo entre mediciones sucesivas
de la pose del sistema de cámaras para poder determinar la rapidez con la que cambia la pose del
sistema de cámaras de una lı́nea de imagen a otra.

46
REFERENCIAS

[1] A. Bapat, E. Dunn, J. M. Frahm. Towards Kilo-Hertz 6-DoF Visual Tracking Using an Ego-
centric Cluster of Rolling Shutter Cameras. IEEE Transactions on Visualization and Computer
Graphics. Vol.22, No.11, pp.2358-2367, 2016.

[2] A. Bapat, T. Price, J.-M. Frahm. Rolling Shutter and Radial Distortion Are Features for High
Frame Rate Multi-Camera Tracking. CVPR. 2018.

[3] X.-S. Gao, X.-R. Hou, J. Tang, H.-F. Cheng. Complete solution classification for the
perspective-three-point problem. IEEE Transactions on Pattern Analysis and Machine Intelli-
gence. Vol.25, No.8, pp. 930-943, 2003.

[4] L. Kneip, D. Scaramuzza, R. Siegwart. A novel parametrization of the perspective-three-point


problem for a direct computation of absolute camera position and orientation. CVPR. 2011.

[5] T. Ke, S. I. Roumeliotis. An Efficient Algebraic Solution to the Perspective-Three-Point Prob-


lem. CoRR. [Link]/1701.08237, 2017.

[6] M. H. Merzban, M. Abdellatif, A. A. Abouelsoud. A simple solution for the non perspective
three point pose problem. 2014 International Conference on 3D Imaging (IC3D). Liege. 2014.

[7] A. Fabijańska. A survey of subpixel edge detection methods for images of heat-emitting metal
specimens. International Journal of Applied Mathematics and Computer Science. Vol.22, No.3,
pp.695-710, 2012.

[8] R. Hartley, A. Zisserman. Multiple View Geometry in computer vision. Cambridge University
Press. 2003.

[9] R. Szeliski. Computer Vision: Algorithms and Applications. Springer. 2010.

[10] G. Bradski, A. Kaehler. Learning OpenCV: Computer Vision with the OpenCV Library.
O’Reilly Media. 2008.

[11] D. A. Cox, J. Little, D. O’Shea. Using Algebraic Geometry. Springer-Verlag New York. 2005.

47
REFERENCIAS

[12] OpenCV. Camera Calibration and 3D Reconstruction. vista en: agosto 2018
[Link]
[Link].

[13] OpenCV. Camera calibration With OpenCV. vista en: agosto 2018
[Link]
[Link].

[14] K. Brown. Pascal’s Mystic Hexagram. vista en: agosto 2018


[Link]

[15] Xilinx. Zynq UltraScale+ MPSoC. vista en: agosto 2018


[Link]
html.

[16] Xilinx. Zynq UltraScale MPSoC Base TRD 2017.4. vista en: agosto 2018
[Link]

[17] OpenCV. [Link]. vista en: agosto 2018


[Link]

[18] L. Luo, E. Zou. IMX274 CMOS Image Sensor driver. vista en: agosto 2018
[Link]

48
A
Código fuente

El código fuente de todo el software elaborado para esta tesis no se incluye en el documento debido
a su extensión. En su lugar, se presentan vı́nculos al repositorio en lı́nea en donde se almacena.

Calibración de cámaras estéreo


[Link]

Patrón geométrico de referencia


[Link]

Simulación con imágenes sintéticas


[Link]

Generación de imágenes sintéticas


[Link]

Experimentos con imágenes reales


[Link]

Captura de imágenes estéreo


[Link]

Diseño de hardware para el PL


[Link]

Aplicación de software para el PS


[Link]

49
Para este trabajo se utilizó el templete realizado por el Dr. Miguel Aurelio Duarte Villaseñor. Derechos
Reservados. c ITT, compilado el 10 de Septiembre de 2018. El Juan Carlos Dibene Simental otorga al
Instituto Tecnológico Tijuana el permiso de reproducir y distribuir copias de esta Tesis en su totalidad o en
partes.

También podría gustarte