2016-02-21 3 views
0

Je travaille sur une application de suivi d'objet utilisant openCV. Je veux convertir les coordonnées de mes pixels en coordonnées mondiales pour obtenir des informations plus significatives. J'ai beaucoup lu sur le calcul de la matrice de transformation de perspective, et je connais cv2.solvePnP. Mais je pense que mon cas devrait être spécial, parce que je suis suivi d'un coureur sur une piste d'athlétisme avec la piste orthogonale à l'axe z de la caméra. Je vais mettre en place l'appareil photo pour assurer cela. Si je choisis deux points sur le bord de la piste, je peux calculer une conversion linéaire des pixels aux coordonnées mondiales à cette hauteur spécifique (niveau du sol) et à la distance de la caméra (c'est-à-dire le long de cette ligne). Puis je raisonne que le coureur courra sur une ligne parallèle à la piste à une hauteur différente et légèrement différente de la caméra, mais les lignes devraient toujours être parallèles dans l'image, car elles seront toutes les deux orthogonales à l'axe z de la caméra . Avec toutes ces contraintes, je pense que je n'aurais pas besoin du nombre normal de points pour suivre le coureur sur cet axe particulier. Mon instinct dit que 2-3 devrait être suffisant. Quelqu'un peut-il m'aider à clouer la méthode ici? Suis-je complètement hors piste? Avec la hauteur et la distance de la caméra essentiellement fixe, ne devrais-je pas être en mesure de travailler avec un ensemble de correspondances beaucoup plus petit?Projection de caméra pour des lignes orthogonales à l'axe z de la caméra

Merci, Bill

Répondre

0

, je crois avoir répondu à celui-ci moi-même. Il est vrai que seulement deux points de correspondance sont nécessaires compte tenu des hypothèses suivantes.

Supposons:

  1. coordonnées du monde sont mis en place avec l'axe X et l'axe Y parallèle au plan de masse. L'axe des X est parallèle à la piste. La caméra est translatée et éventuellement pivotée autour de l'axe X (inclinée vers le bas), mais pas de rotation autour de l'axe Y (plan de la caméra parallèle à la piste et axe X) ou de l'axe Z (caméra par rapport au sol)).

  2. Les paramètres intrinsèques de la caméra sont connus lors de l'étalonnage de la caméra.

Méthode:

  1. Choisir deux points dans le plan de masse avec des coordonnées connues dans le monde et de l'image. Par exemple, deux points sur le bord de la piste comme mentionné dans le message original. La ligne reliant les poitns aux coordonnées du monde ne doit pas être parallèle à l'axe X ou Z. Comme Y = 0 pour ces points, ignorez la deuxième colonne de la matrice de rotation/translation, en réduisant la projection à une transformée homographique planaire (matrice 3x3). Maintenant nous avons 9 degrés de liberté.

  2. Les hypothèses de rotation appliqueront une certaine forme sur la matrice de rotation/translation. A savoir, la première colonne et la première rangée seront l'identité (1,0,0). Cela réduit encore le nombre de degrés de liberté dans la matrice à 5.

  3. Contraindre les valeurs de la deuxième colonne de la matrice telle que cos^2 (thêta) + sin^2 (thêta) = 1. Cela réduit le nombre d'inconnues à seulement 4. Deux points de correspondance nous donneront les 4 équations dont nous avons besoin pour calculer la matrice d'homographie pour le plan de masse.Factoriser la matrice de paramètres intrinsèques de la caméra à partir de la matrice d'homographie, en laissant la matrice de rotation/translation pour le plan de masse. En raison des hypothèses de rotation faites précédemment, la colonne ignorée de la matrice de rotation/translation peut être facilement construite à partir de la troisième colonne de la même matrice, qui est la deuxième colonne dans la matrice d'homographie de plan de masse.

  4. Multiply arrière avec la caméra paramètres intrinsèques pour arriver à la matrice de projection universelle finale (à partir de seulement 2 points de correspondance!)

Mon implentation test a bien fonctionné. Bien sûr, il est sensible à l'exactitude des deux points de correspondance fournis, mais c'est un peu donné.