Estimación de posición 3D con cámara 2D

9

Tengo una cámara (iPhone), tengo un objeto de control 3D en la imagen que conozco muy bien sus propiedades. (Mi objeto de control). También hay un objeto secundario en movimiento. El objetivo final es establecer la trayectoria 3D del objeto en movimiento durante un período de tiempo determinado. (Rastreo)

Me gusta preguntar, ¿podría averiguarlo?

  • Distancia del teléfono al objeto de control (en aras de la discusión, supongamos que la cámara está a cierta altura y cierta distancia que ninguno de ellos se conoce pero la cámara es perpendicular a la superficie que se conoce)

  • El objeto secundario donde puedo localizar el objeto en cada cuadro posterior. Mi objetivo es estimar su trayectoria 3D como he indicado anteriormente.

Pregunta extra, podemos hacer que el sistema sea de tal manera que se pueda establecer la distancia del teléfono al objeto de control (aunque no es preferible), ¿esto me ayudaría con el segundo punto?

Ktuncer
fuente
¿Está familiarizado con la literatura en esta área? Si no, puedo recomendar algunos documentos, pero tenga cuidado: las matemáticas están involucradas.
Emre
@emre sería genial si pudieras proporcionar algunos consejos. Las matemáticas no son problema, nos encantan las matemáticas.
Ktuncer
@emre Eché un vistazo rápido al documento de revisión. Esto es más para rastrear, puedo rastrear el objeto fácilmente, ese no es el problema. Puedo precisar en qué píxel se encuentra el objeto. El problema es dónde está el objeto en el espacio 3D. es posible? Básicamente, tengo otro objeto en el espacio 3D que conozco las propiedades que puedo usar como marco de referencia, pero eso es todo.
Ktuncer
Lo siento, papel equivocado. ¿Quizás pueda adaptar el seguimiento de trayectoria 3D basado en visión para entornos desconocidos [PDF]? Ellos usan una cámara estéreo; ¿Es esa una posibilidad para ti?
Emre

Respuestas:

15

Si su objeto tiene 6 puntos conocidos (coordenadas 3D conocidas, y Z ), puede calcular la ubicación de la cámara relacionada con el sistema de coordenadas de los objetos.X,YZ

Primero algunos conceptos básicos.

(X,Y,Z)ωX=ω[XYZ1]Tω=1XXωx=ω[XY1]ω,X,YZ

3×4

x=PX

xX

Recordamos que el producto cruzado entre dos vectores de 3 puede definirse como la multiplicación de vectores de matriz de modo que

v×u=(v)xu=[0v3v2v30v1v2v10]u

v×v=0

Px

(x)xx=(x)xPX=0

¡Ajá! El resultado debe ser cero vector. Si ahora abrimos la ecuación obtenemos:

[0wyw0xyx0][P1,1P1,2P1,3P1,4P2,1P2,2P2,3P2,4P3,1P3,2P3,3P3,4]X=[P3,4WyP2,1XwP2,2YwP2,4Ww+P3,1XyP2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1XwP3,4Wx+P1,2YwP3,1Xx+P1,3ZwP3,2YxP3,3ZxP2,4Wx+P2,1XxP1,4WyP1,1Xy+P2,2YxP1,2Yy+P2,3ZxP1,3Zy]=0

P

[0000XwYwZwWwXyYyZyWyXwYwZwWw0000XxYxZxWxXyYyZyWyXxYxZxWx0000][P1P2P3]=0

PnnP

Pequeña pausa para que podamos reunir nuestras dificultades. Tenga en cuenta que la ecuación matricial anterior debe formarse para cada correspondencia 3D-> 2D conocida (debe haber al menos 6 de ellas).

2×12A

A[P1P2P3]=0

[P1P2P3]=0

Afortunadamente, podemos usar la descomposición de valores singulares (SVD) para forzar

[P1P2P3]=1

AP[P1P2P3]TP

P

P=K[RRC]

CPP

(Hartley, Zisserman - Geometría de vista múltiple en visión artificial)

X

x1=P1Xx2=P2X

(x1)xP1X=0(x2)xP2X=0

Y así.

buq2
fuente
¿Es correcto decir que su forma de calcular la posición 3D de la cámara es equivalente a OpenCV solvePnp? docs.opencv.org/2.4/modules/calib3d/doc/… (busque solvePnP en la página. No puedo pegar una URL con un #)
gregoiregentil