SfM、VO和SLAM介绍

article/2025/10/15 14:56:56

一家之言,仅作分享,如有不合理或需要改进的地方,欢迎各位讨论。

前言

    在自动驾驶地图定位模块的功能开发中,主要研究方向分为三种:建图、里程计、定位。SfM(Structure From Motion)即 传统三维重建,它更注重的是建图;VO(Visual Odometry)或VIO(Visual-Inertial Odometry)要解决的问题就是里程计问题,与机器人领域不同,在实际自动驾驶项目中,里程计部分是由惯导,轮速计,视觉,激光等多传感器融合完成;SLAM(Simultaneous Localization And Mapping)同时建图与定位,它更注重的是定位。

SfM,运动恢复结构

在这里插入图片描述

    顾名思义,SfM是通过相机的运动来进行三维重建。这里,需要用到对极几何的理论知识,在我的博客视觉里程计-对极几何中,有简单的入门介绍。这里,简单讲述一下SfM的流程。

  • 特征检测与匹配。在我的博客视觉SLAM–ORB特征简介中,介绍了多种特征点以及特征匹配的实例代码。
  • 对每一对完成特征匹配的图像,估计基础矩阵F或本质矩阵E。
  • 根据本质矩阵分解得出R,t,估计相机运动。
  • 三维点云计算。得出两帧图像的相对运动后,利用三角化得出特征点的深度。
  • 计算多帧图像的重投影误差。将同一特征点的三维信息坐标转换至图像坐标系下,确定该值与实际图像感知的点的距离差。
  • BA优化。利用BA同时优化地标位置与相机位姿,解决非线性优化问题,可用ceres,类似方法可以参考我的博客Ceres解决实车SLAM后端优化问题

视觉里程计

    视觉里程计主要有两大方法:直接法和特征点法
特征点法:

  • 当相机为单目时,我们只知道 2D 的像素坐标,因而问题是根据两组 2D 点估计运
    动。该问题用对极几何来解决。
  • 当相机为双目、RGB-D 时,或者我们通过某种方法得到了距离信息,那问题就是根
    据两组 3D 点估计运动。该问题通常用 ICP 来解决。
  • 如果我们有 3D 点和它们在相机的投影位置,也能估计相机的运动。该问题通过 PnP
    求解。

    在实际自动驾驶项目中,作者用到的最多的方法是ICP,在我的博客多种形式ICP问题的ceres实例应用中,提供了多种作者在实际应用中的ICP方法的C++代码。
    虽然特征点法在视觉里程计中处于主流地位,但同时它也有一些不足:

  • 关键点的提取与描述子的计算非常耗时。
  • 使用特征点时,忽略了除特征点以外的所有信息。针对相邻帧的运动估计而言,这样做会丢失了大部分可能有用的图像信息。
  • 相机有时会运动到特征缺失的地方,往往这些地方都没有什么明显的纹理信息。这里额外提一句,在实际项目中,在这样没有明显特征的地方,正如上文提到的,可以利用IMU与轮速计进行航位推算。

    针对上述问题,直接法直接根据像素亮度信息,估计相机的运动,可以完全不用计算关键点和描述子。于是,直接法既避免了特征的计算时间,也避免了特征缺失的情况。只要场景中存在明暗变化(可以是渐变,不形成局部的图像特征),直接法就能工作。
    直接法是从光流演变而来的。光流描述了像素在图像中的运动,而直接法则附带着一个相机运动模型。在直接法中,有一个重要假设,灰度不变假设,同一个空间点的像素灰度值,在各个图像中是固定不变的。而这也是直接法的关键不足的地方。
在这里插入图片描述

SLAM

    SLAM问题的本质是对主体自身(位姿)和周围环境空间(点云)的不确定性的估计。它要求解决是同步建图与定位问题,重点是定位。
