主要内容

运动结构概述

运动结构(SfM)是从一组二维图像中估计场景的三维结构的过程。SfM用于许多应用程序,如3d扫描、增强现实和视觉同步定位和绘图(vSLAM)。

SfM可以用许多不同的方法计算。处理这个问题的方法取决于不同的因素,比如使用的相机的数量和类型,以及图像是否有序。如果用一台校准过的相机拍摄,则只能恢复三维结构和相机运动到规模到规模这意味着你可以重新调整结构和相机运动的幅度,同时仍然保持观察。例如,如果你把相机放在物体附近,你可以看到与放大物体并将相机移远时相同的图像。如果你想在世界单位中计算结构和运动的实际比例,你需要额外的信息,如:

  • 场景中物体的大小

  • 来自另一个传感器的信息,例如里程计。

从两种观点看运动中的结构

对于两个固定摄像机或一个移动摄像机的简单结构,一个视图必须考虑摄像机1和另一个摄像机2。在这种情况下,算法假设摄像机1在原点,其光轴沿z设在。

  1. SfM要求图像之间的点对应。通过从图像1到图像2的特征匹配或跟踪点找到对应的点。特征跟踪技术,如Kanade-Lucas-Tomasi (KLT)算法,在相机靠得很近时工作得很好。随着相机之间的距离越来越远,KLT算法失效,可以使用特征匹配。

    相机间距离(基线) 寻找点对应的方法 例子
    匹配功能使用matchFeatures 使用自动特征匹配查找图像旋转和比例
    狭窄的 跟踪功能使用愿景。PointTracker 基于KLT算法的人脸检测与跟踪

  2. 为了求出第二个相机相对于第一个相机的姿态,必须计算基本矩阵。使用前面步骤中找到的对应点进行计算。基本矩阵描述了两个摄像机的极线几何。它将一个摄像机中的一点与另一个摄像机中的极线联系起来。使用estimateFundamentalMatrix函数来估计基本矩阵。

  3. 输入基本矩阵到relativeCameraPose函数。relativeCameraPose返回第二个摄像机在第一个摄像机的坐标系中的方向和位置。位置只能按比例计算,所以两个摄像机之间的距离设置为1。换句话说,摄像机之间的距离定义为1个单位。

  4. 使用。确定匹配点的三维位置由三角形组成的.因为姿势符合比例,当你计算结构时,它有正确的形状,但不是实际的大小。

    由三角形组成的函数需要两个摄像机矩阵,可以使用它们进行计算cameraMatrix

  5. 使用pcshowpcplayer来展示重建后的景象。使用plotCamera来形象化摄像机的姿势。

为了恢复重建的规模,你需要更多的信息。一种恢复尺度的方法是在场景中检测出一个已知大小的物体。的运动中的结构,两种观点示例演示了如何通过在场景的点云中检测一个已知大小的球体来恢复尺度。

结构从多视图运动

对于大多数应用程序,如机器人和自动驾驶,SfM使用两个以上的视图。

两个视图中用于SfM的方法可以扩展为多个视图。用于SfM的多个视图集可以是有序的,也可以是无序的。这里采用的方法假设视图的顺序是有序的。来自多个视图的SfM需要跨多个图像的点对应,称为跟踪.一个典型的方法是根据成对的点对应来计算轨迹。您可以使用imageviewset管理双方的通信并找到轨道。每个轨迹对应着场景中的一个三维点。要从轨道上计算三维点,使用triangulateMultiview.三维点可以存储在worldpointset对象。的worldpointset对象还存储了跨摄像机视图的三维点与二维图像点之间的对应关系。

从两个视图使用SfM中的方法,你可以找到相机2相对于相机1的姿态。要将此方法扩展到多视图情况,请找到摄像机3相对于摄像机2的姿态,等等。相对位姿必须转换成一个共同的坐标系。通常情况下,所有相机的姿态都是相对于相机1进行计算的,这样所有的姿态都在同一个坐标系中。您可以使用imageviewset控制摄像机的姿势。的imageviewset对象存储视图和视图之间的连接。

从一个视角到下一个视角的每个相机姿态估计都存在误差。这些误差主要来自于图像中不精确的点定位、噪声匹配和不精确的标定。这些错误会随着视图数量的增加而累积,这种影响称为漂移.减少漂移的一种方法是改进相机的姿态和3-D点位置。非线性优化算法,称为束调整,由bundleAdjustment函数,可用于细化。您可以固定相机的姿态和完善只有三维点位置使用bundleAdjustmentMotion.你也可以调整相机的姿态,只使用3d的位置bundleAdjustmentStructure

另一种减少漂移的方法是使用构成图优化imageviewset对象。一旦检测到一个循环闭包,将新的连接添加到imageviewset对象,并使用optimizePoses函数用于优化受相对姿态约束的相机姿态。

运动中的结构,两种观点示例演示了如何从一个2-D视图序列重建3-D场景。示例使用相机校准器校准相机的应用程序,以获取视图。它使用一个imageviewset对象来存储和管理与每个视图关联的数据。

单目视觉同步定位与绘图示例演示了如何处理来自单目摄像机的图像数据,以建立一个室内环境的地图,并估计摄像机的运动。

另请参阅

应用程序

功能

对象

相关的话题