Filtrado de homografías estimadas de RANSAC

10

Estoy usando el algoritmo RANSAC para la estimación de la homografía entre pares de imágenes tomadas con cámaras que no tienen ninguna traducción entre ellas (rotación pura y cambio de escala / zoom). Funciona bien en la mitad de los casos. La salida correcta se ve así:

ingrese la descripción de la imagen aquí

Las líneas rojas son correspondencias filtradas y los cuadriláteros ilustran cómo la homografía distorsiona la perspectiva.

A veces, sin embargo, ocurren muchos casos graves, como estos:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Ya tengo una prueba simple en el bucle RANSAC. Forma un cuadrilátero simple (una unidad cuadrada) y lo transforma con la muestra de transformación. Luego se ve si la transformación mantuvo su convexidad.

Aún así, sin embargo, salen racimos de cuadriláteros cóncavos.

¿Tiene alguna idea de cómo probar adecuadamente la homografía, si se comporta "bien" y filtra las soluciones incorrectas?

Encontré un código donde prueban que ninguno de los tres puntos transformados son colineales. Pero esto no parece suficiente, ya que no filtrará los deltoides y otros cuadriláteros "inválidos" ...

Libor
fuente

Respuestas:

4

Hay un problema al verificar si la homografía está bien.

El algoritmo para verificar las homografías correctas puede interesar a alguien, así que lo escribiré aquí:

ABDC

A:(w/2,h/2,1.0)B:(w/2,h/2,1.0)C:(w/2,h/2,1.0)D:(w/2,h/2,1.0)

w,h

ABDCC=HC

uv

d1:A+(DA)s=A+usd2:B+(CB)t=B+vt

d1=d2

t=1d[(ByAy)ux(BxAx)uy]

s=1d[(AxBx)vy(AyBy)vx]

s,t(0,1)

s,t(λ,1.0λ)λ=0.01

Problema anterior, solucionado en el algoritmo anterior:

Encontré el problema aquí: al tener cierta homografía, la prueba puede pasar para un cuadrilátero más pequeño, pero no para el más grande. Esta es la razón por la que pasaron algunas homografías "enfermas".

El cuadrado verde representa una imagen de origen, el naranja es uno transformado. Como puede ver, el de la izquierda es convexo, pero comienza a deformarse a medida que la fuente es más grande:

ingrese la descripción de la imagen aquí

Finalmente, una fuente aún mayor produce un cuadrilátero no convergente:

ingrese la descripción de la imagen aquí

(x,y,w)xyw

He corregido el algoritmo en consecuencia.

Libor
fuente
1

x_i \sim Hx_i^'\sum_{j=1\dots n}\|x_j - Hx_j^'\|H^'x^' = H^'x\sum_{j=1\dots n}\|x_j - Hx_j^'\| + \|x_j^' - H^'x\|

Vea Hartley y Zisserman - Geometría de vista múltiple en visión artificial capítulo 4.2 y especialmente 4.2.3 y ecuación (4.8).

buq2
fuente
Los cuadriláteros mostrados simplemente se ponen allí. Estoy seguro de las correspondencias ya que el ajuste es muy bueno. Utilicé el algoritmo DLT normalizado sugerido por Hartley & Zisserman y luego utilicé el refinamiento iterativo y el emparejamiento guiado como mencionaste.
Libor
Pero el ajuste de la homografía no puede ser tan bueno como en la primera imagen hay dos grupos de puntos: unos en el edificio de apartamentos (que probablemente están en el mismo plano) y los que están en los árboles (que probablemente ni siquiera están en un mismo plano dentro de su propio grupo). ¿Estás seguro de que no querías usar una matriz fundamental?
buq2
Las líneas conectan los puntos correspondientes y los revisé todos: cuando las imágenes están alineadas, todas se encuentran. Cuando excluyo los pares de imágenes de mala coincidencia, se obtiene un panorama agradable.
Libor
Las imágenes están hechas con una cámara giratoria, por lo que puede parecer que los planos cambian, pero dado que las cámaras giran alrededor del centro óptico, estoy bastante seguro de que se estima una homografía. Incluso puedo calcular la longitud focal y la matriz de rotación a partir de ella. Pero el problema está en otro lugar, una peculiaridad en mi software que tengo que encontrar ...
Libor
Ahh, no incluiste la información de que no hay traducción entre las cámaras. Entonces tienes razón y la homografía describe la transformación entre las imágenes.
buq2