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函数将三维模型转换为二维坐标,所以我有旋转矢量、过渡矢量、相机矩阵和畸变系数。有人能解释一下在世界空间得到这个光线方程所需要的数学知识吗?
- 请澄清问题。这个二维点的参考系是什么?它与三维世界空间有什么关系?解释这个范例会从数学家那里得到更多的帮助。
- 二维点基本上是从相机检测到的点的(x,y)坐标。我想把这一点投射到三维世界中一个类似圆柱体的形状上。
- 为了做到这一点,我想得到点的光线方程,并对交点做数学运算。这有道理吗?对不起,我对这个有点陌生,如果我遗漏了什么,请告诉我。
- 越来越近了;谢谢。我认为(X0,Y0,Z0)是相机位置,(A,B,C)是从二维点导出的向量。相机的二维系统如何与世界空间对齐?我设想,摄像机将其视图解释为它位于一个单位半径的圆柱体的中心,这个圆柱体在后面某个看不见的点上被"拉开",并被压扁以提取伪卡特尔坐标。
- 例如,在2-D空间中,中心左侧约10度,虚拟视界上方约15度可以被视为点(-10,+15)。你想把它翻译成(X0,Y0,Z0)+T*(A,B,C)……其中a、b、c是-10和15(及其组合)的三角函数。
这就是我要做的。
对于[u, v]坐标中的二维图像点,取消二维坐标的畸变并应用反向透视变换。opencv已经有了一个这样做的函数undistortPoints()。
您将获得标准化相机帧中的三维坐标,这意味着在z=1处。
对于线/射线方程,有一个起点在(x0=0, y0=0, z0=0)处,另一个起点在(x, y, z=1)处。
注意反向透视转换。
对于给定的摄像机矩阵:
反向透视转换只是:
关于帧坐标转换的注意事项:
对于给定的世界(或对象)三维点:
如果你知道相机的姿势(例如使用solvePnP(),你就得到了变换矩阵:
要计算相机帧中的三维坐标: