PFC Calibrador 2008
PFC Calibrador 2008
PFC Calibrador 2008
Finalmente quiero dar las gracias a todos los amigos y compañeros. Me gus-
tarı́a hacer una lista con todos los nombres, pero me temo que seria larga y llena
de ausencias. Gracias a todos por el apoyo y los buenos ratos que hemos pasado
juntos.
Índice general
Resumen 1
1. Introducción 2
1.1. Visión por computador . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Visión 3D y calibración de cámaras . . . . . . . . . . . . . . . . . 6
1.3. Calibración Automática de Cámaras en la plataforma jdec. . . . . 10
2. Objetivos 11
2.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2. Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3. Metodologı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3. Plataforma de desarrollo 15
3.1. Arquitectura jdec para aplicaciones robóticas. . . . . . . . . . . . 15
3.2. GSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3. OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4. Glib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.5. Biblioteca gráfica Xforms . . . . . . . . . . . . . . . . . . . . . . . 19
3.6. Herramienta de calibración ARtoolKit . . . . . . . . . . . . . . . 20
4. Rectificador de imágenes 23
4.1. Diseño general e integración con jdec . . . . . . . . . . . . . . . . 24
4.2. Análisis con geometrı́a proyectiva . . . . . . . . . . . . . . . . . . 25
4.3. Cálculo de la matriz H . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4. Reconstrucción de la imagen rectificada . . . . . . . . . . . . . . . 30
4.5. Interfaz del usuario . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.6. Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
i
ÍNDICE GENERAL ii
5. Calibrador 34
5.1. Diseño general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2. Calibrador basado en DLT . . . . . . . . . . . . . . . . . . . . . . 35
5.2.1. El modelo Pinhole de cámara . . . . . . . . . . . . . . . . 35
5.2.2. Matriz genérica de proyección . . . . . . . . . . . . . . . . 40
5.2.3. Cálculo de la matriz genérica de proyección . . . . . . . . 41
5.2.4. Descomposición RQ . . . . . . . . . . . . . . . . . . . . . . 42
5.3. Detección automática del patrón . . . . . . . . . . . . . . . . . . . 45
5.3.1. Filtro de color . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.3.2. Agrupamiento . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.3.3. Ordenamiento de puntos . . . . . . . . . . . . . . . . . . . 48
5.4. Interfaz del usuario . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.4.1. Ventana OpenGL . . . . . . . . . . . . . . . . . . . . . . . 51
5.4.2. Integración con progeo . . . . . . . . . . . . . . . . . . . . 53
5.5. Modos de funcionamiento del calibrador . . . . . . . . . . . . . . 55
5.5.1. Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.5.2. Automático . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.5.3. Semiautomático . . . . . . . . . . . . . . . . . . . . . . . . 57
iii
ÍNDICE DE FIGURAS iv
1
Capı́tulo 1
Introducción
Nuestros ojos son mucho más desarrollados que cualquier cámara de hoy en
dı́a, y más allá, el procesamiento de señal que hace nuestro cerebro es mucho más
complicado que cualquier programa de procesamiento de imágenes. De hecho
todavı́a hay ciertas habilidades que no se comprenden completamente.
Más allá de querer imitar al ser humano, en vez de entender toda la infor-
mación contenida en una imagen, la visión por computador se centra en sacar
cierta información de interés para alguna tarea especifica. Por ejemplo si tenemos
la foto de un coche, el ser humano es capaz de percibir todo el entorno, ver de
qué marca se trata y sacar la máxima información posible, sin embargo para un
programa informático le basta con detectar la matrı́cula para identificar a este
coche.
2
CAPÍTULO 1. INTRODUCCIÓN 3
labor a la máquina. Un ejemplo de este tipo de sistemas son los OCR, sistemas
capaces de reconocer letras y sı́mbolos y de extraer el texto desde una imagen.
Sin embargo, el conjunto de objetos o sı́mbolos que podrán reconocer es acotado
y la capacidad de aprendizaje en general es mala. Una de las posibles aplicaciones
de esta técnica es el control del acceso a un Parking (ver figura 1.1)
Otra de las áreas beneficiadas con los avances en este campo es la medicina.
Hoy en dı́a las imágenes médicas son una herramienta básica para analizar y
detectar muchas enfermedades. Por ejemplo disponer de una imagen ilustrativa
del flujo sanguı́neo (ver figura 1.5) en el cerebro ayuda para estudiar, analizar y
detectar muchas enfermedades. En definitiva, disponer de una imagen en condi-
ciones ayuda muchı́simo en el proceso de análisis de enfermedades y la cura de
las mismas.
CAPÍTULO 1. INTRODUCCIÓN 6
de los requisitos impuestos es la alta precisión. En este caso hacen falta algorit-
mos complejos y elaborados que trabajen con las imágenes de más de una cámara.
portancia, se pueden construir aplicaciones muy robustas que hacen uso de esta
información. Los humanos nos movemos en un mundo tridimensional y razonamos
basándonos en la información percibida del mismo, esto hace que la información
tridimensional sea natural y rica para emular algún comportamiento humano en
las máquinas. Basándose en esta idea hay varios algoritmos de navegación visual
implementados en robots para moverse en un entorno semiestructurado ágilmen-
te [Peña, 2005], para ello hay que dotar al robot con un par de cámaras para
reconstruir la escena que está viendo en tres dimensiones y tomar decisiones de
navegación.
Para calibrar cámaras han surgido varias técnicas. Hay varios aspectos a tener
en cuenta a la hora de comprar los resultados obtenidos por una o otra técnica,
siendo la precisión de los resultados obtenidos la más importante. A continuación
algunas de las técnicas más utilizadas:
Hasta el momento para calibrar una cámara habı́a que recurrir a otras he-
rramientas externas de manejo difı́cil y tedioso que hacı́an de la calibración un
proceso aburrido, largo, y sin el resultado adecuado. Bajo estas circunstancias y
con la voluntad de obtener un calibrador propio en la plataforma jdec, surgió la
idea de este proyecto de fin de carrera.
2.1. Objetivos
11
CAPÍTULO 2. OBJETIVOS 12
2.2. Requisitos
La versión final del calibrador tiene que responder a los siguientes requisitos:
La implementación tanto del rectificador como del calibrador tiene que ser
en forma de un esquema de jdec. Los algoritmos fruto de este proyecto
tienen que respetar la misma polı́tica de patentes de jdec (GPL).
El tiempo requerido para calibrar la cámara tiene que ser menor que un
minuto.
2.3. Metodologı́a
En este proyecto se han realizado varias iteraciones, cada una añade nueva
funcionalidad al producto final:
CAPÍTULO 2. OBJETIVOS 14
15
CAPÍTULO 3. PLATAFORMA DE DESARROLLO 16
hasta imágenes.
Hay dos tipos de esquemas: los esquemas creados por usuarios, cuyo objetivo
es resolver ciertas situaciones con las que se encuentre el robot o facilitar a otros
esquemas datos derivados de otros más sencillos, y los esquemas básicos. Estos
últimos pueden ser tanto perceptivos como motores, ambos son generados por los
drivers. El objetivo de los esquemas básicos es poner a disposición de otros esque-
mas las variables que representan los sensores o actuadores. Los otros esquemas
leerán los datos de los sensores o escribirán las acciones a realizar en esas variables.
3.2. GSL
GSL2 (GNU Scientific Library) es una librerı́a de uso libre que ofrece un con-
junto muy amplio de operaciones matemáticas de todo tipo. La biblioteca ha sido
escrita de forma entera en el lenguaje C y ofrece un API muy fácil de usar faci-
litando al programador el uso de las distintas funcionalidades que ofrece. Entre
las distintas rutinas que esta biblioteca ofrece podemos encontrar: Álgebra lineal,
Números complejos, Polinomios, Vectores y Matrices, Permutaciones y más ope-
raciones.
GSL ha sido utilizada con frecuencia en este proyecto sobre todo para cálcu-
los matriciales que son muy frecuentes en la geometrı́a proyectiva. También se
han utilizado las funciones ofrecidas por la misma para la resolución de siste-
mas de ecuaciones compatibles determinados y sistemas de ecuaciones lineales
sobredimensionados.
2
http://www.gnu.org/software/gsl/
CAPÍTULO 3. PLATAFORMA DE DESARROLLO 17
3.3. OpenGL
Mapeado de texturas.
Alpha blending.
3
http://www.opengl.org/
CAPÍTULO 3. PLATAFORMA DE DESARROLLO 18
3.4. Glib
Glib4 es una librerı́a de bajo nivel que ofrece un conjunto muy amplio de TADs
y operaciones para usar los mismos. Tiene un conjunto de APIs muy coherente y
ofrece desde tipos básicos como gint hasta tipos complejos como listas, conjuntos,
tablas hash, strings y más tipos.
varias desde ganar tiempo hasta asegurarse que los tipos básicos en los que se
apoyan los componentes software son libres de BUGs y portables.
Además de todas estas ventajas se trata de una biblioteca muy bien docu-
mentada lo que facilita bastante la labor de programación y abre el abanico para
utilizar toda una variedad de TADs.
En este proyecto se ha utilizado la versión 2.0 de esta librerı́a, que está dis-
ponible en forma de un paquete Debian: libglib2.0-0 y libglib2.0-dev. El segundo
paquete es el de desarrollo necesario para enlazar con glib.
En este proyecto Xforms ha sido utilizada para crear la interfaz gráfica tanto
del esquema rectificador como del esquema calibrador. Cabe señalar que Xforms
ofrece un canvas especial para OpenGL gl canvas. Este último ha sido utilizado
para dibujar la escena del calibrador que consta del patrón 3D y una representa-
ción con puntos y lı́neas de la cámara.
CAPÍTULO 3. PLATAFORMA DE DESARROLLO 20
En este tipo de calibración el usuario tiene que hacer los siguiente pasos:
• Ejecutar calib dist: Para ello tiene que imprimir el patrón de la figura
3.4. A continuación tiene que capturar la imagen y marcar los puntos
de izquierda a derecha, de arriba para abajo, como se indica en la
figura 3.4.
• Ejecutar calib cparam: Para realizar este paso hace falta imprimir el
patrón de la figura 3.5 y fijarlo sobre un soporte sólido para que no se
mueva. Esta vez, lo que hay que marcar son las lı́neas. El orden es de
arriba para abajo y de izquierda a derecha. Esta operación se repite
CAPÍTULO 3. PLATAFORMA DE DESARROLLO 22
varias veces alejando cada vez el patrón con una distancia determinada
(configurable). Una vez llegamos al número de iteraciones requerido,
ARtoolkit procesa todos estos datos para dar los resultados definitivos
de calibración. El proceso de cálculo suele tardar unos minutos. Para
llevar a cabo los dos pasos anteriores, hace falta además de la cámara,
herramientas básicas de medición como una regla y un suporte sólido
para fijar el patrón impreso.
Los movimientos del patrón tienen que ser muy precisos ya que constituyen
una fuente de error adicional al proceso de calibración. Los dos pasos en
conjunto se pueden llevar acabo en un intervalo de quince minutos aproxi-
madamente.
5
http://www.hitl.washington.edu/artoolkit/documentation/usercalibration.htm#onestep
Capı́tulo 4
Rectificador de imágenes
23
CAPÍTULO 4. RECTIFICADOR DE IMÁGENES 24
la rectificación de imágenes.
Dado un punto P = (x, y, 1)T pertenece a la lı́nea l = (a, b, c)T si y solo si:
ax + by + c = 0 esta ecuación se puede escribir en forma de producto escalar
(x, y, 1)(a, b, c)T = (x, y, 1) · l = 0. Si multiplicamos por cualquier valor k distinto
de cero, la ecuación no cambia.
Según el modelo Pinhole la ecuación general del modelo de cámara que rela-
ciona un punto cualquiera del espacio Pw con un pı́xel Pim de la imagen:
CAPÍTULO 4. RECTIFICADOR DE IMÁGENES 28
Pim = M Pw (4.1)
Pw = H −1 Pim (4.3)
0
x1 h11 h12 h13 x1
x20 = h21 h22 h23 · x2 (4.4)
x30 h31 h32 h33 x3
h11
h12
h13
0
x y 1 0 0 0 −x0 x −x0 y
h21 = x0
0 0
(4.7)
0 0 0 x y 1 −y x −y y h22
y
h23
h31
h32
En este sistema de ecuaciones las incógnitas son las hij. Dada la corresponden-
cia entre dos puntos (x,y) y (x’,y’) que pertenecen a la imagen 2D de entrada y
de salida respectivamente somos capaces de obtener dos ecuaciones. Para resolver
las ocho incógnitas hacen falta cuatro puntos de correspondencia entre el plano
original πim y el plano rectificado πw . Para obtener ocho ecuaciones linealmente
independientes, los cuatro puntos tienen que ser coplanares pero no colineales. Es
aquı́ donde aprovechamos nuestro conocimiento previo para marcar cuatro puntos
de entrada que cumplen esta precondición y sus correspondientes en la salida. El
sistema de ecuaciones construido en este caso es compatible determinado y tiene
una solución única.
Todos los cálculos matriciales llevados a cabo se han basado en gsl. En con-
creto la resolución del sistema lineal compatible determinado A · x = B se ha
realizado con la función gsl linalg LU solve que se llama después de haber des-
compuesto la matriz A utilizando la técnica LU que se puede efectuar con la
función gsl linalg LU decomp.
CAPÍTULO 4. RECTIFICADOR DE IMÁGENES 30
OUTPUT: Como se puede ver en la interfaz, esta zona tiene los mismos
controles que la anterior, sin embargo las funciones son ligeramente distin-
tas.
• Rectify: Este botón sólo se activa una vez que se hayan introducido
los cuatro puntos de entrada y los cuatro de salida. Al pulsarlo, dibuja
la imagen rectificada en la zona OUTPUT.
4.6. Aplicaciones
Las aplicaciones del rectificador en la vida real son varias, como la recupera-
ción de vistas frontales de fotos antiguas de monumentos que igual ya no existen
(ver figura 4.9):
34
CAPÍTULO 5. CALIBRADOR 35
En las siguientes secciones se tratarán con más detalle cada una de los com-
ponentes que en conjunto construyen el esquema calibrador.
Dada una cámara cualquiera, ésta se caracteriza con dos tipos de parámetros:
x f X
= (5.1)
y Z Y
El siguiente paso es convertir el punto (x,y) en (u,v) que viene a ser los pı́xe-
les correspondientes en el sensor de la imagen. Para ello, tenemos que saber el
tamaño de los pı́xeles en horizontal y vertical. La conversión se hace utilizando
las siguientes ecuaciones:
u = S x · x + U0 (5.2)
v = Sy · y + V0 (5.3)
cam
X
u Y
λ v = K ·
Z (5.4)
1
1 w
X cam
u fx 0 U0 0
Y
λ v = 0 fy V0 0
Z (5.5)
1 0 0 1 0
1 w
X r11 r12 r13 tx X
Y r21 r22 r23 ty Y
Z =
r31 r32 r33 tz Z (5.7)
1 cam 0 0 0 1 1 w
r11 r12 r13 tx X
u fx 0 U0 0
v = 0 fx V0 0 r21 r22 r23 ty Y
r31 r32 r33 tz Z (5.9)
1 im 0 0 1 0
0 0 0 1 1 w
Si reescribimos la ecuación 5.9 para dejar sólo una matriz como incógnita: La
matriz genérica de proyección, ésta tendrı́a el siguiente aspecto:
X
u h11 h12 h13 h14
v = h21 h22 h23 h24 Y (5.10)
Z
1 h31 h32 h33 h34
1 w
Con seis puntos podemos formular doce ecuaciones para resolver once incógni-
tas. Se trata de un sistema de ecuaciones lineal sobredimensionado ya que dis-
ponemos de un número mayor de ecuaciones que de incógnitas por resolver. La
solución en este caso no serı́a exacta ya que cada subconjunto de once ecuaciones
posibles darı́a una solución distinta pero parecida a la que darı́a otro subconjunto.
Nuestro objetivo es hallar la solución que menos error comete a la hora de pasar
de 3D a 2D. Esta tarea se conoce como optimización de un sistema sobredimen-
sionado.
5.2.4. Descomposición RQ
El siguiente paso es descomponer la matriz genérica de proyección, a partir
de ahora M, en KR[I| − C] donde K es la matriz de intrı́nsecos, R es la matriz
de rotación y T la de traslación.
CAPÍTULO 5. CALIBRADOR 43
N −1 = QS
(N −1 )−1 = (QS)−1
N = S −1 Q−1
N = KR
Donde1 K = S −1 y R = Q−1
C = N −1 · p4 (5.15)
M = KRT (5.16)
Una vez calibrada la cámara podemos ver los resultados de la calibración sobre
la interfaz de usuario de nuestro componente. Éstos se presentan de la siguiente
manera:
Para facilitar la autodetección, los puntos del patrón han sido coloreados de
tal manera que se puede distinguir entre tres clases:
CAPÍTULO 5. CALIBRADOR 46
5.3.2. Agrupamiento
Esta etapa recibe como entrada el conjunto de puntos filtrados por el paso
anterior e intenta agruparlos en subconjuntos de una ventana de diez pı́xeles. El
algoritmo de agrupamiento y clasificación consta de los siguientes pasos:
Crear clases de puntos 2D que tienen el mismo color y que están separados
por una distancia menor que diez pı́xeles.
Fusionar los grupos cuyos centros están a una distancia menor que el tamaño
de ventana multiplicado por raı́z de dos (diagonal de la ventana).
Para el color amarillo que representa el centro nos quedamos con la clase
con mayor número de elementos.
CAPÍTULO 5. CALIBRADOR 48
Obtenemos los centros de todas las clases. Estos serán los puntos 2D detec-
tados.
Formar cinco vectores Vi con el centro y los puntos más cercanos a éste
(mientras no haya puntos más cerca en la misma dirección).
producto_scalar(V_{i},get_vector(centro,Punto_{j})) > 0
&&
angulo_formado(V_{i},get_vector(centro,Punto_{j})) <= umbral
Ordenar los puntos que pertenecen al mismo vector (lı́nea) según su distan-
cia con el centro.
Ordenar los vectores (lı́neas) según el ángulo que forman con el eje cen-
tral. Para ello hemos utilizado la función atan2 que nos permite saber el
cuadrante al cual pertenece un ángulo.
CAPÍTULO 5. CALIBRADOR 49
ventana ogl: Venta OpenGL donde se dibuja la escena una vez calibrada
la cámara
Botones:
Hide Test Points: Una vez calibrada la cámara se puede utilizar este botón
para proyectar un conjunto de puntos de test utilizando los resultados de
calibración obtenidos
Para visualizar la escena formada por la cámara y el patrón usamos una cáma-
ra virtual de OpenGL controlada por el usuario. Una vez calibrada la cámara en
la ventana OpenGL aparecerá una representación de toda la escena en la que
se dibuja la cámara (con una representación de puntos y lı́neas) y su posición,
orientación respecto al patrón de calibración. Esto permite al usuario comprobar
de manera sencilla si las matrices de los extrı́nsecos han sido bien calculadas.
Además, activando el modo progeo puede comprobar la corrección y precisión de
los parámetros intrı́nsecos obtenidos.
OpengGL utiliza los Ángulos de Euler para representar las rotaciones, sin em-
bargo el calibrador devuelve una matriz genérica de rotación que tiene el siguiente
formato:
CAPÍTULO 5. CALIBRADOR 53
r11 r12 r13
r21 r22 r23 (5.17)
r31 r32 r33
Para convertir esta matriz en Ángulos de Euler nos apoyamos en las siguientes
ecuaciones. Supongamos que θ,λ,φ son los ángulos de Euler que queremos calcular:
θ = acos(r33) (5.18)
r32
λ = acos( ) (5.19)
−sin(θ)
r13
φ = asin( ) (5.20)
sin(θ)
Donde θ,λ,φ representan las rotaciones sobre los ejes Z,X,Z respectivamente.
calibración (las matrices) ofrecidos por nuestro calibrador y esta biblioteca sea
inmediata.
Este modo también, es muy útil para comprobar que la calibración obtenida
es precisa. En la figura 5.18 podemos ver una ilustración de este modo. El rayo
azul que se puede ver en la imagen representa el rayo óptico que sale del foco de
la cámara (punto rojo).
Uno de los objetivos principales de este proyecto es hacer que el uso del cali-
brador sea lo más cómodo posible. Para ello se ha dotado al mismo con tres mo-
dos de funcionamiento distintos: Manual, Semiautomático, Automático, siendo el
primero el que más intervención de usuario requiere. En las siguientes secciones
veremos con más detalle el funcionamiento del calibrador en cada uno de ellos.
5.5.1. Manual
En este modo, después de capturar la imagen del patrón el usuario tiene que
pinchar en todos los puntos siguiendo el orden descrito en la figura 5.19.
5.5.2. Automático
Para trabajar en este modo, el usuario tiene que activarlo pulsando el botón
Auto mode y dirigir la cámara hacia el patrón. El sistema de detección automática
se encarga de detectar y de ordenar automáticamente los puntos. Si lo consigue,
se congela la imagen y se dibujan los puntos que han sido detectados (ver figura
5.20). En este momento, el botón de calibración se enciende dando al usuario la
posibilidad de calibrar la cámara.
5.5.3. Semiautomático
Este modo ha sido diseñado para situaciones en las que la iluminación es muy
mala y el sistema automático no consigue reconocer todos los puntos. Hay dos
maneras para activarlo.
6.1. Conclusiones
58
CAPÍTULO 6. CONCLUSIONES Y TRABAJOS FUTUROS 59
En cuanto a los requisitos descritos en la sección 2.2, éstos se han cumplido con
las implementación del calibrador descrito en el capı́tulo 5 y la implementación
del rectificador descrita en el capı́tulo 4. A continuación haremos un breve repaso
por los requisitos explicando como se han cumplido:
Los intrı́nsecos varı́an ligeramente de una ejecución a otra. Esto se debe a las
distintas fuentes de error durante el proceso de calibración, empezando por el
CAPÍTULO 6. CONCLUSIONES Y TRABAJOS FUTUROS 60
[Opengl et al., 2005] Opengl, Dave Shreiner, Mason Woo, Jackie Neider, y Tom
Davis. OpenGL(R) Programming Guide : The Official Guide to Learning
OpenGL(R), Version 2 (5th Edition). Addison-Wesley Professional, August
2005.
[Peña, 2005] Pedro Dı́az Peña. Navegación visual del robot pioneer. 2005.
[Plaza, 2003] José Marı́a Cañas Plaza. Jerarquı́a dinámica de esquemas para
la generación de comportamiento autónomo. Tesis doctoral, Universidad Po-
litécnica de Madrid, 2003.
62
BIBLIOGRAFÍA 63
[Plaza, 2004] José Marı́a Cañas Plaza. Manual de programación de robots con
jde. URJC, pages 1–36, 2004.
[Tsai, 1986] R.Y. Tsai. An efficient and accurate camera calibration technique
for 3d machine vision. proceedings of ieee conference on computer vision and
pattern recognition, miami beach, fl, pp. 364-374, 1986. 1986.