Filtrage des homographies estimées RANSAC

10

J'utilise l' algorithme RANSAC pour l'estimation d'homographie entre des paires d'images prises avec des caméras qui n'ont pas de translation entre elles (rotation pure et changement d'échelle / zoom). Cela fonctionne bien dans la moitié des cas. La sortie correcte ressemble à ceci:

entrez la description de l'image ici

Les lignes rouges sont des correspondances filtrées et les quadrilatères illustrent comment l'homographie déforme la perspective.

Parfois, cependant, de nombreux mauvais cas se produisent, comme ceux-ci:

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

J'ai déjà un test simple dans la boucle RANSAC. Il fait un simple quadrilatère (un carré d'unité) et le transforme avec la transformation d'échantillon. Ensuite, il regarde si la transformation a conservé sa convexité.

Cependant, des grappes de quadrilatères concaves sortent.

Avez-vous une idée de comment tester correctement l'homographie, si elle se comporte "bien" et filtre les solutions incorrectes?

J'ai trouvé du code où ils testent qu'aucun des trois points transformés n'est colinéaire. Mais cela ne semble pas suffisant car il ne filtrera pas les deltoïdes et autres quadrilatères "invalides" ...

Libor
la source

Réponses:

4

Il y a un problème pour vérifier si l'homographie est correcte.

L'algorithme de vérification des homographies correctes peut intéresser quelqu'un, je vais donc l'écrire ici:

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

Problème plus ancien, corrigé dans l'algorithme ci-dessus:

J'ai trouvé le problème ici - ayant une certaine homographie, le test peut réussir pour un quadrilatère plus petit, mais pas pour le plus grand. C'est pourquoi certaines homographies «malades» sont passées.

Le carré vert représente une image source, l'orange est une image transformée. Comme vous pouvez le voir, celui de gauche est convexe, mais commence à se déformer lorsque la source est plus grande:

entrez la description de l'image ici

Enfin, une source encore plus grande donne un quadrilatère non conver:

entrez la description de l'image ici

(x,y,w)xyw

J'ai corrigé l'algorithme en conséquence.

Libor
la source
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\|

Voir Hartley et Zisserman - Géométrie à vues multiples sur la vision par ordinateur, chapitre 4.2 et en particulier 4.2.3 et l'équation (4.8).

buq2
la source
Les quadrilatères affichés sont juste mis dedans. Je suis sûr des correspondances car l'ajustement est très bon. J'ai utilisé l'algorithme DLT normalisé suggéré par Hartley & Zisserman, puis j'ai utilisé un raffinement itératif et une correspondance guidée comme vous l'avez mentionné.
Libor
Mais l'ajustement de l'homographie ne peut pas être aussi bon que dans la première image, il y a deux groupes de points: ceux de l'immeuble (qui sont probablement sur le même plan) et ceux sur les arbres (qui ne sont probablement même pas sur un même avion à l'intérieur de leur propre groupe). Êtes-vous sûr de ne pas vouloir utiliser la matrice fondamentale?
buq2
Les lignes relient les points correspondants et je les ai toutes vérifiées - lorsque les images sont alignées, elles se rencontrent toutes. Lorsque j'exclus les mauvaises paires d'images correspondantes, cela donne un joli panorama.
Libor
Les images sont faites à l'aide d'une caméra rotative, il peut donc sembler que les avions changent, mais comme les caméras tournent autour du centre optique, je suis presque sûr que l'homographie est estimée. Je peux même en calculer la distance focale et la matrice de rotation. Mais le problème est ailleurs, une bizarrerie dans mon logiciel que je dois trouver ...
Libor
Ahh, vous n'avez pas inclus l'information qu'il n'y a pas de traduction entre les caméras. Ensuite, vous avez raison et l'homographie décrit la transformation entre les images.
buq2