在计算机视觉中,用于从多幅图像中恢复场景中的三维结构和相机的运动状态的算法被称为“运动恢复结构”算法。SfM通过匹配点对,估计相邻两幅图像之间的相机运动。SfM算法有两种主流实现方式:全局SfM和增量SfM。全局SfM是一种基于所有输入图像的批量处理方法,即在处理所有图像之前,将它们全部读入内存中。全局SfM使用一组初始特征点来匹配图像,然后根据这些匹配点在关键所有图像中估计相机位姿,进而重建整个场景。相反,增量式SfM是一种逐个添加图像并根据添加的新图像更新三维场景的方法。它从一个初始图像开始,估计该图像的相机位姿和三维点,然后添加下一个图像并通过新的特征匹配来增加更多的三维点和相机姿态。增量式SfM在每个步骤中只考虑一张图像,可以处理更大的图像数据集,且具有更高的精度。因此,全局SfM更适合较小的图像集,因为它需要在内存中同时处理所有图像。另一方面,增量式SfM更适合于大规模的图像集,因为它可以一次处理一个图像,并且可以逐渐构建三维场景。考虑到本文重建的是大尺度大范围的三维场景,本文拟采用增量SfM完成场景结构重建,以提高重建精度.
图2-6显示了增量式SfM的过程。首先,对输入的图像序列进行特征提取,然后将这些特征进行匹配,找到在多个视角下共同出现的特征点。然后选择一个图像作为初始图像,对其进行初始的相机位姿估计,然后通过三角测量将这些视角下的匹配点转化为三维点坐标,形成初始的稀疏点云。然后选择下一个待处理的图像,并在之前计算的相机位姿的基础上,通过特征匹配和三角测量计算出新的三维点,随着图像数量的增加,场景的三维信息越来越完整。增量式SfM是一种逐步估计相机姿态和场景结构的方法,其处理方式是对于每个新的图像,只估计其相对于之前图像的姿态和场景点的位置。然而,这种处理方式也极可能会导致误差不断累积,从而降低三维重建的精度。因此,需要引入非线性优化方法对其进行优化,其中,光束法平差[59](BundleAdjustment,BA)就是一种常用的方法,它能够减少误差并提高估计的精度。
图2-7展示了SfM三维重建的稀疏点云。在图中,四棱锥的顶点表示相机
的光学中心,红色平面表示成像平面。