¿Es posible convertir de 2D a 3D?

8

He capturado posiciones de automóviles en diferentes cuadros del video . Suponga que el centroide del automóvil (por ejemplo, el automóvil del lado izquierdo que viene hacia nosotros en las imágenes) en el cuadro de video1 es P (x1, y1) y Q (x2, y2) en el cuadro de video4.

¿Es posible representar los puntos P y Q en 3D? para poder calcular la distancia correcta de píxeles d (PQ) y finalmente calcular la distancia real

Nota: puede suponer que la cámara está estacionaria, colocada a una altura de 10 m del nivel del suelo. También puede asumir cualquier dato adecuado si lo desea, coche moviéndose en carretera también puede consultar la siguiente figura.

vista lateral y vista frontal

sagar
fuente
1
Marcar el 50% de sus preguntas en negrita, realmente no ayuda.
jojek
1
@jojek señor, he agregado una figura para referencia
sagar

Respuestas:

4

[EDITADO] Así es como se hace.

Pasos: 1. Aislar la parte del divisor de carreteras.

Imagen recortadaAislar las tiras amarillas

Luego, usando Houghlines, encuentre las líneas más largas en Image. Descubra los puntos extremos que cruzan el límite de la imagen. Tienes los puntos cuadilaterales. Me salté esta parte al elegirlos manualmente. En mi caso, el ancho del camino en la parte superior de la imagen es 10, y en la parte inferior es 60.

El cuadilateral para transformar

Ahora, para el Destino, tenemos que Image para que Divider Quadilateral tenga un ancho uniforme de 60, por lo que guardamos en otra matriz nuevos puntos, que tienen los mismos puntos inferiores, pero los puntos superiores se modifican ya que forman un rectángulo con una altura igual a la imagen (o más grande, puede ajustarlo según le convenga después de ejecutarlo una vez y ver los resultados), pero ancho 60. Recuerde, estamos transformando nuestra imagen de manera que el divisor encaje en esta Área Rectangular. La imagen cambiará automáticamente.

Ahora, usando Mat TransformMat = getPerspectiveTransform(ipPts, opPts);

de opencv en los puntos cuadráticos iniciales y de destino, obtenemos una matriz de transformación, que aplicamos a nuestra imagen de prueba.

warpPerspective(ipImg, opImg, TransformMat, ipImg.size());

Imagen transformada

Verá que se recorta una gran cantidad de área para que se ajuste a la salida en Tamaño de imagen de entrada. Sin embargo, notará que la imagen se transforma para obtener un divisor paralelo, como esperábamos. Al realizar algunas traducciones y cosas, y tomar una imagen de salida de mayor tamaño, obtendrá esto. Nunca podemos obtener una imagen de salida perfectamente envuelta, ya que su tamaño puede ser muy grande. Pero llegaremos a alguna restricción que cumplirá nuestra tarea. Aquí está la última imagen:

Imagen final transformada

shreelock
fuente
1
@ Un señor Matlabber en Matlab, ¿hay alguna función para convertir de proyección 2d a 3d?
sagar
Su problema no es un problema de proyección 2d a 3d. Es un problema de transformación homográfica y mapeo de perspectiva, luego un procesamiento adicional que lo ayudará a calcular la distancia (lo que está tratando de lograr al hacer un '3d'). Quizás esta discusión pueda ayudarte con esto.
shreelock
1
@ Un señor de Matlabber se está volviendo difícil de entender. Transformación homográfica y mapeo de perspectiva. Busqué en Google, pero no tengo idea al respecto ...
sagar
Puede buscar en Google varios ejemplos de Transformación homográfica y mapeo de perspectiva. Este es un tema introductorio, que se enseña en muchos de los cursos en línea de visión por computadora. Estoy bastante ocupado ahora, de lo contrario te hubiera dado algunas referencias sobre ellos. Intente buscar cursos sobre Procesamiento de imágenes / Visión por computadora, rara vez tienen ejercicios de demostración / programación sobre este tipo de problemas.
shreelock
@A Matlabber ok, haré lo que digas. Gracias.
sagar 12/06
3

Esto parece una especie de problema de trazado de rayos . Si conoce la posición y orientación de su cámara, debería poder calcular la matriz de proyección 3x4 y su inversa.

Esto debería permitirle convertir puntos de imagen a la posición 3D (en la carretera). Esta discusión http://opencv-users.1802565.n2.nabble.com/2D-to-3D-projection-with-given-plane-td7272428.html podría tener más información útil.

En cuanto a aplicarlo en matlab. Hay un affine3d que puede usar para almacenar la transformación. También puede haber cosas útiles para proyecciones / trazado de rayos en el intercambio de archivos, como http://www.mathworks.com/matlabcentral/fileexchange/25974-raytracer, pero no he buscado en detalle para encontrar qué es relevante para qué usted quiere.

nivag
fuente
señor, se está volviendo difícil de entender La transformación homográfica y el mapeo de perspectiva. Busqué en google también los enlaces que se le dieron, pero no tengo idea al respecto ...
sagar
1
@sagar Busque "Geometría de vista múltiple en visión artificial" de Hartley & Zisserman. Este es EL libro que explica la homografía de una manera natural (usando coordenadas homogéneas, en las cuales la transformación es lineal).
Libor
1

Si puede calibrar su cámara y puede detectar algunos puntos de referencia en la superficie de la carretera, puede obtener coordenadas 3D de los puntos de imagen que están en la carretera. Esto supone que el camino está en un avión. En otras palabras, si puede detectar un automóvil, puede calcular las coordenadas 3D de la parte inferior del automóvil. Vea este ejemplo en MATLAB usando el Computer Vision System Toolbox.

Dima
fuente