【最终版本】SVO框架总结

本文深入解析SVO(FastSemi-direct Monocular Visual Odometry)的原理与实现,涵盖跟踪与深度建图两大核心模块。跟踪部分通过sparse model-based image alignment、Relaxation Through Feature Alignment及Pose and Structure Refinement三个阶段,实现精确位姿估计。深度建图则通过深度滤波器,融合多帧数据,获取高精度场景深度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SVO主要参考两篇博客:

  1. 白巧克力的SVO论文解析
  2. SVO深度解析
  3. SVO详细解读(从程序出发)-极品巧克力

SVO(Fast Semi-direct Monocular Visual Odometry)是一种半直接法的视觉里程计,主要有两个部分,一个是跟踪,一个是深度建图。

SVO的跟踪部分主要分为3步:

1.sparse model-based image alignment

首先假设上一帧特征点的深度已知,通过将k-1帧中的特征点,反投影,再投影到当前第k帧中,通过最小化重投影光度误差,利用高斯牛顿法优化得到T\, k,k-1

其中:

2. Relaxation Through Feature Alignment

 

由于通过上一步获得的投影过来的方块patch(4*4) 并不完全准确,所以将关键帧中的特征patch,和上一步获取的patch进行比较优化,优化当前帧的特征位置,使其更加准确。其中要计算彷射变换A\, i(因为3D点所在的keyframe可能离当前帧很远)。这样考虑到旋转的因素,比较的更加科学。关键帧的选取规则:当前帧距离上一个关键帧的平移量超过场景深度的12%。

3.Pose and Structure Refinement

因为第二步优化后的特征位置与第一步预测到的特征位置存在差异,所以需要重新构造优化函数。此时是将地图中的3D点投影到当前帧,

1.先是只优化当前帧相对于世界坐标系的位姿(Motion-only BA)

2.之后再优化三维点的坐标(x,y,z)(Structure-only BA),跟踪过程就结束了。

SVO的建图过程

1.深度滤波器简介

SVO深度滤波是先在关键帧中创建一些seed点,之后用一系列帧,来求取指定帧上每个像素深度,原因是在计算像素点深度时,单次匹配恢复的深度有误差,需要依靠多次深度测量值的融合,来恢复误差较小的深度值。SVO把像素的深度误差模型看做概率分布,有两个属性,一个是深度值服从高斯分布,另一个是局外点的概率服从Beta分布,同时融合这两种属性。

SVO深度滤波对深度进行渐进式融合(动态融合)。其过程可表述如下:关键帧上选取像素点(SVO是fast角点,REMODE是梯度点),作为种子(seed,种子就是深度未收敛的像素点),每来一帧图像,融合更新一下之前提取的种子,直至种子的深度收敛,这是个动态过程,类似于滤波,大概这就是叫深度滤波的原因吧。如果新的一帧是关键帧,那么再次提取新的像素点作为种子。

2.详细步骤:

2.1计算极线,首先初始深度为当前场景的平均深度,当前帧的位姿通过跟踪过程已知,所以可以计算出3D点在当前帧的极线。

2.2计算彷射矩阵,利用三点法计算两时刻两帧之间的彷射矩阵。目的是考虑到旋转因素。

2.3极线搜索匹配:通过8*8的patch块,两个patch块匹配的方式是ZMSSD(Zero mean Sum of Squared Differences ),类似于SSD( sum of squared difference),当极线小于两个像素的时候,直接用"第二步"feature alignment对齐,因为此时不确定度很小。在SVO中,深度的不确定被认为是,在匹配时,误匹配一个像素所带来的最大深度误差。

2.4深度融合的具体过程,和卡尔曼滤波有些像但不是,同样都是新的观测到来,更新\beta分布的a,b两个参数,更新权重c\, 1,c\, 2,根据权重和融合前深度和观测深度获得融合后的深度,同时更新融合后的深度的方差。最终如果融合后的方差小于一定阈值或者判断点是局外点的话就停止。

 

 

### 关于SVO2.0字典的相关信息 SVO( Semi-Direct Visual Odometry )是一种基于直接法的单目视觉里程计,其设计目标是为了实现高效的速度和轻量化的计算需求[^1]。然而,在实际应用中,开发者可能需要了解如何获取并使用与其配套的字典文件。 #### SVO2.0字典的作用 SVO2.0中的“字典”通常指的是用于特征匹配或描述符提取的数据集合。尽管SVO本身并未提供复杂的回环检测机制,但在某些扩展版本或者改进模型中可能会引入类似的组件来增强性能。这些字典可以包含预定义的关键点模板或其他形式的知识库,帮助系统更快速地完成初始化过程或是辅助恢复跟踪失败后的重新定位能力。 对于具体到"SVO2.0 字典"这一概念来说, 如果是指官方文档里提到过的配置参数或者是训练好的数据集,则可以通过访问项目主页找到相关信息: - **GitHub仓库**: 大多数开源SLAM框架都会将其源码托管至GitHub上供研究者自由查阅与贡献代码更新迭代情况。例如,SVO项目的原始地址位于[TUM-Vision/svo](https://github.com/uzh-rpg/rpg_svo),这里包含了详细的安装指南、依赖项列表以及一些示例场景设置教程。 ```bash git clone https://github.com/uzh-rpg/rpg_svo.git cd rpg_svo && mkdir build && cd build cmake .. make -j4 ``` 上述命令展示了克隆存储库并通过CMake构建工具编译整个工程的标准流程[^2]。值得注意的是,不同平台间可能存在细微差异,请参照README.md内的说明调整相应选项以适配本地开发环境。 另外关于“字典”的实际意义还有一种解释即指代相机校准参数表。这类数值反映了成像设备内部结构特性比如焦距f_x,f_y像素偏移c_u,c_v等等属性值。它们往往被保存在一个单独的小型JSON/YAML格式文本文件当中以便加载读取方便后续处理操作调用。 以下是YAML样式的简单实例片段: ```yaml camera_model: pinhole resolution: [640, 480] intrinsics: [535.4, 539.2, 320.1, 247.6] distortion_coefficients: [-0.2477, 0.0785, -0.0037, 0.0009] ``` 以上内容均需按照特定实验条件精确测定获得才能保证最终效果达到预期标准水平线之上[^3]. 最后提醒一点虽然当前讨论围绕着较老一代产品展开但科技发展日新月异建议时刻关注领域前沿动态以免错过最新突破成果分享机会哦!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值