0

Je souhaite projeter un point dans l'espace 3D en coordonnées 2D. J'ai les intrinsèques calibrés et les extrinsèques de la caméra que j'utilise. J'ai la matrice de la caméra K et les coefficients de distorsion D. Cependant, je veux que les coordonnées de l'image projetée soient de l'image non déformée. D'après mes recherches, j'ai trouvé deux façons de le faire.Cohérence des points saillants sur une image non déformée

  1. fonction Utilisation de opencv getOptimalNewCameraMatrix pour calculer la matrice de la caméra d'une nouvelle image non déformée K ». Ensuite, utilisez ce K 'dans la fonction projectPoints d'opencv, avec les paramètres de distorsion réglés sur 0, pour obtenir le point projeté.

  2. Utilisez la fonction projectPoints en utilisant la matrice de caméra brute K, avec les coefficients de distorsion D dans cette fonction et obtenez le point projeté.

La sortie des deux méthodes doit-elle correspondre?

+0

quoi de neuf? ça aide? – nkint

Répondre

2

Je pense qu'il y a quelque chose qui manque dans votre pensée.

Matrice de caméra K et dist. coefficient D sont les paramètres pour faire la distorsion (si votre objectif déforme l'image comme dans un fisheye). Ils sont ce qu'on appelle les paramètres intrinsèques de la caméra. Si nous changeons des termes de la vision par ordinateur à l'infographie, ces paramètres sont ceux que vous utilisez pour définir le tronc de la vue, et, par exemple, ils sont utilisés pour obtenir la distance focale de la caméra.

Mais ils ne suffisent pas pour faire la projection.

Pour la projection, si vous pensez dans un terme d'infographie (comme opengl, par exemple) vous devez avoir la matrice modèle-vue-projection. La matrice du modèle est la matrice qui spécifie la position de l'objet dans le monde. La matrice de vue spécifie la position de la caméra, et la matrice de projection spécifie le tronc (angle focal, distorsion de perspective, etc.). Si vous voulez savoir comment transformer les points du modèle de 3d en 2D (ou viceversa), vous avez besoin des matrices de projection et de vue (vous avez la matrice du modèle parce que vous avez les points 3d à partir desquels vous voulez début). Et en vision par ordinateur, la matrice de vue est appelée paramètres estrinsiques. Donc, vous avez aussi besoin des paramètres estrinsiques, qui sont la position de la caméra dans le monde. C'est, par exemple, ces paramètres sont les rvec et tvec besoins cv:: projectPoints. Si vous voulez les calculer, ce sont exactement les résultats de cv::solvePnP qui font le contraire de ce que vous voulez faire: de quelques points 3d connus couplés avec la projection 2d connue sur eux sur l'écran de la caméra, cette fonction donne vous les paramètres estrinsic (à partir de laquelle vous pouvez obtenir la matrice de vue pour une application opengl-opencv-augmentée-réalité-quelle que soit l'application via cv::Rodrigues).

Dernière remarque: alors que les paramètres intrinsèques sont fixés dans toutes les images que vous photographiez avec une caméra (bien que vous ne changiez pas la focale bien sûr), les paramètres estrinisc changent chaque fois que vous déplacez l'appareil photo pour prendre une nouvelle image à partir d'un point de vue différent (c'est-à-dire: cela change le point de vue en perspective, donc la projection 3D-2D que vous voulez trouver)

L'espoir pourrait aider!

Questions connexes