我希望得到2D空间中(x, y)
点的世界空间射线方程。所以给定(x, y)
,id喜欢得到类似的东西:
(x, y, z) = (x0, y0, z0) + t*(a, b, c)
其中(x0, y0, z0)
和(a, b, c)
是我知道的向量。
我正在使用OpenCV中的solvePnP函数将3D模型转换为2D坐标,因此我有旋转矢量,过渡矢量,相机矩阵和失真系数。有人可以解释一下在世界空间中得到这个射线方程所必需的数学吗?
答案 0 :(得分:1)
我会做什么。
对于[u, v]
坐标中的2D图像点,取消分配2D坐标并应用反向透视变换。 OpenCV已经有一个函数undistortPoints()
可以做到这一点。
您将在标准化相机框架中获得3D坐标,即z=1
。
对于线/光线equation,您的起点为(x0=0, y0=0, z0=0)
,另一点位于(x, y, z=1)
。
注意反向透视转换。
关于帧坐标转换的注意事项:
如果您知道相机姿势(例如使用solvePnP()
),则您拥有转换矩阵:
计算相机框架中的3D坐标: