SDK de realidad aumentada con OpenCV [cerrado]

94

Estoy desarrollando un SDK de realidad aumentada en OpenCV. Tuve algunos problemas para encontrar tutoriales sobre el tema, qué pasos seguir, posibles algoritmos, codificación rápida y eficiente para el rendimiento en tiempo real, etc.

Hasta ahora he recopilado la siguiente información y enlaces útiles.

Instalación de OpenCV

Descargue la última versión de lanzamiento .

Puede encontrar guías de instalación aquí (plataformas: linux, mac, windows, java, android, iOS).

Documentación en línea .

Realidad aumentada

Para los principiantes, aquí hay un código simple de realidad aumentada en OpenCV. Es un buen comienzo.

Para cualquiera que busque un SDK de vanguardia bien diseñado, encontré algunos pasos generales que toda realidad aumentada basada en el seguimiento de marcadores debería tener, considerando las funciones de OpenCV.

  1. Programa principal: crea todas las clases, inicialización, captura de cuadros de video.

  2. Clase AR_Engine: controla las partes de una aplicación de realidad aumentada. Debe haber 2 estados principales:

    • detección : intenta detectar el marcador en la escena
    • seguimiento : una vez que se detecta, utiliza técnicas de cálculo inferiores para rastrear el marcador en los siguientes fotogramas.

También debería haber algunos algoritmos para encontrar la posición y orientación de la cámara en cada cuadro. Esto se consigue detectando la transformación de homografía entre el marcador detectado en la escena y una imagen 2D del marcador que hemos procesado offline. La explicación de este método aquí (página 18). Los pasos principales para las estimaciones de pose son:

  1. Cargar parámetros intrínsecos de la cámara . Extraído previamente fuera de línea mediante calibración. parámetros intrínsecos

  2. Cargar el patrón (marcador) a rastrear: Es una imagen del marcador plano que vamos a rastrear. Es necesario extraer características y generar descriptores ( puntos clave ) para este patrón para que luego podamos comparar con características de la escena. Algoritmos para esta tarea:

  3. Para cada actualización de cuadro, ejecute un algoritmo de detección para extraer características de la escena y generar descriptores. Nuevamente tenemos varias opciones.

    • TAMIZAR
    • RÁPIDO
    • NAVEGAR
    • FREAK : Un nuevo método (2012) se supone que es el más rápido.
    • ORBE
  4. Encuentra coincidencias entre el patrón y los descriptores de escena.

  5. Encuentre la matriz de homografía de esas coincidencias. RANSAC se puede utilizar antes para encontrar inliers / outliers en el conjunto de coincidencias.

  6. Extrae la postura de la cámara de la homografía.

Ejemplos completos:

Jav_Rock
fuente
1
Desafortunadamente, esto "no es constructivo", ¿está buscando sugerencias?
bfavaretto
3
En cuanto a la tarea de instalación, ahora OpenCV ha migrado a GIT, por lo que para descargar el código fuente es necesario hacer un "git clone git: //code.opencv.org/opencv.git".
Carlos Cachalote
12
47 Votos a favor aún cerrados debido a reglas tontas.
SvaLopLop

Respuestas:

19

Dado que las aplicaciones de RA a menudo se ejecutan en dispositivos móviles, podría considerar también otras funciones detector / descriptor:

Muffo
fuente
3
¡Gracias! También hay una versión "rápida" de FAST que se ejecuta en tiempo real en móviles, es piramidal y los descriptores de SIFT se reducen
Jav_Rock
2
Obtuve resultados casi perfectos usando ORB
dinámico
En realidad, leyendo sobre ORB dice que es un RÁPIDO en pirámides
Jav_Rock
3
Freak es el último algoritmo en procesar descriptor en AR. Más rápido que RÁPIDO.
vaya el
13

En general, si puede elegir los marcadores, primero detecta un objetivo cuadrado utilizando un detector de bordes y luego Hough o simplemente contornos, luego identifique el marcador particular del diseño interno. En lugar de utilizar un comparador de puntos general.

Eche un vistazo a Aruco para ver un código de ejemplo bien escrito.

Martin Beckett
fuente
4
Sí, el enfoque fiducial es el más simple, pero no está del todo actualizado. Creo que ahora uno debería apuntar a los marcadores texturizados. Gracias. Sin embargo, el ejemplo es muy interesante porque está bien explicado.
Jav_Rock
1
Si desea conocer la pose, debe hacer coincidir la posición 3D de las características del marcador con las coordenadas de imagen correspondientes. Los objetivos de forma regular facilitan esto, pero no necesitan ser planos
Martin Beckett
Pero si no son planos, necesita el modelo 3D o un modelo CAD, de lo contrario, la homografía de 2d a 3d ya no es un método válido, ¿verdad? Me refiero a la Transformada Lineal Directa utilizada en findhomography
Jav_Rock
Sí, si tiene un marcador 3D, necesita conocer la forma 3D de la palabra real (de cad, o midiéndola) pero da una mejor solución
Martin Beckett