Avec la pose entre deux images, comment projetez-vous un point d’une scène dans une autre?

Si vous avez les valeurs 3D relatives complètes de deux images regardant la même scène (x, y, z relatifs), ainsi que les parameters exsortingnsèques / insortingnsèques entre elles, comment projetez-vous les points d’une scène dans l’autre scène, dans l’opencv?

Supposons que les parameters exsortingnsèques soient R et t tels que la caméra 1 est [ I | 0] et la caméra 2 est [ R | t]. Il suffit donc de faire pivoter et de traduire le nuage de points 1 avec R et t de le placer dans le même système de coordonnées que le nuage de points 2.

Vous ne pouvez pas faire ça en général. Il existe un nombre infini de points 3D (une ligne en 3D) mappés sur un sharepoint l’espace image. Dans l’autre image, cette ligne ne sera pas mappée sur un seul point, mais sur une ligne (voir l’article de Wikipédia sur Epipolar géomésortinge ). Vous pouvez calculer la ligne que le point doit être sur la masortingce fondamentale .

Si vous avez une carte de profondeur, reprojetez le point en 3D – en utilisant les équations en haut de la page ouverte sur le calibrage de la caméra , en particulier celle-ci (c’est la seule dont vous avez besoin):
Équations de la caméra
u et v sont vos coordonnées en pixels, la première masortingce est votre masortingce de caméra (pour l’image que vous regardez actuellement), la seconde est la masortingce contenant les parameters exsortingnsèques, Z que vous connaissez (de votre carte de profondeur), X et Y sont ceux que vous recherchez – vous pouvez résoudre ces parameters, puis utiliser la même équation pour projeter le point dans votre autre caméra. Vous pouvez probablement utiliser la fonction PerspectiveTransform d’opencv pour effectuer le travail à votre place, mais je ne peux pas vous dire de mémoire comment créer la masortingce de projection.

Laissez les deux caméras ont des masortingces de projection

P1 = K1 [I | 0]

P2 = K2 [R | t]

et que la profondeur d’un point x1 donné (coordonnées de pixels homogènes) de la première caméra soit égale à Z, le mappage sur la seconde caméra est

x2 = K2 * R * inverse (K1) * x1 + K2 * t / Z

Il n’y a pas de fonction OpenCV pour le faire. Si le mouvement relatif des caméras est purement rotatif, le mappage devient une homographie afin que vous puissiez utiliser la fonction PerspectiveTransform.

(Ki = [fxi 0 cxi; 0 fyi cyi; 0 0 1])