2017-06-23 4 views
0

Je travaille sur une application AR où le marqueur est un objet 3D de forme complexe, donc j'essaie de faire un système de reconnaissance basé sur le cad. Pour autant que j'ai trouvé les principales étapes pour construire un modèle 3D à partir d'un ensemble d'images est: 1-pour parcourir les images et extraire leurs caractéristiques. 2-Effectuer un appariement par paire 3-calculer les points 3d, ainsi que leurs descripteurs et paramètres de caméra correspondants pour chaque image.Estimation en temps réel de pose d'un objet texturé

maintenant ma première question est comment dois-je déterminer le descripteur pour chaque point 3D, comme nous le savons le point 3d est extrait d'un ensemble de caractéristiques 2d similaires, ce qui signifie qu'il ya beaucoup de descripteurs similaires dont chacun correspond à un point 2d, alors lequel de ces descripteurs devrions-nous choisir? ils ne sont pas exactement les mêmes au lieu de différer légèrement les uns des autres.

mon autre question: basé sur ce tutoriel Real Time pose estimation of a textured object fourni par OpenCV, il est nécessaire que le modèle est au format .yaml et le maillage au format .ply. J'ai besoin de savoir comment stocker ma structure 3D dans ces types de fichiers? Y at-il des étapes ou des outils qui peuvent aider à le faire?

merci à l'avance

Répondre

1

réponse rapide, ce sont ce que vous avez besoin:

  • ont un modèle CAO de l'objet texturé
  • "apprendre" les points clés:
    • pour chaque "formation" des images, de détecter et de conserver les points-clés détectés sur l'image
    • pour chaque point-clé 2D, calculer le corre corres- objet 3D de coordonnées en utilisant le maillage CAO 3D et extraire le descripteur correspondant
    • enregistrer dans un fichier la liste des coordonnées d'objet 3D et la liste correspondante des descripteurs
  • pour détecter l'objet:
    • détecter les points-clés dans les images souhaitées
    • correspondent aux points clés actuels avec ceux enregistrés
    • estimation l'objet pose à l'aide d'une approche robuste (RANSAC) avec solvePnPRansac(): les points d'objet 3D sont les coo d'objets 3D rdinates enregistrés dans l'étape de formation, les points d'images 2D sont les coordonnées d'image 2D des points clés actuellement détectés et appariés

Le tutoriel devrait plus ou moins faire quelque chose de similaire.

La partie « délicate » devrait être de calculer les coordonnées de l'objet point 3D pour un point d'image 2D donnée et la caméra pose:

  • vous pouvez voir here comment il est fait dans le réel tutoriel OpenCV temps estimation de la pose d'un objet texturé

Ce que je ferais (peut être un peu différent que le code de tutoriel), pour un point d'image 2D (par exemple, un emplacement de keypoint):

  • transformer le point d'image en 2D à l'image de la caméra normalisée (z=1) en utilisant la matrice intrinsèque, voir undistortPoints()
  • test si le point d'image 2D courante appartient à l'objet ou non: intersection entre le rayon de l'image et le maillage triangulaire à la caméra actuelle pose (vous aurez besoin de le tester pour chaque triangle)
  • si le point d'image 2D actuelle appartient à l'objet, le point d'objet 3D correspondant (dans le cadre d'objet) peut être le point de la 3 la plus proche points qui forment le triangle ou vous pouvez calculer le point d'intersection entre le rayon de l'image et le triangle
+0

merci pour votre réponse! J'apprécie énormément si vous clarifiez cette étape "pour chaque point-clé 2D, calculez la coordonnée d'objet 3D correspondante en utilisant le maillage CAO 3D et extrayez le descripteur correspondant" pour moi et expliquez-le en détails –

+0

@ Lisa.s J'ai complété ma réponse . Malheureusement, ce sujet a besoin de quelques maths et je n'ai pas le temps de détailler plus ma réponse. Si vous voulez plus d'informations, voir transformation homogène pour savoir comment transformer un point 3D d'une image en une autre (c'est juste une multiplication matricielle à la fin), modèle de caméra perspective et géométrie pour l'intersection entre une ligne et un triangle. – Catree

+0

je vous remercie beaucoup pour ce grand effort –