La clave está en comprender los casos de homogeneización degenerada. No puede obtener una buena homografía si sus puntos son colineales o cercanos a colineales, por ejemplo. Además, los grandes cuadrados grises pueden indicar escalas extremas. Ambos casos pueden surgir del hecho de que hay muy pocos inliers en su cálculo de homografía final o que el mapeo es incorrecto.
Para asegurarse de que esto nunca ocurra:
1. Asegúrese de que los puntos estén bien separados en ambas imágenes.
2. Asegúrese de que haya al menos 10-30 correspondencias (4 es suficiente si el ruido es pequeño).
3. Asegúrese de que los puntos coincidan correctamente y que la transformación sea una homografía.
Para encontrar malas homografías, aplique H encontrado en sus puntos originales y vea la separación de sus puntos esperados que es |x2-H*x1| < Tdist
, donde Tdist
es su umbral para el error de distancia. Si solo hay unos pocos puntos que satisfagan este umbral, su homografía puede ser mala y probablemente haya violado uno de los requisitos mencionados anteriormente.
+1 para SVD ..... – Throwback1986
¿Alguien podría explicar 2.condición más? ¿Cómo puedo calcular SVD y verificar que la relación entre el primer y último valor singular es la correcta con OpenCV? – Tony
http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html#SVD pase NO_UV, ya que solo está interesado en los valores singulares. Luego calcule la relación (número de condición) del primer al último valor singular. Consulte también, para obtener una explicación del número de condición: http://books.google.com/books?id=1aAOdzK3FegC&pg=PA69&lpg=PA69&dq=numerical+recipes+condition+number&source=bl&ots=3iSoC8Hoqi&sig=Aq1Yc2MHTpXPI4t8wIhU7h388jg&hl=en&sa=X&ei=hUmKUaqeMemx0QXr -ICAAg & ved = 0CDMQ6AEwAA # v = onepage & q = numerical% 20recipes% 20condition% 20number & f = false –