如何得到世界中二维点的射线方程 space

How to get the ray equation of a 2d point in world space

我正在寻找 2D space 中 (x, y) 点的世界 space 射线方程。所以给定 (x, y),id 喜欢得到这样的东西:

(x, y, z) = (x0, y0, z0) + t*(a, b, c)

其中 (x0, y0, z0)(a, b, c) 是我知道的向量。

我正在使用 OpenCV 中的 solvePnP 函数将 3D 模型转换为 2D 坐标,因此我有旋转矢量、过渡矢量、相机矩阵和畸变系数。有人可以解释一下在世界 space 中得到这个射线方程所需的数学吗?

这是我会做的。

对于[u, v]坐标中的二维图像点,取消扭曲二维坐标并应用反向透视变换。 OpenCV 已经有一个函数 undistortPoints() 可以做到这一点。

您将在标准化相机帧中获得 3D 坐标,即 z=1

对于线/射线 equation,您的起点在 (x0=0, y0=0, z0=0),另一个点在 (x, y, z=1)


关于反向透视变换的注意事项。

对于给定的相机矩阵:

反向透视变换就是:


坐标系变换注意事项:

对于给定的世界(或物体)3D 点:

如果你知道相机姿势(例如使用 solvePnP()),你就有变换矩阵 :

要计算相机框架中的 3D 坐标: