关于python:如何得到世界空间中二维点的光线方程

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

我想得到二维空间中一个(x, y)点的世界空间射线方程。因此,考虑到(x, y),我想得到如下内容:

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

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

我使用opencv中的solvepnp函数将三维模型转换为二维坐标,所以我有旋转矢量、过渡矢量、相机矩阵和畸变系数。有人能解释一下在世界空间得到这个光线方程所需要的数学知识吗?


这就是我要做的。

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

您将获得标准化相机帧中的三维坐标,这意味着在z=1处。

对于线/射线方程,有一个起点在(x0=0, y0=0, z0=0)处,另一个起点在(x, y, z=1)处。

注意反向透视转换。

对于给定的摄像机矩阵:camera matrix

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

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

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

如果你知道相机的姿势(例如使用solvePnP(),你就得到了变换矩阵cTw

cTw 2

要计算相机帧中的三维坐标:

transformation