Pregunta

Dadas dos nubes consecutivas de puntos 3D 1 y 2 (no toda la nube, digamos 100 puntos seleccionados de la nube con el GoodFeateReStomatch de OpenCV), obtenidas de un mapa de profundidad de Kinect, quiero calcular la homografía de la cámara de 1 a 2. Entiendo que esto es un proyectivo transformar, y ya lo han hecho muchas personas: aquí (diapositiva 12), aquí (diapositiva 30) y Aquí en lo que parece ser el papel clásico. Mi problema es que, si bien soy un programador competente, no tengo las habilidades de matemáticas o trig para convertir uno de esos métodos en código. Como este no es un problema fácil, ofrezco una gran recompensa para el código que resuelve el siguiente problema:

La cámara está en el origen, mirando en la dirección Z, en Pentaedron irregular [A, B, C, D, E, F]:camera position 1

La cámara se mueve -90 mm a la izquierda (x), +60 mm hacia arriba (y), +50 mm hacia adelante (z) y gira 5 ° hacia abajo, 10 ° a la derecha y -3 ° en sentido antihorario:camera position 2

Rotar toda la escena para que la cámara esté de vuelta en su posición original, permita determinar las ubicaciones de los vértices a las 2:enter image description here

Los archivos 3DS Max utilizados para preparar esto son Max 1, Max 2 y Max 3

Estas son las posiciones de los vértices antes y después, las intrínsecas, etc.:vertices and intrinsics

Tenga en cuenta que los vértices de Camera2 no son 100% precisos, hay un poco de ruido deliberado.

Aquí están los números en un archivo de Excel

El código que necesito, que debe ser fácilmente traducible en VB.NET o C#, usando EMGUCV y OpenCV cuando sea necesario, toma los 2 conjuntos de vértices y la intrínseca y produce esta salida:

Camera 2 is at -90 X, +60 Y, +50 Z rotated -5 Y, 10 X, -3 Z.
The homography matrix to translate points in A to B is:
a1, a2, a3
b1, b2, b3
c1, c2, c3

No sé si la homografía es 3x3 o 3x4 para coordenadas homogéneas, pero debe permitirme traducir los vértices del 1 al 2.

Tampoco conozco los valores A1, A2, etc. Eso es lo que tienes que encontrar> ;-)

La oferta de 500 recompensas 'reemplaza' la recompensa que ofrecí Esta pregunta muy similar, Agregué un comentario que señala esta pregunta.

Edit2: Me pregunto si la forma en que hago esta pregunta es engañosa. Me parece que el problema es más adecuado para la nube que la geometría de la cámara (si sabe cómo traducir y girar A a B, conoce la transformación de la cámara y el viceversa). Si es así, tal vez la solución podría obtenerse con el algoritmo de Kabsch o algo similar

No hay solución correcta

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