martes, 2 de julio de 2013

ArUco: una biblioteca mínimo para aplicaciones de realidad aumentada basada en OpenCv



NOTICIAS: Aruco versión 1.2.4 liberado!

Las principales características de ArUco son:
Detectar los marcadores con una sola línea de código C + +
Detección de placas de AR (marcadores compuestas por varios marcadores)
Sólo requiere OpenCv (> = 2.1)
Hasta 1024 marcas diferentes
Integración Trivial con OpenGL y OGRE
Rápido, seguro y multiplataforma, porque se basa en OpenCv
Los ejemplos que le ayudarán a conseguir el funcionamiento de su aplicación AR en menos de 5 minutos
Licencia de BSD
Videos en YouTube:

Video 1: Aruco y Ogre

Video 2: Detección único marcador

Video 3: Junta de detección de marcadores
Ejemplos de proyectos que utilizan Aruco:

SOLDAMATIC Project (Augmented Reality Soldador)

OpenSpace3D: http://www.openspace3d.com/

JavaScript: http://www.youtube.com/watch?v=_wzPupbww4I&feature=related

Contacto: rmsalinas en uco punto es
Descarga:

Descargar ArUco

Descargar ArUco de datos de prueba

Descargar ArUco + OGRE ejemplo
Ejemplo de código rápido

Eche un vistazo:


Calibración de la cámara
Conceptos

Calibración de la cámara es el proceso de obtaning los parámetros fundamentales de una cámara. Estos parámetros nos permite determinar que un punto 3D en los proyectos espaciales en el sensor de la cámara.Los parámetros de la cámara se pueden dividir en intrínsecos y extrínsecos .

Parámetros intrínsecos son
fx, fy: longitud focal de la lente de la cámara en los dos ejes. Estos se expresan normalmente en píxeles
CX, CY: centro óptico del sensor (expresada en píxeles)
k1, k2, p1, p2: Coeficientes de distorsion.

En una cámara ideal, un punto 3D (X, Y, Z) en el espacio que se proyectaría en el píxel:

x = (fx X / Z) + cx, y = (Y fy / Z) + cy.

Sin embargo, las lentes de la cámara normalmente distorsiona la escena haciendo que los puntos lejos del centro para ser aún más lejos. Por lo tanto, las rayas verticales cerca de los bordes de la imagen aparece ligeramente doblada. En consecuencia, si queremos saber la proyección de un pixel, entonces debemos tener en cuenta los componentes de distorsion. Simplemente decir que son dos tipos de distorsiones (radial y tangencial) y éstos están representados por la paremeters p1, p2, k1, k2.





Lo anterior supone que se conoce la ubicación 3D del punto con relación al sistema de referencia de la cámara.Si desea conocer la proyección de un punto que se refiere a un sistema de referencia arbitrario, entonces usted debe utilizar ª parámetros extrínsecos. Los parámetros extrínsecos son básicamente las rotaciones 3D (Rvec = {Rx, Ry, Rz}) y traducciones 3D (Tvec = {Tx, Ty, Tz}) que se requieren para convertir el sistema de referencia de la cámara a la arbitraria.
Calibración en OpenCv

La calibración es el proceso de obtención de los parámetros intrínsecos de la cámara y OpenCv le permite hacer fácilmente. Sólo es necesario para mostrar imágenes de un panel de tablero de ajedrez de dimensiones conocidas.




Usted debe tener por lo menos cinco imágenes diferentes. Un frontal de uno, y cuatro en la frontera de la pauta es cerca del borde de la imagen. Al colocar el patrón cerca del borde de la imagen que será posible estimar con precisión la distorsión de la cámara. Encontrará un pdf imprimible del tablero de ajedrez en OpenCv2.2 distribución "doc / pattern.pdf".

Una vez que había tomado las fotos con la cámara que desea utilizar, utilice la aplicación "samples / cpp / calibration.cpp" que figura en OpenCv> = 2.2 para calibrar la cámara. Tendrá que indicar el número de esquinas del patrón en ambos ejes, y el tamaño real de la plaza (usar el medidor).

En mi caso, me encontré con el programa con los parámetros

> Calibración w-8-6-h s 0.025-o camera.yml-op

