使用OpenCV中的摄像机校准参数将2D点投影到3D空间

时间:2013-10-30 10:27:16

标签: c++ opencv computer-vision linear-algebra projection-matrix

我使用calibrateCamera()获取相机参数,现在我有cameraMatrix,distCoeffs,rotationMatrix,transformMatrix。 使用这些矩阵,我可以构建投影矩阵并将空间中的3D对象点转换为2D图像点 有点像这样:

enter image description here

但我想要的是这个预测的反面。我想将这些2D点转换回3D空间。我知道我会丢失一些信息,但我所有的原始观点都在同一个计划中 请帮助我使用相机参数进行此转换来构建类似的矩阵。

1 个答案:

答案 0 :(得分:5)

从一组投影的2D点中,您无法恢复原始3D点,而是连接3D点的光线及其在图像平面中的投影。所以,你失去了3D点的深度;也就是说,你知道方向,但你没有从相机到3D点的距离。

你必须弥补3D点的深度。它们的平面条件允许您在它们的相对位置上做出一些约束,但它不足以检索它们的原始深度。

例如,您可以设置3个非共线点的深度,以在3D空间中创建平面。其他2D点的深度将由这些光线与这个新平面的交点给出。

如果您知道起始于3D点的平面的法向矢量,您可以通过设置单个2D点的深度并相应地计算其他点来做类似的事情。此外,只有当您拥有从该平面到原点(到相机)的距离时,您才能检索到3D点的真实深度。

相关问题