用 R 和 t 计算新的 PixelCoordinates 点

Calculate new PixelCoordinates Point with R and t

我知道对于 3d 重建,您可以从两个图像中获得除比例因子之外的所有内容。

但是你能计算出第一张图片中的一个点在第二张图片中的位置吗?比例因子在这里不应该很有趣吗?!

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; 但是新点甚至没有出现在图像中。

有人可以告诉我我的想法是否错误吗?谢谢

编辑

我只知道检查点的像素坐标,不知道真正的 3d 坐标

EDIT2

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

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

EDIT3

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

我使用前两行两次求解两个变量。 但是结果好像没有写。

方程式不对吗?

是什么让您认为 z=1 处的点在两个相机中都应该可见?

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

I don't care about the real 3D System. It only has to be relatively correct. So that I can recalculate the position of any point from the first image to the second images?

第二张图片中的位置将取决于第一张图片中点的实际 3D 位置。所以你真的必须将像素具体化为一个实际的 3D 点才能做你想做的事。在没有深度信息的情况下,图像 1 中的像素可以位于图像 2 中沿直线的任何位置。

您计算 sensorCheckPoint 齐次坐标。在此设置中,将这些坐标视为相机系统中的实际 3D 坐标(在 z=1 处)可能很有见地。想象你自己在那台相机前,向下看 Z。考虑从相机中心到这一点的光线。由于您知道 R 和 t,因此您也可以在 space 世界中表达这条射线(需要一些脑力训练才能找到正确的变换)。这条射线只是 3D 中的矢量。您可以对其进行归一化并将其乘以一个因子,以在距相机中心已知距离处沿这条射线的任何位置找到自己的 3D 点。

一旦你在世界中有了一个实际的 3D 点 space,你可以使用 projectPoints() 将它投影到另一个相机的图像平面上。