J'ai une caméra fixe avec connu cameraMatrix
et distCoeffs
. J'ai également un échiquier qui est fixe aussi, transform
et le rotation
vecteur est également calculé en utilisant solvePnP
.
Je me demande comment est possible d'obtenir l'emplacement 3D d'un point 2D sur le même plan que l'échiquier, comme l'image ci-dessous:
Une chose est sûre, c'est que le Z de ce point est 0, mais comment obtenir X et Y de ce point.
Réponses:
Vous pouvez résoudre ce problème en 3 étapes simples:
Étape 1:
Calculez le vecteur de direction 3D, exprimé dans le cadre de coordonnées de la caméra, du rayon correspondant au point d'image 2D donné en inversant le modèle de projection de la caméra:
Étape 2:
Calculez la direction 3D du vecteur de ce rayon dans le cadre de coordonnées attaché à l'échiquier, en utilisant la pose relative entre la caméra et l'échiquier:
Étape 3:
Trouvez le point 3D souhaité en calculant l'intersection entre le rayon 3D et le plan de l'échiquier avec Z = 0:
la source
Depuis votre cas limité aux plaines, le moyen le plus simple est d'utiliser l'homographie.
Déformez d' abord votre image. Utilisez ensuite findHomography pour calculer la matrice d'homographie qui transforme vos coordonnées de pixel (image) en coordonnées réelles (espace euclidien, par exemple en cm). Quelque chose de similaire à celui-ci:
la source