用R和t计算新的PixelCoordinates点

时间:2015-11-10 15:00:24

标签: opencv computer-vision camera-calibration 3d-reconstruction pose-estimation

我知道对于三维重建,你可以从两幅图像中获得除比例因子之外的所有内容。

但是你可以计算出第一幅图像中的一个点位于第二幅图像中的位置。比例因子在这里不应该有趣吗?!

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

sesorCheckPointNew = R * sensorCheckPoint + t;

我通过使用recoverPose()分解Essential Mat来获得R和t; 但是新点并没有出现在图像中。

有人能告诉我,我是否在想错?感谢

修改

我只知道checkPoint的像素坐标而不是真正的3d坐标

EDIT2

如果你知道R和t但不知道t的长度。应该可以假设两个图像中已知的点M的z1,然后得到结果t。对?然后应该可以重新计算第一张图像中位于第二张图像中的每个点。

然后

z2与t对应。但那么z2和t之间的依赖关系是什么?

enter image description here

enter image description here

enter image description here

EDIT3

如果我假设M1为z = 1。我从两幅图像中计算出R和t。然后我知道绿色是什么。因此,我需要求解这个线性方程式以得到s并获得真实的t。

我使用前两行两个解决两个变量。 但结果似乎并没有写出来。

方程式不正确吗?

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为你对几何学的理解很接近。

  

我不关心真正的3D系统。它只需要相对正确。这样我可以重新计算从第一张图像到第二张图像的任何点的位置?

第二张图像中的位置取决于第一张图像中点的实际3D位置。因此,您必须将像素物化为实际的3D点才能实现您想要的效果。没有深度信息,图像1中的像素可以是图像2中沿线的任何位置。

您计算sensorCheckPoint同质坐标。在此设置中,可以将这些坐标视为相机系统中的实际3D坐标(z = 1)。想象一下自己在那台相机上,向下看着Z.考虑从相机中心到此点的光线。既然你知道R和t,你也可以在世界空间中表达这条光线(通过一些心理健身来找到正确的变换)。此光线只是3D中的矢量。您可以对其进行标准化并将其乘以一个因子,以便在距离相机中心已知距离的任何地方找到3D点。

在世界空间中有一个实际的3D点后,您可以使用projectPoints()将其投影到另一个摄像机的图像平面上。

答案 1 :(得分:0)

是什么让你认为z = 1的一点必须在两个相机中都可见?