文档

运动构造

基于运动的结构(SfM)是从一组二维图像中估计场景的三维结构的过程。SfM被用于许多应用,如三维扫描和增强现实。

SfM可以用许多不同的方法来计算。处理问题的方式取决于不同的因素,例如所使用的相机的数量和类型,以及图像是否有序。如果图像是用单个校准的相机拍摄的,那么3d结构和相机运动只能恢复达到标准达到标准这意味着你可以重新调整结构和相机运动的大小,仍然保持观察。例如,如果你把相机靠近一个物体,你可以看到同样的图像,当你把物体放大,把相机移远。如果你想用世界单位计算结构和运动的实际比例,你需要额外的信息,比如:

  • 场景中对象的大小

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

结构从运动从两个视图

对于两个静止摄像机或一个移动摄像机的结构的简单情况,必须考虑一个视图为摄像机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. 使用pcshow显示重建,并使用plotCamera让相机的姿势形象化。

为了恢复重建的规模,您需要额外的信息。一种恢复尺度的方法是检测场景中已知大小的物体。的结构从运动从两个视图示例展示了如何通过检测场景点云中已知大小的球体来恢复比例。

结构从运动从多个视图

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

用于从两个视图进行SfM的方法可以扩展到多个视图。用于SfM的多个视图集可以是有序的,也可以是无序的。这里采用的方法假定视图序列是有序的。来自多个视图的SfM需要多个图像之间的点对应,称为跟踪.一种典型的方法是从成对点对应中计算轨迹。你可以用viewSet管理成对的对应并找到轨迹。每个轨道对应于场景中的一个3d点。要从轨道计算三维点,使用triangulateMultiview

使用SfM中的方法从两个视图,你可以找到相机2相对于相机1的姿势。要将此方法扩展到多视图情况,请找到相机3相对于相机2的姿态,以此类推。相对位姿必须转换成一个共同的坐标系。通常,所有相机的姿势都是相对于相机1计算的,所以所有的姿势都在同一个坐标系中。你可以用viewSet管理相机姿势。的viewSet对象存储视图和视图之间的连接。

从一个视图到下一个视图的每个相机姿态估计都包含错误。误差主要来源于图像中点定位不精确、匹配噪声和标定不精确。这些错误随着视图数量的增加而累积,这种效应称为漂移.减少漂移的一种方法是改进相机姿势和3-D点位置。非线性优化算法,称为束调整,由bundleAdjustment函数,可用于细化。

结构从运动从多个视图这个例子展示了如何从一系列二维视图中重建一个三维场景。该示例使用相机校准器应用程序来校准拍摄视图的相机。它使用viewSet对象来存储和管理与每个视图关联的数据。

另请参阅

||||||||||

相关的话题