0

Je sais que pour une reconstruction 3D, vous pouvez obtenir tout sauf le facteur d'échelle de deux images.Calculer un nouveau point PixelCoordinates avec R et t

Mais pouvez-vous calculer où un point des premières images se trouve dans les secondes images. Le facteur d'échelle ne devrait pas être intéressant ici ?!

sensorCheckPoint.x = (pixelCheckPoint.x - principlePoint.x)/focal; 
sensorCheckPoint.y = (pixelCheckPoint.y - principlePoint.y)/focal; 
sensorCheckPoint.z = 1; 

sesorCheckPointNew = R * sensorCheckPoint + t; 

J'ai obtenu R et t en décomposant le tapis essentiel avec recoverPose(); Mais le nouveau point n'est même pas assis dans l'image.

Quelqu'un pourrait-il me dire si je me trompe? Merci

EDIT

Je ne sais coordonne le pixel du CHECKPOINT pas le vrai coordonnées 3D

EDIT2

Si vous connaissez R et T, mais pas la longueur de t. Il devrait être possible de supposer z1 pour un point M connu dans les deux images, puis obtenir le t résultant. Droite? Ensuite, il devrait être possible de recalculer pour chaque point de la première image où il se trouve dans la seconde. Z2 est alors en correspondance avec t. Mais quelle est alors la dépendance entre z2 et t?

enter image description here

enter image description here

enter image description here

EDIT3

Si je suppose que z = 1 pour M1. Et je calcule R et t à partir des deux images. Alors je sais tout ce qu'est le vert. Par conséquent, j'ai besoin de résoudre ces équations linéaires pour obtenir s et obtenir le vrai t. J'utilise les deux premières lignes deux résoudre les deux variables. Mais le résultat ne semble pas écrire.

L'équation est-elle incorrecte?

enter image description here

+0

Le contenu de https://en.wikipedia.org/wiki/Epipolar_geometry vous est-il déjà familier? – Rethunk

+0

Oui, je sais que vous ne pouvez obtenir une ligne d'epi qu'à partir d'un point correspondant de la première image. Mais je pensais que peut-être que si vous ne vous souciez pas des coordonnées 3D et que vous voulez juste savoir où se trouve le nouveau pixelcoord il y aurait une possibilité – user3077796

Répondre

1

Je pense que vous êtes proche de votre compréhension de la géométrie.

Je ne me soucie pas du vrai système 3D. Cela doit seulement être relativement correct. Alors que je peux recalculer la position de n'importe quel point de la première image à la deuxième image?

La position dans la deuxième image dépend de la position 3D réelle du point dans la première image. Donc, vous devez vraiment matérialiser le pixel dans un point 3D réel pour faire ce que vous voulez. Sans informations de profondeur, le pixel de l'image 1 peut se trouver n'importe où sur une ligne de l'image 2.

Vous calculez sensorCheckPoint les coordonnées homogènes. Dans ce cas, il peut être intéressant de voir ces coordonnées comme des coordonnées 3D réelles dans le système de la caméra (en z = 1). Imaginez-vous devant cette caméra, en regardant Z. Considérez le rayon qui va du centre de la caméra à ce point. Puisque vous connaissez R et t, vous pouvez aussi exprimer ce rayon dans l'espace du monde (avec un peu de gymnastique mentale pour trouver la bonne transformation). Ce rayon n'est qu'un vecteur en 3D. Vous pouvez le normaliser et le multiplier par un facteur pour trouver vous-même des points 3D n'importe où le long de ce rayon à une distance connue du centre de la caméra. Une fois que vous avez un point 3D réel dans l'espace monde, vous pouvez utiliser projectPoints() pour le projeter sur le plan image de l'autre caméra.

+0

Je ne suis pas complètement sûr si j'ai écrit ce que vous voulez dire. Par conséquent j'ai noté la formule ce que je pense avoir obtenu. Mais j'ai toujours un problème. – user3077796

+0

Merci cela a fonctionné maintenant !! L'équation dans EDIT 3 est correcte. Mais j'ai oublié sur un site de l'équation la matrice de la caméra. Par conséquent, le résultat ne pourrait pas être juste. – user3077796

0

Et ce qui vous fait penser qu'un point z = 1 doit nécessairement être visible dans les deux caméras?

+0

J'ai essayé de faire le senosrcoord en coordonnées homogènes normalisées. N'y a-t-il pas z = 1? – user3077796

+0

Je vous suggère de visualiser ce que votre R et t vous disent. –

+0

Je pense que mon R calculé est correct: je vérifie avec une rotation connue de 30 ° (mesurée avec un trépied) et j'ai obtenu environ 28 °. Donc je pense que mon vektor sera correct aussi. Mais oui je ne connais pas la longueur du vecteur. Comment puis-je choisir le bon si je ne me soucie pas du vrai système 3D. Cela doit seulement être relativement correct. Alors que je peux recalculer la position de n'importe quel point de la première image à la deuxième image? – user3077796