Mostrando entradas con la etiqueta transformación. Mostrar todas las entradas
Mostrando entradas con la etiqueta transformación. Mostrar todas las entradas

lunes, 12 de mayo de 2014

Visualización 3D para Realidad Aumentada

En esta entrada, trataré de explicar conceptos básicos sobre visualización 3D que son necesarios para trabajar en el ámbito de la Realidad Aumentada. Hablaré de sistemas de coordenadas, parámetros de visualización y transformaciones


Inicialmente, necesitamos definir un sistema de coordenadas de visualización para los parámetros de visualización de la cámara (en negro en el detalle, es la matriz P; que si además tenemos en cuenta la distorsión también se incluye el rojo) que nos permita definir el plano de proyección o visualización (en verde en el detalle; es lo que ve la cámara), donde podamos proyectar cada objeto 3D traído desde sus coordenadas locales (en el detalle en azul) hasta las coordenadas de visualización.

relacion entre sist coord
Relación entre los diferentes sistemas de coordenadas definidos

Se suceden diferentes transformaciones de coordenadas para llevar cada objeto 3D desde la escena (coordenadas locales) hasta el sistema de coordenadas de visualización (coordenadas de la cámara) y de ahí proyectarlos en el plano de visualización (coordenadas de pantalla). Esta última transformación dependerá del modelo de proyección elegida que en computer vision pueden ser diversos; aunque los más utilizados son el de proyección paralela y el de proyección en perspectiva. Dedicaré otra entrada a explicarlos.

transformaciones RA
Transformaciones RA
El proceso de visualización 3D, en concreto, comienza por posicionar y orientar los objetos de la escena respecto del SRU, obteniendo las coordenadas universales del objeto (transformación de modelado). A continuación se hace lo mismo con la cámara, obteniendo las coordenadas de visualización (transformación de visualización) y el volumen de visualización.
En este momento cámara y objetos están posicionados a partir del origen del RSU y mirando en dirección negativa del eje Z. ARToolKit hace estos dos procesos en uno solo, al cargar la matriz T en el modelview de OpenGL.

A continuación, mediante la transformación de proyección (en perspectiva en nuestro caso) se transforma el volumen de visualización en un cubo unitario obteniendo 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). Los objetos que quedan fuera del volumen son eliminados o recortados para obtener las coordenadas recortadas (transformación de recorte).

Finalmente, se ajustan las coordenadas x e y del cubo a las coordenadas de la pantalla, pudiendo adaptarse a diferentes tamaños y resoluciones (transformación de pantalla). En una etapa final de rasterización, se toman las coordenadas de la pantalla y el Z-Buffer y se definen los colores de los pixels.

transformación de visualización
Transformación de visualización. Las zonas con sombra corresponden al volumen de visualización



viernes, 9 de mayo de 2014

Un poco de geometría: transformaciones geométricas en Realidad Aumentada

Algunos conceptos de geometría teórica básica son necesarios para trabajar con los objetos 3D de la escena en el ámbito de la Realidad Aumentada. En concreto, las transformaciones geométricas de posición, rotación y tamaño; así como su representación matricial. 


En general podemos decir que una transformación toma como entrada elementos como vértices y vectores y los convierte de alguna manera. En este post, veremos las transformaciones más básicas necesarias para el desarrollo de aplicaciones de Realidad Aumentada. En primer lugar, veremos las operaciones en 2D y su notación matricial 2D, después haremos una generalización tridimensional empleando coordenadas homogéneas.

Traslación
traslaciónSe realiza la traslación de un punto p = (px,py) mediante la suma de un vector de desplazamiento t = (tx,ty)a las coordenadas iniciales del punto, para obtener una nueva posición de coordenadas. Si aplicamos esta traslación a todos los puntos del objeto, estaríamos desplazando ese objeto de una posición a otra. 

p′x = px + tx
p′y = py + ty 





Rotación
rotacionPodemos expresar la rotación de un punto p = (px,py) a una nueva posición rotando un ángulo θ respecto del origen de coordenadas, especificando el eje de rotación y un ángulo θ. Las coordenadas iniciales del punto se pueden expresar como:

