¿Cómo puedo determinar la distancia de un objeto en un vídeo?


Tengo un archivo de video grabado desde la parte delantera de un vehículo en movimiento. Voy a usar OpenCV para la detección y el reconocimiento de objetos, pero estoy atascado en un aspecto. ¿Cómo puedo determinar la distancia de un objeto reconocido?

Puedo saber mi velocidad actual y la posición del GPS en el mundo real, pero eso es todo. No puedo hacer suposiciones sobre el objeto que estoy rastreando. Estoy planeando usar esto para rastrear y seguir objetos sin chocar con ellos. Idealmente me gustaría utilizar estos datos para derivar la posición del objeto en el mundo real, lo que podría hacer si pudiera determinar la distancia de la cámara al objeto.

Author: Neil N, 2010-01-25

8 answers

Cuando tienes video en movimiento, puedes usar paralaje temporal para determinar la distancia relativa de los objetos. Paralaje: (definición).

El efecto sería el mismo que obtenemos con nuestros ojos que pueden ganar percepción de profundidad al mirar el mismo objeto desde ángulos ligeramente diferentes. Ya que se está moviendo, puede usar dos fotogramas de video sucesivos para obtener su ángulo ligeramente diferente.

Usando cálculos de paralaje, puede determinar el relativo tamaño y distancia de los objetos (relativos entre sí). Pero, si desea el tamaño y la distancia absolutos , necesitará un punto de referencia conocido.

También tendrá que saber la velocidad y la dirección que se viaja (así como la velocidad de fotogramas de vídeo) con el fin de hacer los cálculos. Usted podría ser capaz de derivar la velocidad del vehículo utilizando los datos visuales, pero eso agrega otra dimensión de complejidad.

La tecnología ya existe. Los satélites determinan prominencia topográfica (altura) comparando múltiples imágenes tomadas en un corto período de tiempo. Usamos paralaje para determinar la distancia de las estrellas tomando fotos del cielo nocturno en diferentes puntos de la órbita de la tierra alrededor del sol. Pude crear imágenes en 3d desde la ventana de un avión tomando dos fotografías en una sucesión corta.

La tecnología exacta y los cálculos (incluso si los conociera desde la parte superior de mi cabeza) están de manera fuera del alcance de la discusión aqui. Si puedo encontrar una referencia decente, la publicaré aquí.

 34
Author: Robert Cartaino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-25 21:12:19

Su problema es bastante estándar en el campo.

En primer lugar,

Necesitas calibrar tu cámara. Esto se puede hacer fuera de línea (hace la vida mucho más simple) o en línea a través de la autocalibración.

Calibrarlo fuera de línea - por favor.

En segundo lugar,

Una vez que tenga la matriz de calibración de la cámara K , determine la matriz de proyección de la cámara en una escena sucesiva (debe usar paralaje como se menciona en otros). Esto se describe bien en este tutorial de OpenCV.

Tendrás que usar la información GPS para encontrar la orientación relativa entre las cámaras en las escenas sucesivas (que podrían ser problemáticas debido al ruido inherente a la mayoría de las unidades GPS), es decir, las R y t mencionadas en el tutorial o la rotación y traducción entre las dos cámaras.

Una vez que haya resuelto todo eso, tendrá dos matrices de proyección - - - representaciones de la cámaras en esas escenas sucesivas. Usando una de estas matrices de cámara, puede "proyectar" un punto 3D M en la escena a la imagen 2D de la cámara en la coordenada de píxeles m (como en el tutorial).

Usaremos esto para triangular el punto 3D real a partir de los puntos 2D encontrados en su video.

En tercer lugar,

Use un detector de puntos de interés para rastrear el mismo punto en su video que se encuentra en el objeto de interés. Hay varios detectores disponible, recomiendo SURF ya que tiene OpenCV que también tiene varios otros detectores como Shi-Tomasi corners, Harris, etc .

En cuarto lugar,

Una vez que haya seguido los puntos de su objeto a través de la secuencia y obtenido las coordenadas de píxeles 2D correspondientes, debe triangular para obtener el mejor punto 3D que se ajuste a su matriz de proyección y puntos 2D. Triangulación

La imagen anterior captura muy bien la incertidumbre y cómo se calcula un punto 3D de mejor ajuste. Por supuesto, en su caso, las cámaras son probablemente en frente de la otra!

Finalmente,

Una vez que haya obtenido los puntos 3D en el objeto, puede calcular fácilmente la distancia euclidiana entre el centro de la cámara (que es el origen en la mayoría de los casos) y el punto.

Nota

