Visión de cámara única y sistema de mapeo


17

Hace algún tiempo vi una demostración de un pequeño 'tanque de juguete' con una sola cámara montada en él. Este tanque fue capaz de conducir por el piso y detectar objetos y luego moverse / girar para evitarlos. Lo interesante fue que usaba un sistema de visión de cámara única y hasta donde recuerdo estaba aprovechando que el piso era plano. y luego, usando la velocidad, una característica se movía en la escena en relación con los motores y las direcciones de viaje para evaluar y, por lo tanto, mapear la escena.

¿Alguien puede enviarme punteros qué buscar para obtener más información sobre esto, o algunos punteros a bases de códigos que pueden hacer esto?

La razón por la que pregunto es que este era un sistema de cámara única de hace varios años (5+) y por lo tanto (por lo que recuerdo) era una carga de cálculo relativamente baja. Tenía la intención de probar esto en un Raspberry PI para construir un automóvil / tanque que mapee una habitación o un conjunto de habitaciones.


2
Bienvenido a la robótica Ben. Consulte Cómo preguntar y haga un recorrido por algunos consejos sobre cómo escribir preguntas prácticas y con respuesta en función de los problemas reales que enfrenta . Gracias,
Marcos stand

Respuestas:


4

Es difícil decir exactamente lo que estaban haciendo, pero los términos que puede desear aquí son " flujo óptico " y " egomotion ". Parece que puede haber habido alguna detección y coincidencia de características (algo así como SURF o SIFT) o también se ha incluido la segmentación en primer plano / fondo.

OpenCV es probablemente la base de código más utilizada para la visión por computadora, tienen mucha funcionalidad para el análisis de movimiento . OpenCV debe ejecutarse en la Raspberry Pi, aunque sus algoritmos pueden estar limitados por la potencia informática.


4

Aprovechando la respuesta de WildCrustcean , otra posibilidad sería la visión estéreo . Si bien a menudo pensamos en la visión estéreo como el uso de dos cámaras, las técnicas realmente solo necesitan imágenes desplazadas en el espacio y un modelo del desplazamiento. En otras palabras, puedo tomar una imagen, moverme y luego tomar otra imagen. Mientras conozca la transformación entre estas dos imágenes, puedo usar técnicas de visión estéreo para calcular la distancia a un punto en la imagen.


2
Creo que la técnica de la que estás hablando se llama "Estructura del movimiento".
Kozuch

1

Podría haber estado usando Parellel Tracking and Mapping PTAM . PTAM es una implementación del problema de localización y mapeo simultáneo (SLAM) que utiliza una sola cámara para construir un mapa 3D del mundo y localizarlo mediante el seguimiento de las características visuales.

Mi equipo una vez experimentó con el uso del paquete PTAM en ROS .

Estábamos ejecutando Ubuntu en un Intel Atom y, según recuerdo, no procesó demasiado el procesador. Sin embargo, no terminamos usando, principalmente porque no pudimos encontrar suficientes características en el entorno donde estaría funcionando nuestro robot.


0

En general, no puede extraer mediciones de distancia métrica de una sola imagen, a menos que tenga información adicional sobre el mundo. Por ejemplo, si sabe que el mundo es plano (o puede detectar el piso, que es una región plana), puede estimar una homografía.

Una homografía es una transformación proyectiva entre planos (matriz 3x3). Dada la calibración intrínseca de la cámara, puede descomponer esta homografía inducida por el plano en rotación y traslación. La traducción está a escala. Puede resolver esta ambigüedad de escala conociendo la distancia desde la cámara hasta el piso (plano).

Una vez que tenga la homografía, puede detectar objetos que no están en el plano. La homografía le permite deformar la primera imagen sobre la segunda. Los objetos en el avión se alinearán y tendrán un pequeño error. Los objetos que no están en el avión no se alinearán. Esto se llama paralaje.

Una forma de implementar esto podría ser

  1. Extraer características de ambas imágenes.
  2. Une las características o haz un seguimiento de ellas.
  3. Estime la homografía usando RANSAC.
  4. Descomponga la homografía en una rotación y traslación usando la calibración.
  5. Deformar la primera imagen sobre la
    segunda. Los píxeles con grandes errores no están en el suelo y podrían ser
    obstáculos.

La mayoría de los bloques de construcción se implementan en opencv (consulte http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html ).

Buena suerte.

PD: la descomposición de la homografía también te dará la normalidad del avión. Pero, dado que está asumiendo que este es el plano de tierra, tenemos la orientación normal hacia arriba. Se puede lograr una solución más precisa en su procedimiento de calibración. Puede usar un objetivo de tablero de ajedrez y estimar su pose. La pose tendrá un plano normal y distancia a la cámara.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.