2016-06-29 4 views
1

J'utilise un GoPro HERO 4 sur un drone pour capturer des images qui doivent être géoréférencées. Idéalement, j'ai besoin de coordonnées des coins de l'image capturée par rapport au drone.Calcul des coordonnées d'une image aérienne oblique

J'ai la de l'appareil photo:

  1. Altitude
  2. champ horizontal et vertical de vue
  3. Rotation dans les 3 axes

j'ai trouvé quelques solutions, mais je ne peux » Je les traduis tout à fait à mes fins. Le plus proche que j'ai trouvé est ici https://photo.stackexchange.com/questions/56596/how-do-i-calculate-the-ground-footprint-of-an-aerial-camera mais je ne peux pas comprendre comment et si c'est possible pour moi de l'utiliser. Surtout quand je dois prendre en compte le tangage et le roulis.

Merci pour toute aide que je reçois. Edit: Je code mon logiciel en Java.

+0

Que voulez-vous dire les coordonnées des coins? Voulez-vous dire dans le plan focal/projection de la caméra, ou les quatre coins sur le sol comme dans la question? Si vous voulez dire ce dernier, c'est encore possible, mais il peut être plus efficace d'utiliser une approche vectorielle –

+0

Oui, je veux dire les quatre coins du sol définissant un trapèze. Voulez-vous dire que je devrais chercher les intersections de quatre "rayons" venant de la caméra avec le sol? –

+0

oui, vous devriez les calculer et faire un test d'intersection de plan de rayon standard. si vous deviez essayer de le faire en utilisant les fonctions trigonométriques comme dans le lien que vous avez donné ... eh bien, bonne chance. –

Répondre

2

Si vous avez des rotations dans les trois axes, vous pouvez utiliser ces matrices - http://planning.cs.uiuc.edu/node102.html - pour construire une matrice de rotation complète (3x3) pour votre caméra.

En supposant que, lorsque la matrice de rotation est une identité (par exemple dans le cadre de l'appareil photo) avoir défini les axes de la caméra à:

  • axe X pour l'avant
  • Y pour le côté (à gauche)
  • Z jusqu'à

Dans le cadre de la caméra, les rayons ont des directions:

enter image description here

Calculez ces directions et faites-les pivoter à l'aide de la matrice pour obtenir les axes du monde réel. Utilisez les coordonnées du monde réel de la caméra comme source.

Pour calculer les points sur le terrain: https://www.cs.princeton.edu/courses/archive/fall00/cs426/lectures/raycast/sld017.htm

+0

Merci beaucoup! –

+0

@MilanZelenka pas de problème. et encore une chose - vous devrez peut-être normaliser les vecteurs de rayon –

+0

Je viens de faire quelques tests pour vérifier les résultats de mes calculs et j'ai rencontré quelque chose dont je ne suis pas sûr. Je place la caméra vers le bas et les rayons ont des directions: (+ -tan (FOVv/2), + -tan (FOVh/2), -1). Maintenant, si je suis correct, l'angle entre le rayon inférieur gauche et le rayon supérieur droit devrait correspondre au champ de vision diagonal de la caméra, mais ce n'est pas le cas. Les spécifications de la caméra sont FOVh = 64,4, FOVv = 37,2 FOVd = 73,6. Les deux vecteurs sont (0,336,0,629, -1,0) et (-0,336, -0,629, -1.0). L'angle entre eux est de 71 degrés. Est-ce que j'ai râté quelque chose? La normalisation ne change pas les résultats. –