Esto obviamente no es algo fácil, pero tampoco es tan difícil. Recomiendo el excelente libro de Hartley y Zisserman Geometría de vista múltiple que ha descrito todo lo anterior en detalle explícito con código MATLAB para arrancar.

Diviértete y sigue haciendo preguntas!

 50
Author: Jacob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-08 14:20:26

Debe identificar los mismos puntos en el mismo objeto en dos fotogramas diferentes tomados a una distancia conocida. Dado que conoce la ubicación de la cámara en cada fotograma, tiene una línea de base ( el vector entre las dos posiciones de la cámara. Construir un triángulo a partir de la línea de base conocida y los ángulos a los puntos identificados. La trigonometría le da la longitud de los lados desconocidos de los traingles para la longitud conocida de la línea de base y los ángulos conocidos entre la línea de base y la desconocida lado.

Puede usar dos cámaras, o una cámara tomando tomas sucesivas. Por lo tanto, si su vehículo se mueve a 1 m/s y toma fames cada segundo, entonces successibe frames le proporcionará una línea de base de 1m que debería ser buena para medir la distancia de los objetos hasta, digamos, 5m de distancia. Si necesita alejar los objetos más lejos que los marcos utilizados deben estar más separados, sin embargo, los objetos más distantes estarán a la vista durante más tiempo.

El observador en F1 ve al objetivo en T con el ángulo a1 a la velocidad vector. El observador mueve la distancia b a F2. Ve el objetivo en T con ángulo a2.

Requerido para encontrar r1, rango desde el objetivo en F1

La identidad trigonométrica para el coseno da

Cos (90-a1 ) = x / r1 = c1

Cos (90-a2 ) = x / r2 = c2

Cos (a1) = (b + z) / r1 = c3

Cos (a2) = z / r2 = c4

X es la distancia al objetivo ortogonal al vector de velocidad del observador

Z es la distancia desde F2 hasta la intersección con x

Resolviendo para r1

R1 = b / ( c3 – c1 . c4 / c2)

 5
Author: ravenspoint,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-26 19:32:01

Dos cámaras para que pueda detectar paralaje. Es lo que hacen los humanos.

editar

Por favor vea la respuesta de ravenspoint para más detalles. Además, tenga en cuenta que una sola cámara con un divisor probablemente sería suficiente.

 4
Author: Steven Sudit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-25 20:46:52

Utilice mapas de disparidad estéreo. muchas implementaciones están a flote, aquí hay algunos enlaces: http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/LECT11/node4.html

Http://www.ece.ucsb.edu / ~manj / ece181bS04 / L14 (morestereo).pdf

En caso de que no tenga cámara estéreo, pero la profundidad se puede evaluar utilizando video http://www.springerlink.com/content/g0n11713444148l2 /

Creo que lo anterior será lo que podría ayudarle a la mas.

La investigación ha progresado tanto que la profundidad puede ser evaluada (aunque no de manera satisfactoria) a partir de una sola imagen monocular http://www.cs.cornell.edu / ~asaxena / learningdepth /

 3
Author: Egon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-27 04:24:27

Alguien por favor corríjame si me equivoco, pero me parece que si simplemente va a usar una sola cámara y simplemente confiar en una solución de software, cualquier procesamiento que pueda hacer sería propenso a falsos positivos. Dudo mucho que haya algún procesamiento que pueda decir la diferencia entre los objetos que realmente están a la distancia percibida y aquellos que solo parecen estar a esa distancia (como la "perspectiva forzada") en las películas.

Cualquier posibilidad que usted podría añadir un ¿sensor ultrasónico?

 2
Author: Pontiac6000fan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-25 20:03:51

Poner y objeto de tamaño conocido en el campo de visión de las cámaras. De esa manera se puede tener una métrica más objetiva para medir distancias angulares. Sin un segundo punto de vista / cámara, te limitarás a estimar el tamaño / distancia, pero al menos no será una suposición completa.

 0
Author: Kelly S. French,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-25 20:08:25

Primero debe calibrar su cámara para que pueda obtener la relación entre las posiciones de los objetos en el plano de la cámara y sus posiciones en el plano del mundo real, si está utilizando una cámara, puede usar la " técnica de flujo óptico" si está utilizando dos cámaras, simplemente use una triangulatio simple para encontrar la posición real (será fácil encontrar la distancia de los objetos), pero el probem con este segundo methose es el emparejamiento, lo que significa cómo puede encontrar la posición de un objeto ' x 'en camera2 si ya knoz es posición en camera1 y aquí se puede utilizar el algorítmo 'SIFT'. acabo de darte algunas palabras clave que desearían ayudarte.

 0
Author: harounbest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-25 02:56:11