Estimation pas à pas de la position de la caméra pour le suivi visuel et les marqueurs planaires

21

Je travaille sur le sujet de estimation de la pose caméra pour les applications de réalité augmentée et de suivi visuel depuis un certain temps et je pense que bien qu'il y ait beaucoup d'informations détaillées sur la tâche, il y a encore beaucoup de confusions et de malentendus.

Je pense que les questions suivantes méritent une réponse détaillée étape par étape.

  • Que sont les intrinsèques de la caméra?
  • Que sont les extrinsèques de caméra?
  • Comment calculer l'homographie à partir d'un marqueur planaire?
  • Si j'ai une homographie, comment puis-je faire poser la caméra?
Jav_Rock
la source
Je suis flou sur la renormalisation que vous faites: 1. H est l'homographie trouvée à partir des données en utilisant une procédure (disons SVD). 2. inv (K) * H = A est la chose avec laquelle vous travaillez ici. Ensuite, vous faites q1 = a1 / norm (a1) et q2 = a2 / norm (a2) comme colonnes orthonormales d'une matrice de rotation, et vous faites q3 = q1xq2 ... Ensuite, vous prenez t / (quelque chose) pour obtenir le vecteur de traduction. Comment pouvez-vous simplement diviser q1 et q2 par des choses éventuellement différentes, et comment choisissez-vous par quoi t diviser? Ou est l'idée que la procédure SVD et la multiplication par inv (K) donnent quelque chose de proche mais pas tout à fait une matrice de rotation orthogonale / orthonormale, donc th
user2600616
Mais comment pourrais-je obtenir un point 3D (X, Y, 1)?
waschbaer

Réponses:

19

Il est important de comprendre que le seul problème ici est d'obtenir les paramètres extrinsèques. Les caractéristiques intrinsèques des caméras peuvent être mesurées hors ligne et il existe de nombreuses applications à cet effet.

Que sont les intrinsèques de la caméra?

Paramètres intrinsèques de l' appareil photo est généralement appelé la matrice d'étalonnage de la caméra, . Nous pouvons écrireK

K=[αusu00αvv0001]

  • et α v sont le facteur d'échelle dans lesdirections des coordonnées u et v et sont proportionnels à la distance focale f de la caméra: α u = k u f et α v = k v f . k u et k v sont le nombre de pixels par unité de distance dans lesdirections u et v .αuαvuvfαu=kufαv=kvfkukvuv

  • est appelé le point principal, généralement les coordonnées du centre de l'image.c=[u0,v0]T

  • est le biais, seulement non nul si u et v ne sont pas perpendiculaires.suv

Une caméra est calibrée lorsque les caractéristiques intrinsèques sont connues. Cela peut être fait facilement, de sorte qu'il ne s'agit pas d'un objectif en vision par ordinateur, mais d'une étape triviale hors ligne.

Que sont les extrinsèques de caméra?

Extrinsèque de la caméra ou paramètres externes est une matrice 3 × 4 qui correspond à la transformation euclidienne d'un système de coordonnées universelles au système de coordonnées de la caméra. R représente une matrice de rotation 3 × 3 et t[R|t]3×4R3×3t une translation.

Les applications de vision par ordinateur se concentrent sur l'estimation de cette matrice.

[R|t]=[R11R12R13TxR21R22R23TyR31R32R33Tz]

Comment calculer l'homographie à partir d'un marqueur planaire?

L'homographie est une matrice homogène qui relie un plan 3D et sa projection d'image. Si nous avons un plan Z = 0, l'homographie H qui mappe un point M = ( X , Y , 0 ) T sur ce plan et son point 2D correspondant m sous la projection P = K [ R | t ] est3×3Z=0HM=(X,Y,0)TmP=K[R|t]

m~=K[R1R2R3t][XY01]

=K[R1R2t][XY1]

H=K[R1R2t]

Pour calculer l'homographie, nous avons besoin de paires de points caméra du monde. Si nous avons un marqueur planaire, nous pouvons en traiter une image pour extraire des entités, puis détecter ces entités dans la scène pour obtenir des correspondances.

Nous avons juste besoin de 4 paires pour calculer l'homographie en utilisant la transformation linéaire directe.

Si j'ai une homographie, comment puis-je faire poser la caméra?

HK[R|t]H1H2R1R2R3[R|t]

R3=R1R2

[R|t]

Jav_Rock
la source
4
Je pense qu'il est trompeur de dire que l'étalonnage est "facile et non le but du CV". Dans le cas habituel, nous devons également estimer les paramètres de distorsion. Au lieu de l'auto-étalonnage, je recommanderais l'étalonnage planaire (Zhang - Une nouvelle technique flexible pour l'étalonnage de la caméra) car il est plus flexible si une procédure d'étalonnage séparée peut être effectuée. Vous avez également une petite erreur dans "Si j'ai une homographie, comment puis-je faire poser la caméra?" car vous ne prenez pas en compte l'étalonnage (H_ {calib} = K ^ -1H).
buq2
3
la pose de caméra de l'homographie est fausse. Il y a plusieurs façons de le faire «certains d'entre eux sont très simples.
mirror2image
Je ne vois pas pourquoi c'est mal. Je le calcule de cette façon et fonctionne. Pourquoi dites-vous que c'est mal?
Jav_Rock
3
Vous avez écrit dans la dernière section que H ^ 1 et R ^ 1 et égal, mais dans la troisième section, vous dites que H = K [RT] ce qui signifierait que R ^ 1 est en fait K ^ -1H ^ 1. Mais ce n'est pas strictement vrai car il existe un nombre infini de H qui satisfera les équations et causera des problèmes lors de la résolution de R ^ 1, R ^ 2 et T (l'échelle inconnue). Votre réponse ne tient pas compte de l'étalonnage intrinsèque et de la distorsion robuste et certaines équations sont erronées, raison pour laquelle ce n'est pas une bonne réponse à la question.
buq2
Oui, il me manquait la matrice de kalibration à l'étape trois car je l'ai prise dans mon code et je multiplie par K dans une fonction différente des codes.
Jav_Rock
3

Tout en expliquant très bien le cas bidimensionnel, la réponse proposée par Jav_Rock ne fournit pas de solution valable pour les poses de caméras dans un espace tridimensionnel. Notez que pour ce problème, plusieurs solutions possibles existent.

Cet article fournit des formules fermées pour décomposer l'homographie, mais les formules sont quelque peu complexes.

OpenCV 3 implémente déjà exactement cette décomposition ( decomposeHomographyMat ). Étant donné une homographie et une matrice intrinsèque correctement mise à l'échelle, la fonction fournit un ensemble de quatre rotations et traductions possibles.

Dans ce cas, la matrice intrinsèque doit être donnée en unités de pixels, ce qui signifie que votre point principal est généralement (imageWidth / 2, imageHeight / 2)et votre distance focale est généralement focalLengthInMM / sensorWidthInMM * imageHeight.

Emiswelt
la source
Qu'est-ce qu'une matrice intrinsèque correctement mise à l'échelle?
Guig
1
J'ai mis à jour ma réponse. Veuillez voir ci-dessus.
Emiswelt
Hé @Emiswelt, n'est-ce pas la distance focale focalLengthInMM / sensorWidthInMM * imageWidth? Pourquoi choisissez-vous plutôt la hauteur?
El Marce