在这里插入图片描述

  1. 传感器信息读取。在视觉 SLAM 中主要为相机图像信息的读取和预处理。在自动驾驶车辆中,还有轮速计、惯性传感器等信息的读取和同步。
  2. 视觉里程计 (Visual Odometry, VO)。视觉里程计任务是估算相邻图像间相机的运动,以及局部地图的样子。VO 又称为前端(Front End)。
  3. 后端优化(Optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在 VO 之后,又称为后端(Back End)。
  4. 回环检测(Loop Closing)。回环检测判断车辆是否曾经到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
  5. 建图(Mapping)。它根据估计的轨迹,建立与任务要求对应的地图。

在这里,会发现SLAM与SfM本质其实是一样的,都是有特征检测,运动估计,非线性优化误差求解位姿地标等。区别的话,主要有两点:

  • SLAM是有序的图像序列,一般通过前后帧间匹配和局部窗口法,只有回环检测时需要进行图像间的匹配;基于图像的SfM不要求实时,数据是无序的,可以一次输入所有图像,利用所有信息。
  • SLAM是个动态问题,会涉及到滤波,运动学相关的知识,而SfM主要涉及的还是图像处理的知识。

实际问题解决方案

作者在实际自动驾驶SLAM问题中,更推荐的方法还是基于深度学习完成图像语义特征的检测,将特征转换为三维信息后,利用ICP估计位姿变化。具体方案可以结合我之前对两篇论文的阅读心得,分别是
停车场场景【论文阅读】AVP-SLAM Semantic Visual Mapping and Localization for Autonomous Vehicles in the Parking Lot
大范围的城市场景【论文阅读】RoadMap: A Light-Weight Semantic Map for Visual Localization towards Autonomous Driving
自己利用激光雷达处理的大场景问题大范围室外环境三维激光点云SLAM建图。


http://chatgpt.dhexx.cn/article/Zm95qa8Q.shtml

相关文章

SfM: Structure from motion

SfM Structure from motion (SfM) is the process of estimating the 3-D structure of a scene from a set of 2-D images. 运动结构(SfM)是根据一组二维图像估计场景的 3-D **结构的过程。 注意Motion是指相机在移动 SFM通常用来建立image structu…

经典/深度SfM有关问题的整理

这篇博客主要是记录一些实践或看论文过程中遇到的一些不好理解的问题及解释。      Q1:SfM里的尺度不变性指的是什么?   A1:一般定义下,尺度不变性是指体系经过尺度变换后,其某一特性不变。比如,特征…

OpenCV实现SfM(一):相机模型

注意:本文中的代码必须使用OpenCV3.0或以上版本进行编译,因为很多函数是3.0以后才加入的。 目录: 文章目录 #SfM介绍 SfM的全称为Structure from Motion,即通过相机的移动来确定目标的空间和几何关系,是三维重建的一种…

Structure From Motion(SFM)入门讲解

概念: Structure From Motion(SFM) 是从一系列包含视觉运动信息的多幅二维图像序列中估计三维结构的技术。 SFM和立体视觉的区别 在立体视觉中,两个相机之间的相对位姿是通过标定靶精确标定出来的,在重建时直接使用三角法进行计算&#x…

[CV] Structure from motion(SFM)- 附我的实现结果

【更新】我的新博客:www.ryuzhihao.cc,当然这个csdn博客也会更新 本文在新博客中的链接:点击打开链接 完成时间:2017年2月27日 博客时间:2017年4月26日 去年,我有幸了解到image-based mode…

SFM(structure-from-motion)实现流程详细介绍

SFM(structure-from-motion)算法是一种基于各种收集到的无序图片进行三维重建的离线算法。顾名思义是从运动中(不同时间拍摄的图片集)恢复物体的三维结构,这需要估计出图片的R,t,结合相机内参重建稀疏点云。…

SFM算法介绍

背景 股票市场存在着短线、中长线、长线等不同频率的交易模式,这些交易活动决定了股票价格的变动。为了对股票价格进行预测,该文章提出了一种循环神经网络SFM,可以从股票价格的时序数据中捕捉多种频率的交易规律,从而做出短期/长…

增量式SfM详细流程介绍及实现方法

目前主流的SfM(Structure from Motion,运动结构恢复)可以分为两大类型,一种是全局式的,一种是增量式的。全局式(Global)sfm能够一次性得出所有的相机姿态和场景点结构。它通常先求得所有相机的位…

SLAM和SFM有什么区别?

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 自古以来,人们惆怅千年要解决的问题: 定位、定向. 当然了还有我是谁?我在哪里? 在这个时候, SLAM与SFM 横空出世. 这两兄弟叱咤乾坤,成为人们解决上述问题的得力帮手. SFM SFM即Struct…

SFM问题简介

最近在学习opencv的知识,遇到的一些知识点和理解记录下来,由于还是小白,有所不对的地方,大家一起交流沟通 Structure from motion,简称为SFM,是单目相机在物体周围不同的角度拍摄不同的图片,而相…

SfM详细流程介绍

增量式(Incremental)sfm则是一边三角化(triangulation)和pnp(perspective-n-points),一边进行局部BA。这类方法在每次添加图像后都要进行一次BA,效率较低,而且由于误差累积,容易出现漂移问题;但是增量式sfm的鲁棒性较高。 增量式sfm初始化 初始化主要是指选取两张匹…

主流SFM处理方式的梳理

SFM是什么? SFM即Structure-from-motion运动结构重建,从大批量图像数据出发,通过相关处理,获取目标图像集3D几何(结构)和摄像机姿态(运动)信息,主要处理流程可分为如下几…

SFM过程(一)

以图像为基础的三维重建过程SFM基本如下图所示&#xff1a; 以SfM-Toy-Library代码为例&#xff0c;如下&#xff1a; ErrorCode SfM::runSfM() {if (mImages.size() < 0) {cerr << "No images to work on." << endl;return ErrorCode::ERROR;}//in…

SfM算法

参考 https://blog.csdn.net/kokerf/article/details/72630863 https://blog.csdn.net/qq_42399848/article/details/89348740 https://blog.csdn.net/lpj822/article/details/82716971 《基于无序图像集的运动恢复结构研究与实现》 Structure from Motion可以认为一个相机在运…

SFM算法流程

SFM算法流程 Figure1:Block diagram of structure from motion 1. 算法简介 SFM算法是一种基于各种收集到的无序图片进行三维重建的离线算法。在进行核心的算法structure-from-motion之前需要一些准备工作&#xff0c;挑选出合适的图片。 首先从图片中提取焦距信息(之后初始化…

Sfm方法过程及原理

1. 算法简介 SFM算法是一种基于各种收集到的无序图片进行三维重建的离线算法。在进行核心的算法structure-from-motion之前需要一些准备工作&#xff0c;挑选出合适的图片。 先从图片中提取焦距信息(之后初始化BA( Bundle adjust)需要)&#xff0c;然后利用SIFT等特征提取算法去…

SFM原理简介

Structure From Motion SFM简介 通过相机的移动来确定目标的空间和几何关系&#xff0c;是三维重建的一种常见方法。 它与Kinect这种3D摄像头最大的不同在于&#xff0c;它只需要普通的RGB摄像头即可&#xff0c;因此成本更低廉&#xff0c;且受环境约束较小&#xff0c; 在室…

SFM(Structure from Motion)一点总结

SFM&#xff08;Structure from Motion&#xff09;一点总结 运动结构恢复(Structure from motion)数十年来一直是计算机视觉领域的热门研究方向之一&#xff0c;实现了众多实际应用&#xff0c;尤其在近景三维重建中&#xff0c;该算法从获取的目标物系列影像出发&#xff0c…

sfm从运动到结构

sfm&#xff0c;即structure from motion。从一堆同一场景的照片中恢复场景的三维结构和照片拍摄时相机的位置&#xff0c;可分为全局sfm和增量式sfm。 全局sfm主要包括以下步骤&#xff1a; 1.提取各张照片上的特征点及其描述&#xff1b; 2.对所有照片相互进行特征点匹配&a…

猿创征文|SfM(Structure from Motion)学习之路

文章目录 0 前言1 理论基础1.1 书籍推荐1.2 SfM概述 2 动手实践2.1 增量式SfM复现总结2.2 部分复现结果2.3 遇到问题与解决 3 后续学习3.1 前沿论文阅读笔记3.2 Colmap使用问题3.3 三维旋转3.4 场景对齐 0 前言 一转眼&#xff0c;研究生生活已经过去两年了。开始接触SfM也是两…