features2d opencv transform homography perspectivecamera projective-geometry

opencv - features2d - Diferencia entre matrices fundamentales, esenciales y de homografía



features2d opencv c++ (3)

Tengo dos imágenes que se toman desde diferentes posiciones. La segunda cámara se encuentra a la derecha, hacia arriba y hacia atrás con respecto a la 1ª cámara. Entonces, creo que hay una transformación de perspectiva entre las dos vistas y no solo una transformación afín, ya que las cámaras se encuentran a profundidades relativamente diferentes (¿ estoy en lo cierto? ). Tengo algunos puntos correspondientes entre las dos imágenes. Pienso en usar estos puntos correspondientes para determinar la transformación de cada píxel desde la primera hasta la segunda imagen.

Estoy confundido por las funciones findFundamentalMat y findFundamentalMat .... ambas devuelven la matriz de 3x3, ¿cuál es la diferencia entre las dos?

¿Hay alguna condición requerida / requisito previo para usarlos (cuándo usarlos)?

¿Cuál usar para transformar los puntos de la primera imagen a la segunda imagen? En las matrices 3x3 que devuelven las funciones, ¿incluyen la rotación y la traducción entre los dos marcos de imagen?

De wikipedia , llegó a saber que la matriz fundamental es una relación entre los puntos de imagen correspondientes. En una respuesta SO here , se dice que se requiere la Matriz E esencial para obtener los puntos correspondientes ... pero no tengo la matriz interna de la cámara para calcular E ..... Solo tengo las dos imágenes.

¿Cómo debo proceder para determinar el punto correspondiente? En espera de sugerencias ... Gracias


La matriz fundamental tiene la relación x''Fu = 0 con x en una imagen y u en la otra iff x y u son proyecciones del mismo punto 3d. También l = Fu define una línea ( lx ''= 0 ) donde el punto correspondiente de u debe estar activado, por lo que puede usarse para delimitar el espacio de búsqueda de las correspondencias.

Una Homografía mapea un punto en una proyección de un avión a otra proyección del plano. x = Hu


Solo hay dos casos en que la transformación entre dos vistas es una transformación proyectiva (es decir, una homografía): o la escena es plana o las dos vistas fueron generadas por una cámara que gira alrededor de su centro.


Sin ninguna suposición adicional en la geometría de la escena mundial, no se puede afirmar que haya una transformación proyectiva entre las dos vistas . Esto solo es cierto si la escena es plana. Una buena referencia sobre ese tema es el libro Multiple View Geometry en Computer Vision por Hartley y Zisserman.

Si la escena mundial no es plana, definitivamente no deberías usar la función findHomography. Puede usar la función findFundamentalMat, que le proporcionará una estimación de la matriz fundamental F. Esta matriz describe la geometría epipolar entre las dos vistas. Puede usar F para rectificar sus imágenes con el fin de aplicar algoritmos estéreo para determinar un mapa de correspondencia densa.

Supongo que está usando la expresión "transformación de perspectiva" para significar "transformación proyectiva". Según mi leal saber y entender, una transformación de perspectiva es una asignación de mundo a imagen , no una asignación de imagen a imagen.