Mostrando entradas con la etiqueta cámara. Mostrar todas las entradas
Mostrando entradas con la etiqueta cámara. Mostrar todas las entradas

lunes, 12 de mayo de 2014

Perspectiva: proyectando objetos en Realidad Aumentada

La Perspectiva es un modelo de proyección que consigue efecto distancia al quedar representados los objetos más alejados con un menor tamaño. En esta entrada, trataré de explicar cómo se realiza la transformación de proyección en perspectiva en el ámbito de la Realidad Aumentada para obtener escenas más realistas, simulando la manera en que el ojo humano y las cámaras físicas forman imágenes. 



El modelo de proyección en perspectiva consiste en la proyección de los vértices de los objetos de la escena mediante trayectorias convergentes en un punto central del plano de proyección. Se consigue así un efecto distancia ya que los objetos situados más distantes del plano de visualización aparezcan más pequeños en la imagen. Las escenas generadas utilizando este modelo de proyección son más realistas, ya que ésta es la manera en que el ojo humano y las cámaras físicas forman imágenes.

perspectiva simple
matriz perspectiva
Perspectiva simple y matriz de proyección

Siguiendo la idea de la cámara estenopeica, desplazamos el plano de visualización una distancia d por detrás del origen (en dirección -Z). De esta forma, según la proyección simple, cada punto p se proyecta en el plano de visualización situado en z = -d obteniendo el punto p'=(px',py',-d). Aplicando semejanza de triángulos y un parámetro de homogeneización h = -pz/d, obtenemos la matriz de proyección Mp, que nos aplasta los vértices de los objetos 3D sobre el plano de visualización 2D.

Esta proceso no puede deshacerse; no tiene inverso. Por este motivo es interesante proyectar en lugar de sobre un plano, sobre una pirámide truncada (lo mas estrecha posible) que, una vez normalizada, se convertirá en un cubo unitario  (en lugar de un cuadrado de lado 1), que si podrá deshacerse. Así, definimos la pirámide de visualización (frustrum) cuyas bases son paralelas al plano de proyección (que queda definido por los lados top, bottom, left, right y las distancias near y far). La matriz de perspectiva que transforma la pirámide en el cubo unitario será:

frustrum
Frustrum
matriz perspectiva frustrum
Matriz de perspectiva para el frustrum

Para evitar errores de precisión en el Z-Buffer con distancias grandes, conviene que los planos de la pirámide truncada estén cerca (la distancia far-near sea muy pequeño).

Obtenemos así el volumen de visualización normalizado a un cubo unitario y las coordenadas normalizadas. Hemos pasado los objetos de 3D a 2D y las coordenadas Z de los puntos son almacenadas en un Buffer de profundidad (Z-Buffer).

jueves, 8 de mayo de 2014

Calibrando mi cámara

La calibración de una cámara representa un paso importante para procesos de reconstrucción 3D o sensorización mediante una cámara. Con la calibración de la cámara se consiguen estimar los parámetros intrínsecos y extrínsecos de la misma los cuales son necesarios para realizar la reconstrucción 3D del entorno y situar la cámara en el mismo. Por este motivo, una de las primeras cosas que tenemos que hacer es calibrar nuestra cámara.


Existen muchos métodos de calibración de una cámara. Normalmente, el proceso se puede realizar en dos pasos. Primero se estima la matriz de proyección y después se estiman los parámetros intrínsecos y extrínsecos de la cámara a partir de ella. Durante el proceso,  la gran mayoría de métodos utilizan plantillas de líneas o puntos.

Calibración en ARToolKit

ARToolKit propone dos programas de calibración con los que poder establecer los parámetros intrínsecos de la cámara (punto central de la imagen, distorsión de la lente, longitud focal, relación de aspecto y de inclinación), que tendrán que almacenarse en el fichero camara_para.dat y que se entran como datos a nuestros programas ARTollKit. Estos ficheros son:

  • Calib_dist utiliza la plantilla calib_dist.pdf para medir el punto central de la cámara y el factor de distorsión de la lente. En diferentes posiciones y orientaciones de la plantilla, el programa hará una captura de pantalla y en ella marcaremos con el ratón todos los puntos siguiendo un orden (izda -> dcha y arriba->abajo). A continuación la aplicación nos muestra el resultado del cálculo de estos parámetros, para que realicemos una comprobación visual. Cada vez que pulsemos con el botón izquierdo del ratón se mostrará una imagen con líneas de color rojo que deben pasar por el centro de cada círculo de calibración. Finalmente, se generará el fichero con los datos.


  • salida de calib_dist
    Salida de Calib_dist

  • Calib_param utiliza la plantilla calib_cpara para medir la longitud focal de la cámara y otros parámetros. Realiza un proceso similar al anterior pero moviendo líneas horizontales y despues verticales hasta hacerlas coincidir con las de la plantilla. El orden (izda -> dcha y arriba->abajo) es igualmente importante.

salida calib_param
Salida de Calib_param

plantillas calibracion ARToolKit
Plantillas de calibración calib_dist y calib_param

Los procesos de calibración están perfectamente definidos en el apartado de documentación de la web de ARToolKit. Os dejo también un acceso a las plantillas de calibración.