Estoy tratando de escribir algún código que calcule la matriz fundamental para determinar la relación entre las imágenes estéreo. Comencé con el libro de Hartley y Zisserman que la mayoría de la gente recomienda, pero no tenía ningún ejemplo práctico y el código de muestra estaba en MATLAB y no lo tengo. Luego cambié al An introduction to 3D Computer Vision Techniques and Algorithms que es más práctico y tiene ejemplos reales en él. Implementé el algoritmo de 8 puntos recomendado usando Python y numpy, pero estoy teniendo problemas para verificar su validez.Cómo calcular la matriz fundamental para la visión estéreo
Estoy usando el conjunto de datos listado en la página 48 (use ese enlace de arriba para ver un extracto de Google Books) de ese libro. Cuando normalizo los puntos, obtengo los mismos resultados que ese libro. Sin embargo, cuando se utiliza la función SVD de numpy para calcular la matriz fundamental, me sale el siguiente valor para F:
[[-0.01851684 -0.21631176 -0.67036356]
[ 0.2605251 -0.01023853 0.14234079]
[ 0.63748775 -0.09404508 -0.00220713]]
Esta matriz satisface la P_R ecuación ^* F * P_L = 0 por lo que parece correcto. Sin embargo, es muy diferente de la matriz calculada en el libro. Traté de doblar comprobar la respuesta usando cv.FindFundamentalMat de OpenCV() y me dieron una tercera respuesta:
[[ 22.98129082 271.46453857 853.74273682]
[-334.1673584 -4.84123087 -175.99523926]
[-809.88891602 125.99833679 1. ]]
No estoy cómo se calculan los otros dos matrices, pero no puedo encontrar ningún ejemplo de fundamental cálculo matricial en la web para verificar mi implementación del algoritmo de 8 puntos. El hecho de que mi implementación arroje un valor que satisfaga la ecuación me da confianza, pero me preocupa haber hecho algo tonto y es por eso que no puedo hacer coincidir los resultados en el libro o OpenCV.
¿comenzó con los puntos normalizados de su conjunto de datos o con los puntos originales para llegar a las dos matrices fundamentales anteriores? –