Dado que la producción, el programa genera un archivo. Yml que se puede utilizar en ArUco. En el proceso de obtención de los intrínsecos, OpenCv también obtiene los extrínsecos de la cámara para cada una de las ubicaciones del patrón. Sin embargo, no vamos a utilizar aquí.
Cómo aumentar la realidad?

Aumento de la realidad es el proceso de añadir información virtual a las imágenes. Para ello, tenemos que saber dónde pintar la información virtual (normalmente utilizando OpenGL u otro motor 3D). Aquí es donde los marcadores le ayudará.

Un marcador de AR, como el usado en Aruco, es un elemento muy distintivo que puede ser detectado fácilmente. El marcador se utiliza para calcular los extrínsecos de la cámara en relación con el marcador de modo que usted será capaz de hacer en 3D sabiendo dónde está el (0,0,0) del sistema de referencia mundial.Dado que el marcador de AR es muy fácil de detectar, puede procesar las imágenes y no haciendo en tiempo real.


Proceso de detección en Aruco

El proceso de detección de marcadores de ArUco es como sigue:
Aplicar un Umbral Adaptativo para obtener fronteras (Figura 1)
Encontrar contornos. Después de eso, se detectan no sólo los marcadores reales, pero también un montón de fronteras no deseados. El resto del proceso tiene como objetivo para filtrar las fronteras no deseados.
Retire las fronteras con un pequeño número de puntos (Figura 2)
Aproximación poligonal de contorno y mantener los contornos cóncavos con exactily 4 esquinas (es decir, rectángulos) (Figura 3)
Ordenar esquinas en sentido contrario a las agujas del reloj.
Retire demasiado estrechos rectángulos. Esto es necesario debido a que el umbral adaptativo normalmente detecta el interior de una parte externa del borde del marcador. En esta etapa, mantenemos la frontera más externa. (Figura 4)
Identificación Marker
Retire la perspectiva de proyección con el fin de obtener una vista frontal de la zona de rectángulo con una homografía (Figura 5)
Umbral de la zona utilizando Otsu. Los algoritmos de Otsu asume una distribución bimodal y encuentra el umbral que maximiza la varianza extra-clase, manteniendo una baja variabilidad intra-clase.
La identificación del código interno. Si se trata de un marcador, a continuación, que tiene un código interno. El marcador se divide en una cuadrícula de 6x6, de los cuales las células 5x5 interna contiene información de identificación. El resto se corresponde con el borde negro externo.Aquí, lo primero que comprobamos que el borde negro externa está presente. Luego, leemos las células 5x5 internos y comprobar si proporcionan un código válido (que podría ser necesaria para girar el código para obtener la válida).
Para los marcadores válidos, refinar esquinas usando interpolación subpixel
Por último, si se proporcionan parámetros de la cámara, que se calcula los extrínsecos de los marcadores de la cámara.


Marcador de codificación

Cada marcador tiene un código interno dado por 5 palabras de 5 bits cada uno. La codificación empleada es una ligera modificación del Código de Hamming. En total, cada palabra tiene sólo 2 bits de información fuera de los 5 bits empleados. Los otros 3 se utilizan para la detección de errores. En consecuencia, podemos tener hasta 1.024 identificadores diferentes.

La principal diferencia con el Código de Hamming es que el primer bit (la paridad de los bits 3 y 5) se invierte.Así, el 0 id (que a su Hamming código 00000) se convierte en 10.000 en nuestra codificación. La idea es impedir que un rectángulo completamente negro de ser un marcador de Identificación válida con el objetivo de reducir la probabilidad de falsos positivos con los objetos del entorno.




Beneficios del uso de placas AR




Detección de un solo marcador puede fallar por diferentes razones, tales como condiciones pobres de rayos, movimiento de la cámara rápida, oclusiones, etc Para superar ese problema, ArUco permite el uso de tablas.Una junta de Realidad Aumentada es un marcador compuesto por varios marcadores dispuestos en una cuadrícula. Juntas presentan dos ventajas principales. En primer lugar, ya que tienen más de un marcadores, es menos probable que pierda a todos al mismo tiempo. En segundo lugar, se detectan los marcadores más, más puntos están disponibles para el cálculo de los extrínsecos cámara. Como consecuencia, el aumento de la precisión obtenida.

0 comentarios :

Publicar un comentario