我正在寻找二维空间中(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)
。
注意有关反向透视变换。
对于给定的相机矩阵:
反向透视转换只是:
关于框架坐标变换的注意事项:
对于给定的世界(或物体)3D点:
如果您知道相机的姿势(例如使用solvePnP()
),则具有转换矩阵:
要计算相机框架中的3D坐标,请执行以下操作: