计算3D世界点

Calculating 3D world point

我是 OpenCV 的初学者,我想从 2D(投影在图像上)找到 3D 点,并且已知一个点的三个世界坐标中的两个。

我有:

  1. 校准相机(已知:内在参数矩阵,畸变系数向量)
  2. 旋转矢量和平移矢量
  3. (u, v) - 图像上某个点的坐标
  4. 一个点的两个已知世界坐标和一个未知

问题变量 #1 已知:X, Y 未知:Z

问题变量 #2 已知:X, Z 未知:Y

问题变量 #3 已知:Y、Z 未知:X

如何找到第三个未知坐标?可能吗?

是的,这是可能的。考虑不存在非线性失真的简单情况。令 Ki 为相机矩阵的逆矩阵,相机中心位于世界原点(即无旋转或平移)。令 p=(u, v, 1) 为齐次像素坐标。那么通过该像素点的光线为:

s * P = Ki * p

其中 s > 0 是未知比例。但是 s * P = [X, Y, Z],所以如果你知道 X、Y 或 Z 中的任何一个,你就可以求解 s 并找到缺失的坐标。

对于非零旋转平移,将 Ki 替换为投影矩阵的逆矩阵。对于非零失真,用完整的重投影方程代替 Ki 的简单乘法。