如何得到世界空间中2d点的射线方程

时间:2017-04-04 23:14:16

标签: python opencv 3d computer-vision

我希望得到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坐标,因此我有旋转矢量,过渡矢量,相机矩阵和失真系数。有人可以解释一下在世界空间中得到这个射线方程所必需的数学吗?

1 个答案:

答案 0 :(得分:1)

我会做什么。

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

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

对于线/光线equation,您的起点为(x0=0, y0=0, z0=0),另一点位于(x, y, z=1)

注意反向透视转换。

对于给定的相机矩阵: camera matrix

反向透视转换只是: reverse perspective transformation

关于帧坐标转换的注意事项:

对于给定的世界(或对象)3D点: world 3D coordinate

如果您知道相机姿势(例如使用solvePnP()),则您拥有转换矩阵cTw

cTw 2

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

transformation