opencv - warpperspective - homographies python
¿Detectando homografías de basura de findHomography en OpenCV? (3)
Comprender los casos de homografía degenerada es la clave. No puede obtener una buena homografía si sus puntos son colineales o están cerca de ser colineales, por ejemplo. Además, los cuadrados grises enormes pueden indicar una escala extrema. Ambos casos pueden surgir del hecho de que hay muy pocos inliers en el cálculo de su homografía final o la asignación es incorrecta.
Para asegurarse de que esto nunca suceda:
1. Asegúrese de que los puntos estén bien esparcidos 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 a sus puntos originales y vea la separación de sus puntos esperados que es |x2-H*x1| < Tdist
|x2-H*x1| < Tdist
, donde Tdist
es su umbral para el error de distancia. Si solo hay algunos puntos que satisfacen este umbral, su homografía puede ser mala y probablemente violó uno de los requisitos mencionados anteriormente.
Estoy usando findHomography
en una lista de puntos y enviando el resultado a warpPerspective
.
El problema es que a veces el resultado es una basura completa y la imagen resultante está representada por extraños rectángulos grises.
¿Cómo puedo detectar cuando findHomography
me envía malos resultados?
Hay varias pruebas de cordura que puedes realizar en la salida. Encima de mi cabeza
- Calcule el determinante de la homografía y vea si está demasiado cerca de cero para su comodidad.
- Aún mejor, calcule su SVD y verifique que la relación del valor singular primero a último sea sana (no demasiado alta). Cualquiera de los resultados le dirá si la matriz está cerca de singular.
- Calcule las imágenes de las esquinas de la imagen y de su centro (es decir, los puntos que obtiene al aplicar la homografía a esas esquinas y al centro), y verifique que tengan sentido, es decir, estén dentro del lienzo de la imagen (si espera que estén )? ¿Están bien separados unos de otros?
- Grafique en matlab / octava los puntos de salida (datos) a los que ajustó la homografía, junto con sus valores calculados a partir de los de entrada, utilizando la homografía, y verifique que estén cerca (es decir, el error es bajo).
Un error común que conduce a resultados de basura es el ordenamiento incorrecto de las listas de puntos de entrada y salida, lo que hace que la rutina de ajuste funcione con correspondencias erróneas. Compruebe que sus índices son correctos.
Pero esto depende de las correspondencias de puntos que utilice para calcular la homografía ... Solo piense que está tratando de encontrar una transformación que asigne líneas a líneas (de un plano a otro), por lo que no será posible ninguna configuración posible de correspondencias de puntos. Te doy una homografía que crea bonitas imágenes. Incluso es posible que la homografía mapee algunos de los puntos al infinito.