2010-02-03 19 views
10

En MATLAB he calculado el Fundamental matrix (de dos imágenes) utilizando el Eight point algorithm normalizado. De eso necesito triangulate los puntos de imagen correspondientes en el espacio 3D. Por lo que entiendo, para hacer esto necesitaría la rotación y la traducción de las cámaras de la imagen. La forma más fácil, por supuesto, sería calibrate the cameras primero y luego tomar las imágenes, pero esto es demasiado restrictivo para mi aplicación, ya que requeriría este paso adicional.Correspondencias 3D de la matriz fundamental

Eso me deja con auto (self) camera calibration. Veo una mención de bundle adjustment, sin embargo, en An Invitation to 3D Vision parece que requiere una traducción y rotación inicial, lo que me hace pensar que se necesita una cámara calibrada o que mi entendimiento es insuficiente.

Así que mi pregunta es cómo puedo extraer automáticamente la rotación/traducción para que pueda reproyectar/triangular los puntos de la imagen en el espacio 3D. Cualquier código o pseudocódigo de MATLAB sería fantástico.

Respuesta

8

Puede usar la matriz fundamental para recuperar las matrices de la cámara y triangular los puntos 3D de sus imágenes. Sin embargo, debe tener en cuenta que la reconstrucción que obtendrá será una reconstrucción proyectiva y no euclidiana. Esto es útil si su objetivo es medir invariantes proyectivas en la escena original, como la relación cruzada, las intersecciones de línea, etc., pero no será suficiente para medir ángulos y distancias (tendrá que calibrar las cámaras para eso).

Si tiene acceso a Hartley and Zisserman's textbook, puede verificar la sección 9.5.3 donde encontrará lo que necesita para pasar de la matriz fundamental a un par de matrices de cámara que le permitirán calcular una reconstrucción proyectiva (creo que la el mismo contenido aparece en la sección 6.4 del libro de Yi Ma). Desde el source code for the book's algorithms is available online, es posible que desee comprobar las funciones vgg_P_from_F, vgg_X_from_xP_lin y vgg_X_from_xP_nonlin.

+0

Terminé usando el Algoritmo 12.1 "El método de triangulación óptimo" en el libro de Hartley/Zisserman. Calibró las cámaras con "Camera Calibration Toolbox for Matlab" – yxk

1

Si el espacio 3D se puede elegir arbitrariamente podría configurar su primera matriz de cámara como

P = [I | 0] 

Sin traducción, sin rotación. Eso te dejaría con un sistema de coordenadas definido desde la cámara 1. Entonces no debería ser demasiado difícil calibrar la segunda cámara.

+0

¿Utilizarías un algoritmo como Ajuste del paquete a partir de ahí? – yxk

+0

De ser posible, creo que trataría de usar algún tipo de objeto de calibración para encontrar la rotación de la segunda cámara dada la primera cámara ideal. De lo contrario, supongo que el ajuste del paquete sería un buen lugar para comenzar. –

+1

Para realizar la calibración, se necesita utilizar algún tipo de objeto de calibración, como un tablero de ajedrez.Esto aún se puede hacer con un objeto que no sea de calibración, pero los resultados no son tan buenos, a menos que se pueda extraer una gran cantidad de correspondencias * exactas *. De lectura adicional, el ajuste del paquete es un algoritmo que mejora los resultados de calibración una vez que existen. – yxk

5

código de MATLAB de Pedro sería mucho más útil para usted que pienso:

http://www.csse.uwa.edu.au/~pk/research/matlabfns/

Pedro ha publicado una serie de soluciones de matriz fundamental. Los algoritmos originales fueron mencionados en el libro zisserman

http://www.amazon.com/exec/obidos/tg/detail/-/0521540518/qid=1126195435/sr=8-1/ref=pd_bbs_1/103-8055115-0657421?v=glance&s=books&n=507846

También, mientras que usted está en él no se olvide de ver la canción matriz fundamental:

http://danielwedge.com/fmatrix/

una composición bien en mi ¡opinión honesta!

Cuestiones relacionadas