Sensor de Rango con Cámaras en Modo RS
Sensor de Rango con Cámaras en Modo RS
Director de tesis:
Dra. Yazmin Maldonado Robles
Co-Director de tesis:
Dr. Leonardo Trujillo Reyes
Dr. Enrique Dunn Rivera
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.
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
v
4 Resultados 41
4.1 Simulación con imágenes sintéticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2 Experimentos con imágenes reales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
A Código fuente 49
vi
LISTA DE FIGURAS
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
viii
LISTA DE TABLAS
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
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
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.
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.
4
2.1 Estimación de pose a alta frecuencia con obturador rodante
donde:
• 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:
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
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
7
Método propuesto
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:
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 .
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.
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
à = 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 |
à = l × lA
B̃ = l × lB
C̃ = l × lC
D̃ = l × lD
Ẽ = l × lE
Ã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
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
2 2 2 2
RA tA + 600RA tA + 90000RA − 160000 = 0
2 2 2 2
RE tE + 900RE tE + 202500RE − 490000 = 0
−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.
14
2.2 Patrón geométrico de referencia
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
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
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
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
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.
18
2.3 Estimación de pose del sistema de dos cámaras
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
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
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
1 0 0 e2 e1 e0
El resultante se iguala con cero para obtener la Ecuación 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
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)
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 ]
X = RY
Entonces:
R = XY −1
23
Método propuesto
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:
µinicio + µf in
µcentro =
2
donde:
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
-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
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.
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.
29
30
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.
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
P3 = P30 − T2
P4 = P40 − T2
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.
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
35
Implementación en plataforma reconfigurable
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
36
3.2 Aplicación de software para el PS
37
Implementación en plataforma reconfigurable
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
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.
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
Figura 4.2: Detección de las lı́neas del patrón en las imágenes de ejemplo.
Tabla 4.1: Estimación de pose del sistema de cámaras para las imágenes de ejemplo.
Tabla 4.2: Resultados de la estimación de pose para los 40 pares de imágenes generadas.
42
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
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
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.
[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.
[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].
[16] Xilinx. Zynq UltraScale MPSoC Base TRD 2017.4. 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.
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.