px = dcosα
py = dsenα

Siendo d la distancia entre el punto y el origen del sistema de coordenadas. Así, usando identidades trigonométricas se pueden expresar las coordenadas transformadas como la suma de los ángulos del punto original α y el que queremos rotar θ como:

p′x = dcos(α+θ) = dcosαcosθ − dsenαsenθ
p′y = dsen(α+θ) = dcosαsenθ + dsenαcosθ

Que sustituyendo en la ecuación anterior, obtenemos:

p′x = px cosθ − py senθ
p′y = px sinθ + py cosθ


Cambio de escala
cambio escalaUn cambio de escala de un objeto bidimensional puede llevarse a cabo multiplicando las componentes x,y del objeto por el factor de escala Sx,Sy en cada eje. Se puede expresar como:

p′x = pxSx
p′y = pySy



Representación matricial
Las operaciones anteriores se expresan en 2D de forma matricial como:

matriz traslacion
Matriz de traslación 2D
matrices rotacion y escalado
Matrices de rotación 2D y escalado 2D







Mientras que en 3D añadimos el elemento homogéneo;  las formas matriciales serán:

matrices de rotacion 3D
matrices traslacion 3D escalado 3D
Matrices de rotación, traslación y escalado 3D

Composición de matrices
Una de las principales ventajas derivadas del trabajo con sistemas homogéneos es la composición de matrices. Matemáticamente esta composición se realiza multiplicando las matrices en un orden determinado, (empezando por la última transformación y acabando por la primera), de forma que es posible obtener la denominada matriz de transformación neta MN resultante de realizar sucesivas transformaciones a los puntos. De este modo, bastará con multiplicar la MN a cada punto del modelo para obtener directamente su posición final. Por ejemplo, si P es el punto original y P′ es el punto transformado, y T1 ··· Tn son transformaciones (rotaciones, escalados, traslaciones) que se aplican al punto P, podemos expresar la transformación neta como:

P′ = Tn × ··· × T2 × T1 × P
P′ = MN ×P

Dejadme para finalizar os recomiende una buena web donde todo esto está muy bien explicado y con más detalle: Wolfram.MathWorld

jueves, 8 de mayo de 2014

ARToolKit: funcionamiento básico

Para los que hayáis leído mi entrada "Mi primera aplicación de Realidad Aumentada" en la que explico a través de un sencillo programa la estructura y funcionamiento básico de una aplicación de Realidad Aumentada, en este post desarrollaré algo más el funcionamiento básico de ARToolKit.


Lo esencial en todas las aplicaciones de Realidad Aumentada, es la  necesidad de calcular correctamente el punto de vista de la cámara, para así poder realizar las operaciones necesarias sobre los objetos virtuales, para que estos se integren correctamente en el mundo real. Es decir, si queremos mostrar objetos virtuales, de modo que el usuario realmente crea que existen en el mundo real, tendremos que realizar transformaciones sobre dichos objetos de modo que el usuario los vea (a través de la cámara o dispositivo de captura utilizado) en la posición  con el tamaño, orientación e iluminación, en que esos objetos serían percibidos por el usuario en el mundo real en caso de que realmente estuvieran allí.

marcador meditel
Marcador meditel
Para ello, herramientas como ARToolKit utilizan unas plantillas (marcadores) de forma cuadrada normalmente, formadas por un cuadrado negro con un cuadrado blanco unas cuatro veces más pequeño en su centro, y un dibujo (patrón) en el interior del cuadrado blanco. Este dibujo debe ser sencillo y evitar las simetrías. Nuestro programa será capaz de detectar una de estas plantillas en las imágenes de vídeo capturadas utilizando mediante un potente algoritmo de detección de contornos implementado en las funciones y utilidades proporcionadas por ARToolKit.

