Pregunta

Tengo 3 puntos en un espacio 3D de los cuales sé las ubicaciones exactas. Supongamos que son: (x0, y0, z0) , (x1, y1, z1) y (x2, y2, z2) .

También tengo una cámara que está mirando estos 3 puntos y sé las ubicaciones en 2D de esos tres puntos en el plano de vista de la cámara. Entonces, por ejemplo, (x0, y0, z0) será (x0 ', y0') , y (x1, y1, z1) será ser (x1 ', y1') y (x2, y2, z2) serán (x2 ', y2') desde el punto de la cámara de vista.

¿Cuál es la forma más fácil de encontrar la matriz de proyección que proyectará esos puntos 3D en puntos 2D en el plano de vista de la cámara? No sabemos nada sobre la ubicación de la cámara.

¿Fue útil?

Solución

Esto le da dos conjuntos, cada uno de tres ecuaciones en 3 variables:

a*x0+b*y0+c*z0 = x0'
a*x1+b*y1+c*z1 = x1'
a*x2+b*y2+c*z2 = x2'

d*x0+e*y0+f*z0 = y0'
d*x1+e*y1+f*z1 = y1'
d*x2+e*y2+f*z2 = y2'

Simplemente use cualquier método de resolución de ecuaciones simultáneas que sea más fácil en su situación (ni siquiera es difícil resolverlas a mano). Entonces su matriz de transformación es solo ((a, b, c) (d, e, f)).

...

En realidad, eso está demasiado simplificado y supone una cámara apuntando al origen de su sistema de coordenadas 3D y sin perspectiva.

Para la perspectiva, la matriz de transformación funciona más como:

               ( a, b, c, d )   ( xt )
( x, y, z, 1 ) ( e, f, g, h ) = ( yt )
               ( i, j, k, l )   ( zt )

( xv, yv ) = ( xc+s*xt/zt, yc+s*yt/zt ) if md < zt;

pero la matriz 4x3 está más restringida que 12 grados de libertad ya que deberíamos tener

a*a+b*b+c*c = e*e+f*f+g*g = i*i+j*j+k*k = 1
a*a+e*e+i*i = b*b+f*f+j*j = c*c+g*g+k*k = 1

Entonces probablemente debería tener 4 puntos para obtener 8 ecuaciones para cubrir las 6 variables para la posición y el ángulo de la cámara y 1 más para escalar los puntos de vista 2D ya que podremos eliminar el "centro". coordenadas (xc, yc).

Entonces, si tiene 4 puntos y transforma sus puntos de vista 2D para que sean relativos al centro de su pantalla, puede obtener 14 ecuaciones simultáneas en 13 variables y resolverlas.

Desafortunadamente, seis de las ecuaciones no son ecuaciones lineales. Afortunadamente, todas las variables en esas ecuaciones están restringidas a los valores entre -1 y 1, por lo que aún es posible resolver las ecuaciones.

Otros consejos

Su cámara tiene (al menos) 7 grados de libertad: 3 para posición, 3 para orientación y 1 para FOV. Estoy seguro de que alguien me corregirá si me equivoco, pero no parece que 3 puntos sean suficientes para una solución completa.

Para obtener una solución generalizada a este problema, busque 'Ver correlación' en Graphics Gems II.

Lo que está buscando se llama algoritmo de estimación de pose. Eche un vistazo a la implementación POSIT en OpenCV: http://opencv.willowgarage.com /documentation/c/calib3d_camera_calibration_and_3d_reconstruction.html#posit

Necesitará cuatro o más puntos, y es posible que no se encuentren en el mismo plano.

Un tutorial para esta implementación está aquí: http://opencv.willowgarage.com/wiki/Posit

Sin embargo, tenga cuidado: en el tutorial se utiliza una ventana gráfica cuadrada, por lo que todas las coordenadas de vista están en el rango -1, -1 a 1,1. Esto lleva a suponer que estos deberían estar en el sistema de coordenadas de la cámara (antes de la corrección de la relación de aspecto). Este no es el caso, así que si usa una ventana gráfica con p. una relación de aspecto de 4: 3, entonces sus coordenadas de entrada deben estar en el rango -1.3333, -1 a 1.3333,1.

Por cierto, si sus puntos deben estar en el mismo plano, también puede mirar el algoritmo CameraCalibration de OpenCV, pero esto es más complicado de configurar y requiere más puntos como entrada . Sin embargo, también le proporcionará la información de distorsión y los parámetros intrínsecos de su cámara.

No creo que haya suficiente información para encontrar una solución definitiva. Sin conocer la ubicación de su cámara y sin conocer su plano de vista, hay un número infinito de matrices que pueden resolver este problema.

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