Pregunta

Estoy haciendo la calibración de la cámara de Tsai Algo. Obtuve una matriz intrensica y extrínseca, pero ¿cómo puedo reconstruir las coordenadas 3D de esa inormación?

enter image description here

1) Puedo usar la eliminación gaussiana para Find x, y, z, w y luego los puntos serán x/w, y/w, z/w como sistema homogéneo.

2) Puedo usar elDocumentación de OpenCV Acercarse:

enter image description here

que yo sé u, v, R , t , Puedo calcular X,Y,Z.

Sin embargo, ambos métodos terminan en diferentes resultados que no son correctos.

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Si tienes parámetros extrínsecos, entonces obtienes todo. Eso significa que puedes tener homografía de la extrínsecs (también llamada Camterapose). Pose es una matriz 3x4, la homografía es una matriz 3x3, H definido como

                   H = K*[r1, r2, t],       //eqn 8.1, Hartley and Zisserman

con K siendo la cámara matriz intrínseca, R1 y R2 siendo las dos primeras columnas de la matriz de rotación, Riñonal; T es el vector de traducción.

Luego normalizar dividiendo todo por T3.

¿Qué pasa con la columna? R3, ¿no lo usamos? No, porque es redundante, ya que es el producto cruzado de las 2 primeras columnas de pose.

Ahora que tienes homografía, proyecta los puntos. Tus puntos 2d son x, y. Agrégalos AZ = 1, por lo que ahora son 3D. Proyectlos de la siguiente manera:

        p          = [x y 1];
        projection = H * p;                   //project
        projnorm   = projection / p(z);      //normalize

Espero que esto ayude.

Otros consejos

Como se dijo bien en los comentarios anteriores, proyectar coordenadas de imagen 2D en "espacio de cámara" 3D inherentemente requiere inventar las coordenadas Z, ya que esta información se pierde totalmente en la imagen. Una solución es asignar un valor ficticio (z = 1) a cada uno de los puntos de espacio de imagen 2D antes de la proyección como lo responde Jav_rock.

p          = [x y 1];
projection = H * p;                   //project
projnorm   = projection / p(z);      //normalize

Una alternativa interesante a esta solución ficticia es entrenar un modelo para predecir la profundidad de cada punto antes de la reproyección en el espacio de cámara 3D. Probé este método y tuve un alto grado de éxito utilizando un Pytorch CNN entrenado en cajas delimitadoras del 3D desde el conjunto de datos de Kitti. Estaría encantado de proporcionar código, pero sería un poco largo para publicar aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top