Una vez detectado el marcador en una imagen, a partir de su orientación, posición y tamaño, la aplicación es capaz de calcular la posición y orientación relativa de la cámara real respecto al marcador y dibujar el objeto 3D sobre la imagen capturada de modo que aparezca sobre el marcador en la posición, orientación y tamaño correspondiente al punto de vista de la cámara (perfectamente alineado). Esto siempre que el programador de la aplicación así lo haya decidido, pues las posibilidades son muchas y pudiera ser que una vez obtenida esta información el programador decidiese utilizarla de otra forma, hacer otras operaciones distintas, etc. Para el renderizado del objeto se utilizan librerías externas a ARToolKit (por ejemplo GLUT y OpenGL).

El proceso básico de una aplicación ARToolkit es el siguiente:

proceso detección marcas
Proceso de detección
de  marcas en ARToolKit
  1. Primero se captura un fotograma del mundo real mediante la cámara.
  2. A continuación se detectan marcas. Para ello, la imagen se convierte a escala de grises y se binariza (según parámetro umbral threshold que indica a partir de que gris todo pixel será negro, dejando blancos el resto: compromiso entre rapidez y precisión en detección). después, se detectan todas las posibles marcas y se les asigna mediante un parámetro un valor de fidelidad para decidir cual de las marcas posibles es la real. 
  3. Se normaliza la marca, se detectan los contornos de la región que la contiene (vértices y lados del cuadrado) y después se extrae el contenido de la marca comparándola con patrones de las plantillas de las que se tiene información almacenada.
  4. Si la forma del patrón del marcador detectado coincide con el de la plantilla almacenada, se utiliza la información y el tamaño de marcador y plantilla almacenada para calcular la posición y orientación de la cámara respecto al marcador detectado, y se guarda en una matriz llamada Matriz de Transformación. (en el post AR Conceptos II se explica con detalle cómo es esta matriz). Conociendo las posiciones 2D de las aristas y vértices que definen el marcador 2D y el modelo de proyección de la cámara (matriz de parámetros intrínsecos P) es posible estimar la posición y rotación 3D de la cámara respecto a la marca y, por tanto la matriz de transformación T (matriz de parámetros extrínsecos). Esto se hace mediante un proceso de cálculo iteractivo.
  5. La matriz de Transformación se utilizará para establecer la posición y orientación de la cámara virtual (transformación de la vista), lo que equivale a una transformación de las coordenadas de la marca a las coordenadas de la cámara y por tanto se transforman las coordenadas del objeto a dibujar. Se usa la matriz T (para hacer transformaciones geométricas) e implícitamente la P (para hacer transformaciones de proyección y visualización de la cámara).
  6. Al haber puesto la cámara virtual en la misma posición y orientación que la cámara real, el objeto virtual se renderiza sobre el marcador y se muestra la imagen resultante, que contiene la imagen del mundo real y el objeto virtual superpuesto, alineado sobre el marcador. Se dibujan, por tanto, los objetos 3D alineados con la escena. 
  7. Se realiza el mismo proceso con los siguientes fotogramas.

coordenadas ARToolKit
Sistema de coordenadas de ARToolKit

El siguiente diagrama muestra el funcionamiento que se acaba de describir:
.
proceso AR
Esquema funcional de ARToolKit



martes, 6 de mayo de 2014

AR Conceptos II

Esta es la segunda entrada de la serie de AR Conceptos, como en las anteriores, realizaré un listado y una breve explicación de los más importantes sin dejar, por ello, de dedicar diferentes entradas a otros tantos conceptos que requieran una explicación mayor.



calibración
Plantilla de calibración
Calibración de la 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

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.

