我正在寻找二维空间中(x, y)点的世界空间射线方程。因此,给定(x, y),id会得到类似以下内容:

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

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

我在OpenCV中使用solvePnP函数将3D模型转换为2D坐标,因此我具有旋转 vector ,过渡 vector ,相机矩阵和失真系数。有人可以解释一下在世界空间中获得这个射线方程所必需的数学吗?

最佳答案

在这里我会做。

对于[u, v]坐标中的2D图像点,请取消扭曲2D坐标并应用反向透视变换。 OpenCV已经具有执行此操作的函数 undistortPoints()

您将在归一化的相机框架中获得3D坐标,即z=1

对于line / ray equation,您的起点是(x0=0, y0=0, z0=0),另一个点是(x, y, z=1)

注意有关反向透视变换。

对于给定的相机矩阵:
python - 如何获得世界空间中二维点的射线方程-LMLPHP

反向透视转换只是:
python - 如何获得世界空间中二维点的射线方程-LMLPHP

关于框架坐标变换的注意事项:

对于给定的世界(或物体)3D点:
python - 如何获得世界空间中二维点的射线方程-LMLPHP

如果您知道相机的姿势(例如使用solvePnP()),则具有转换矩阵python - 如何获得世界空间中二维点的射线方程-LMLPHP:

python - 如何获得世界空间中二维点的射线方程-LMLPHP

要计算相机框架中的3D坐标,请执行以下操作:

python - 如何获得世界空间中二维点的射线方程-LMLPHP

10-01 19:24
查看更多