Je sais que vous pouvez calculer les homographies de l'image au plan de la caméra en utilisant des points de correspondance entre un "modèle parfait" et les points d'image.
Je le fais pour un terrain / terrain de football, et j'ai utilisé la détection des bords pour trouver les lignes blanches dans le terrain.
Mais la caméra ne couvre pas (toujours) tout le terrain, donc je ne peux pas voir tous les coins ... et moi seuls les coins sont des points 100% connus dans le modèle (pas d'autres points distingués).
Donc, le problème est qu'à moins que la ligne ne croise une autre ligne et forme un coin, je ne connais que les points d'image de la ligne, pas ses coordonnées "parfaites / réelles" correspondantes dans le modèle.
Existe-t-il un moyen d' utiliser les lignes détectées pour calculer une homographie, ou même simplement un ensemble d'homographies candidates , même si les lignes détectées ne se croisent pas et créent un coin?
Exemple d'image, montrant le terrain, notre champ de vision et les points du terrain où je peux connaître les coordonnées réelles du monde / modèle (cercles verts), et un exemple de 2 lignes qui pourraient être complètement inutiles car dans notre champ de vision , Je n'ai aucune idée exactement à quel point ils commencent ou s'arrêtent dans le monde réel / modèle correspondant du terrain:
Les lignes rouges sont des exemples de lignes que j'aimerais utiliser, mais je ne connais pas leurs coordonnées réelles, et c'est un peu difficile à estimer car selon la pose de la caméra, les points correspondants peuvent être "n'importe où".
la source
Réponses:
J'expliquerai deux approches pour cela:
1) Une approche nécessiterait un algorithme de correspondance de lignes. Après avoir fait correspondre les lignes, vous pouvez simplement utiliser les extrémités des lignes afin de calculer l'homographie. Pour y parvenir, des descripteurs basés sur EDLine ou LSD ont récemment été proposés dans OpenCV. De plus, leur hachage et leur correspondance rapide sont également implémentés. Découvrez les vidéos ici:
http://www.youtube.com/watch?v=MqMjvSkM39k
http://www.youtube.com/watch?v=naSWTlbg3To
Le récent référentiel opencv_contrib contient le code source de ces méthodes.
Dans le cas où les points de fin de ligne sont bruyants, vous pouvez alors utiliser directement les lignes pour calculer les homographies. Ces documents se liraient alors:
2) Il existe une méthode spécifique aux champs indiqués ici:
et
Sous cette forme, l'équation peut être directement connectée à la méthode DLT:
La seule différence est la normalisation, que vous trouverez dans les références ci-dessus.
Les références ci-dessus expliquent également comment insérer cette contrainte dans l'algorithme DLT.
En utilisant des ellipses et des lignes, il est possible de dériver une relation projective robuste.
la source
Si les lignes ne sont pas parallèles, vous pouvez calculer le point de leur intersection et l'utiliser comme point de référence. Dans votre peinture, vous pouvez également utiliser les points violets:
Soit dit en passant, l'intersection des lignes n'a pas besoin d'être dans l'image. Tant que les lignes sont parallèles
Si les lignes sont parallèles, vous pouvez les utiliser pour obtenir des contraintes supplémentaires. Par exemple, si vous avez N <4 points et K lignes, vous pourrez peut-être estimer la transformation
Rappelons que l'équation de la transformation projective est:
Il peut être réécrit comme:
Références supplémentaires " Estimation d'homographie par Elan Dubrovsky " - Voir partie 2.3.1, estimation d'homographie à partir de lignes.
la source