OpenCV实战(25)——3D场景重建
0. 前言
在《相机姿态估计》一节中,我们学习了如何在校准相机时恢复观察 3D
场景的相机的位置。算法应用了以下事实,即有时场景中可见的某些 3D
点的坐标可能是已知的。而如果能够从多个角度观察场景,即使没有关于 3D
场景的信息可用,也可以重建 3D
姿势和结构。在本节中,我们将使用不同视图中图像点之间的对应关系来推断 3D
信息,同时介绍一个新的数学实体用于校准相机的两个视图之间的关系,并将讨论三角测量的原理以便从 2D
图像重建 3D
点。
1. 重建 3D 场景
我们使用校准后的相机,拍摄两张场景照片,然后使用 SIFT
(Scale Invariant Feature Transform
) 检测器和描述符来匹配这两个视图之间的特征点。
相机的校准参数为我们在世界坐标系中的计算奠定了基础,需要在相机姿态和相应点的位置之间建立物理约束。我们引入了一个新的数学实体,本质矩阵 (essential matrix
),它基本矩阵的校准版本, cv::findEssentialMat
函数可用于计算本质矩阵,估计图像中的投影关系。
我们可以使用已建立的点对应调用 cv::findEssentialMat
函数,并通过随机抽样一致算法 (RANdom SAmple Consensus
, <