2012-06-15 16 views
21

Al usar la función findHomography de OpenCV para estimar una homografía entre dos conjuntos de puntos, desde diferentes imágenes, a veces obtendrá una mala homografía debido a valores atípicos dentro de sus puntos de entrada, incluso si usa RANSAC o LMEDS.¿Cómo se puede saber si una matriz de homografía es aceptable o no?

// opencv java example: 
Mat H = Calib3d.findHomography(src_points, dst_points, Calib3d.RANSAC, 10); 

¿Cómo se puede saber si la matriz 3x3 homografía resultante es aceptable o no?

He buscado una respuesta aquí en Stackoverflow y en Google y no he podido encontrarla.

me encontré con este artículo, pero es un poco críptico para mí:

"The geometric error for homographies"

+2

Ver pregunta http://stackoverflow.com/questions/10972438/detecting-garbage-homographies-from-findhomography-in-opencv/10981249#10981249 –

+0

si el movimiento de su cámara es limitado, podría intentar descomponer su homografía y escala de prueba, rotación y/o parámetros de traducción para valores drásticos. Otro método: si sabe (o toma la restricción) que las partes grandes de las imágenes se superponen, podría calcular la superposición después de deformar y decidir si podría ser una homografía obviamente falsa. Otro método: si usa RANSAC puede decidir a partir del número de inlier (y/o ratio inlier/total) si la homografía debería ser rechazada) – Micka

+0

@Micka gracias por su ayuda, ya estaba usando RANSAC, el movimiento de la cámara es no limitado y estaba buscando métodos para descartar homografías (principalmente matemáticas) antes de entrar en cómputos más pesados, como aplicar la homografía y verificar la superposición. –

Respuesta

22

La mejor manera de saber si la homografía es aceptable es.

1- Tome los puntos de una imagen y reproyecte utilizando la homografía calculada.

//for one 3D point, this would be the projection 
px' = H * px; 
py' = H * py; 
pz' = H * pz; 

2- Calcular el euclidean distance entre los puntos reproyectados y los puntos reales en la imagen.

Reprojection error por un punto. p es el punto proyectado yq es el punto real.

enter image description here

3- Establecer un umbral que decide si el error de reproyección es aceptable.

Por ejemplo, un error de más de un píxel no sería aceptable para muchas aplicaciones de seguimiento.

+11

Lo que sugiere es válido para el seguimiento, cuando sabe que es bastante probable que dos imágenes compartan un parche en ubicaciones similares. Cuando calcula una homografía entre dos imágenes diferentes para verificar si una imagen contiene la otra, el error de reproyección no es útil en absoluto. Por ejemplo, en mi caso, a menudo obtengo que muchos (~ 30) puntos de una imagen se mapean en el mismo punto (o pocos, puntos cercanos) en una segunda imagen. ¿Tienes alguna sugerencia para este caso? –

Cuestiones relacionadas