Parámetros intrínsecos de la cámara
Los parámetros intrínsecos son aquellos que definen la geometría interna y la óptica de la cámara. Son constantes en tanto no varíen las características y posiciones relativas entre la óptica y el sensor imagen. Los parámetros intrínsecos de la cámara son: punto central de la imagen, distorsión de la lente, longitud focal, relación de aspecto y de inclinación.

  1. Distancia focal: es la distancia existente entre el plano de la imagen de la cámara y su foco (punto donde convergen los rayos de luz originados desde un punto en el objeto observado). Puesto que la lente de la cámara es convergente, la distancia focal es positiva.
  2. Punto central: es el punto central del plano de la imagen.
  3. Punto principal: es la intersección entre el plano de la imagen y el eje óptico (recta perpendicular al plano de la imagen y que pasa por el foco). Suele estar cerca del centro de la imagen
  4. Distorsión de la lente: La óptica de la cámara introduce aberraciones que distorsionan la imagen, como por ejemplo, aberraciones cromáticas, aberraciones que afectan a la nitidez, distorsión tangencial, distorsión radial, entre otras. Esta última es la más típica y existen dos tipos: con distorsión positiva (tipo cojín) o con distorsión negativa (tipo barril).
  5. Relación de aspecto: es la proporción que guarda una imagen entre su ancho y su altura. Se obtiene al dividir el ancho entre la altura.
  6. Factor de conversión pixel-milímetros: Las coordenadas 2D obtenidas están expresadas en forma de píxeles, así que el número de píxeles por milímetro se usa para transformarlas a medidas del Sistema Internacional de Unidades (SI).
  7. Relación de inclinación u Oblicuidad: es el ángulo que existe entre los ejes en las direcciones x y y. Normalmente 90º

Matriz de calibración de la cámara K

matriz k
matriz K
Integra los principales parámetros intrínsecos de la cámara, longitud focal, punto principal y oblicuidad, suponiendo ésta ubicada en el origen del sistema de coordenadas Euclidianas con el eje principal orientado en línea recta hacia el eje Z. En la matriz K se supone que las coordenadas de la imagen están en coordenadas no homogéneas y tienen una escala igual para ambos ejes de direcciones x y y . Si las coordenadas de la imagen son medidas en pixels, esto tendrá el efecto de introducir factores de escala diferentes en cada dirección. Así, αx =fmx y αy =fmy representan la longitud focal en pixels (f es el factor de escala introducido para pasar a pixels). Los parámetros x0 =mxpx y y0 =mypy son las coordenadas del punto principal en pixels. Finalmente, s es el parámetro de oblicuidad; normalmente vale 0.

Matriz de perspectiva de la cámara P

matriz P
matriz P
Es la matriz de calibración K a la que se le añade un vector de valores nulos. Permite pasar de  puntos 3D a pixels (2D). 








Parámetros extrínsecos de la cámara
matriz T
matriz T
Los parámetros extrínsecos relacionan los sistemas de referencia del mundo real y la cámara describiendo la posición y orientación de la cámara en el sistema de coordenadas del mundo real. Hacen referencia a las transformaciones geométricas de rotación y traslación de la cámara y se reflejan en la matriz de transformación T=(R|t).

La relación entre las coordenadas de la cámara y las coordenadas del mundo vendrá dada por la matriz de proyección o compuesta C, que es una 4x4 producto de PT.


matriz C
matriz C


Inclinación de la cámara 
Se considera inclinación de una cámara al ángulo que ésta forma con el eje Z del mundo real.

Transformaciones geométricas
Son las transformaciones básicas de los objetos que componen la escena, normalmente consistentes en cambios de posición, orientación y tamaño. En general podemos decir que una transformación toma como entrada elementos como vértices y vectores y los convierte de alguna manera. Las principales son la traslación, la rotación y el cambio de escala. En una próxima entrada explicaré en que consisten.


Coordenadas homogéneas
En geometría proyectiva, las coordenadas homogéneas son un instrumento usado para describir un punto en el espacio proyectivo. En ellas, todo punto bidimensional está definido por tres coordenadas. De tal modo que añadimos un término extra (parámetro homogéneo h) a la representación del punto en el espacio (x,y), para obtener la representación homogénea de la posición descrita como (xh , yh , h). Este parámetro homogéneo h es un valor distinto de cero tal que x = xh/h, y = yh/h. Existen, por tanto infinitas representaciones homogéneas equivalentes de cada par de coordenadas, aunque se utiliza normalmente h = 1.