svo2论文
论文题目
SVO: Semidirect Visual Odometry for Monocular and Multicamera Systems
内容
1) 具有最小特征漂移的长特征轨迹;
2) 图像平面中的大量均匀分布的特征;
3)新特征与旧地标的可靠关联(即环路闭合)。
算法不限于使用局部点特征(例如,角或斑点),而是可以跟踪边缘[14],或者更一般地,跟踪图像中具有梯度的所有像素时,例如,在具有少量或高频纹理的场景(例如,沙子[12]或沥青[13])中,许多像素被可靠跟踪的概率会增加,例如在密集[15]或半密集方法[16]中。
效率的提高是由于以下三个原因:首先,SVO只提取平行线程中选定关键帧的特征,因此与硬实时约束解耦。其次,所提出的直接跟踪算法消除了鲁棒数据关联的必要性。最后,与以前的直接方法相反,SVO只需要对环境进行稀疏重建
与svo1的提升:1本文的新颖之处在于推广到宽视场(FoV)透镜(见第VII节)、多摄像机系统(见第VIII节)、包含运动先验(见第IX节)和边缘特征的使用。

图4。拐角和小边的不同对齐策略。边缘特征的对齐被限制在边缘的法线方向n上。(a) 边缘对齐。(b) 拐角对齐。
Relaxation and Refinement
随着对准中帧之间距离的增加,不能保证对准的鲁棒性(见第XI-A节中的实验)。因此,我们建议放宽由三维点的重投影给出的几何约束,并对相应的特征块执行单独的二维对齐。相对于来自第一次提取特征的帧的参考补丁来执行新帧中的每个补丁的对准;因此,最老的帧是可能的,这应该最大限度地减少特征漂移。然而,二维对齐会产生重投影误差,即投影的三维点和对齐的特征之间的差异。因此,在最后一步中,我们执行束调整,以优化三维点的位置和相机姿态,从而将重新投影误差降至最低。我们特别注意位于强度梯度边缘上的特征。
对齐
对于点的
u ′ ∗ = u ′ + δ u ⋆ , with u ′ = π ( T C B T k r T B C π ρ − 1 ( u ) ) δ u ⋆ = arg min δ u ∑ Δ u ∈ P 1 2 ∥ I k C ( u ′ + δ u + Δ u ) − I r C ( u + A Δ u ) ∥ 2 \begin{array}{l} \mathbf{u}^{\prime *}=\mathbf{u}^{\prime}+\delta \mathbf{u}^{\star}, \quad \text { with } \quad \mathbf{u}^{\prime}=\pi\left(\mathrm{T}_{\mathrm{CB}} \mathrm{T}_{k r} \mathrm{~T}_{\mathrm{BC}} \pi_\rho^{-1}(\mathbf{u})\right) \\ \delta \mathbf{u}^{\star}=\arg \min _{\delta \mathbf{u}} \sum_{\Delta \mathbf{u} \in \mathcal{P}} \frac{1}{2}\left\|\mathrm{I}_k^{\mathrm{C}}\left(\mathbf{u}^{\prime}+\delta \mathbf{u}+\Delta \mathbf{u}\right)-\mathrm{I}_r^{\mathrm{C}}(\mathbf{u}+\mathbf{A} \Delta \mathbf{u})\right\|^2 \end{array} u′∗=u′+δu⋆, with u′=π(TCBTkr TBCπρ−1(u))δu⋆=argminδu∑Δu∈P21 IkC(u′+δu+Δu)−IrC(u+AΔu) 2
对于边缘点的(这里的n是梯度方向)
u ′ ⋆ = u ′ + δ u ⋆ ⋅ n , with δ u ⋆ = arg min δ u ∑ Δ u ∈ P 1 2 ∥ I k C ( u ′ + δ u ⋅ n + Δ u ) − I r C ( u + A Δ u ) ∥ 2 \begin{array}{l} \mathbf{u}^{\prime \star}=\mathbf{u}^{\prime}+\delta u^{\star} \cdot \mathbf{n}, \quad \text { with } \\ \delta u^{\star}=\arg \min _{\delta u} \sum_{\Delta \mathbf{u} \in \mathcal{P}} \frac{1}{2}\left\|\mathrm{I}_k^{\mathrm{C}}\left(\mathbf{u}^{\prime}+\delta u \cdot \mathbf{n}+\Delta \mathbf{u}\right)-\mathrm{I}_r^{\mathrm{C}}(\mathbf{u}+\mathbf{A} \Delta \mathbf{u})\right\|^2 \end{array} u′⋆=u′+δu⋆⋅n, with δu⋆=argminδu∑Δu∈P21 IkC(u′+δu⋅n+Δu)−IrC(u+AΔu) 2
优化位姿
在特征对齐之后,我们建立了具有亚像素精度的特征对应关系。然而,特征对齐违反了对极约束,并引入了重投影误差δu,该误差通常远低于0.5像素。因此,在运动估计的最后一步中,我们通过最小化重投影误差的平方和来细化相机姿态和地标位置 X = T k W , ρ i X={T_{kW},ρi} X=TkW,ρi
X ⋆ = arg min X ∑ k ∈ K ∑ i ∈ L k C 1 2 ∥ u i ′ ∗ − π ( T C B T k W ρ i ) ∥ 2 + ∑ k ∈ K ∑ i ∈ L k E 1 2 ∥ n i ⊤ ( u i ′ ∗ − π ( T C B T k W ρ i ) ) ∥ 2 \begin{aligned} \mathcal{X}^{\star}= & \arg \min _{\mathcal{X}} \sum_{k \in \mathcal{K}} \sum_{i \in \mathcal{L}_k^C} \frac{1}{2}\left\|\mathbf{u}_i^{\prime *}-\pi\left(\mathrm{T}_{\mathrm{CB}} \mathrm{T}_{k \mathrm{~W}} \boldsymbol{\rho}_i\right)\right\|^2 \\ & +\sum_{k \in \mathcal{K}} \sum_{i \in \mathcal{L}_k^E} \frac{1}{2}\left\|\mathbf{n}_i^{\top}\left(\mathbf{u}_i^{\prime *}-\pi\left(\mathrm{T}_{\mathrm{CB}} \mathrm{T}_{k \mathrm{~W}} \boldsymbol{\rho}_i\right)\right)\right\|^2 \end{aligned} X⋆=argXmink∈K∑i∈LkC∑21∥ui′∗−π(TCBTk Wρi)∥2+k∈K∑i∈LkE∑21 ni⊤(ui′∗−π(TCBTk Wρi)) 2
大fov相机
为了估计新特征的深度(参见第六节),我们需要沿着核线对像素进行采样。对于失真的图像,极线是弯曲的(见图7)。因此,我们定期对大圆进行采样,大圆是对极平面与以感兴趣的相机姿态为中心的单位球体的交点。采样的角度分辨率大约对应于图像平面中的一个像素。对于每个样本,我们应用相机投影模型π(·)来获得弯曲核线上对应的像素坐标。

用于估计左图像中参考补丁中心像素深度的极线搜索示意图。给定两个图像的外在和内在校准,计算对应于参考像素的核线。由于自相似的纹理,沿着极线的错误匹配是经常发生的。
多相机系统
所提出的运动估计算法从相对姿态Tk k−1的优化开始。由于在第V-A节中,我们已经介绍了一个固定在相机上的机身框架B,因此现在可以直接将稀疏图像对齐推广到多个相机。给定具有M个相机的相机装备(见图9),我们假设单个相机c∈c相对于机身 T C B T_{CB} TCB的相对姿态是从外部校准中已知的。3为了将稀疏图像对准推广到多个相机,我们只需要在(1)的成本函数中添加一个额外的代价函数
T k k − 1 ⋆ = arg min T k − 1 ∑ C ∈ C ∑ u ∈ R ‾ k − 1 C 1 2 ∥ r I u C ( T k k − 1 ) ∥ Σ I 2 . \mathrm{T}_{k k-1}^{\star}=\arg \min _{\mathrm{T}_{k-1}} \sum_{\mathrm{C} \in \mathrm{C}} \sum_{\mathbf{u} \in \overline{\mathcal{R}}_{k-1}^{\mathrm{C}}} \frac{1}{2}\left\|\mathbf{r}_{\mathrm{I}_{\mathrm{u}}^{\mathrm{C}}}\left(\mathrm{T}_{k k-1}\right)\right\|_{\Sigma_{\mathrm{I}}}^2 . Tkk−1⋆=argTk−1minC∈C∑u∈Rk−1C∑21 rIuC(Tkk−1) ΣI2.
运动先验
在特征较差的环境中,在快速运动过程中,或在动态障碍物的情况下,使用运动先验可能非常有帮助。运动先验是在(11)中添加到成本函数的附加项,它惩罚与先验估计不一致的运动。因此,可以抑制由于无约束DoF或异常值引起的运动估计中的“跳跃”。例如,在汽车场景中,可以假设等速运动模型,因为汽车的惯性阻止了从一帧到下一帧的突然变化。其他先验可能来自额外的传感器,如陀螺仪,这使我们能够测量两帧之间的增量旋转。
假设我们在 p k , k − 1 p_{k,k−1} pk,k−1之前得到了相对平移(例如,来自恒定速度假设),在 R k , k − 1 R_{k,k−1} Rk,k−1之后得到了相对旋转(例如,源自积分陀螺仪)。在这种情况下,我们可以通过向稀疏图像对齐步骤的成本添加附加项来使用运动先验
T k k − 1 ⋆ = arg min T k k − 1 ∑ c ∈ C ∑ u ∈ R ‾ k − 1 c 1 2 ∥ r I u C ( T k k − 1 ) ∥ Σ I 2 + 1 2 ∥ p k k − 1 − p ~ k k − 1 ∥ Σ p 2 + 1 2 ∥ log ( R ~ k k − 1 ⊤ R k k − 1 ) ∨ ∥ Σ R 2 \begin{aligned} \mathrm{T}_{k k-1}^{\star}= & \arg \min _{\mathrm{T}_{k k-1}} \sum_{\mathbf{c} \in \mathrm{C}} \sum_{\mathbf{u} \in \overline{\mathcal{R}}_{k-1}^{\mathrm{c}}} \frac{1}{2}\left\|\mathbf{r}_{\mathrm{I}_{\mathbf{u}}^{\mathrm{C}}}\left(\mathrm{T}_{k k-1}\right)\right\|_{\Sigma_{\mathrm{I}}}^2 \\ & +\frac{1}{2}\left\|\mathbf{p}_{k k-1}-\tilde{\mathbf{p}}_{k k-1}\right\|_{\Sigma_{\mathbf{p}}}^2 \\ & +\frac{1}{2}\left\|\log \left(\tilde{\mathrm{R}}_{k k-1}^{\top} \mathrm{R}_{k k-1}\right)^{\vee}\right\|_{\Sigma_{\mathrm{R}}}^2 \end{aligned} Tkk−1⋆=argTkk−1minc∈C∑u∈Rk−1c∑21 rIuC(Tkk−1) ΣI2+21∥pkk−1−p~kk−1∥Σp2+21 log(R~kk−1⊤Rkk−1)∨ ΣR2
实现细节
在本节中,我们将提供有关我们实施的各个方面的更多详细信息。
Initialization
该算法使用[58]中的五点相对姿态算法进行自举,以获得前两个关键帧的姿态和初始贴图。在多摄像机配置中,通过立体匹配来获得初始映射。
Sparse Image Alignment
对于稀疏图像对齐,我们使用4×4像素的补丁大小。在实验部分,我们证明了具有如此小的补丁大小的稀疏方法实现了可比性当帧间距离很小时,在鲁棒性方面优于半密集和密集方法,这对于帧到帧的运动估计来说通常是正确的。为了处理大的运动,我们以粗到细的方案应用稀疏图像对齐算法。因此,对图像进行半采样以创建五个级别的图像金字塔。然后,从初始条件 T k , k − 1 = I 4 × 4 T_{k ,k−1}=I_{4×4} Tk,k−1=I4×4开始,在最粗略的水平上优化光度成本,直到收敛。随后,在下一个更精细的级别上继续优化,以提高结果的精度。为了节省处理时间,我们在第三级收敛后停止,在这个阶段,估计足够准确,可以初始化特征对齐。为了提高对动态障碍、遮挡和反射的鲁棒性,我们还采用了鲁棒成本函数[24],[34]。
Feature Alignment
对于特征对齐,我们使用8×8像素的补丁大小。由于参考补丁可能是多帧旧的,我们使用仿射照明模型来应对照明变化[59]。对于所有实验,我们将匹配特征的数量限制为180,以保证每帧的成本不变。
Mapping
在映射线程中,我们将图像划分为固定大小的单元(例如,32×32像素)。对于每个关键帧,在单元中得分最高的FAST角[60]处初始化一个新的深度过滤器,除非已经存在2-D到3-D的对应关系。在没有发现角的单元中,我们检测具有最高梯度大小的像素,并初始化边缘特征。这将在图像中产生均匀分布的特征。为了加快深度估计,我们只对沿极线的短距离进行采样;在我们的情况下,该范围对应于当前深度估计的标准偏差的两倍。我们使用8×8像素的补丁大小进行核极搜索。
总结
在本文中,我们提出了半直接VO算法“SVO”,它比当前最先进的VO算法快得多,同时实现了极具竞争力的精度。速度的提高是由于只为并行线程中选定的关键帧提取特征,并且使用新的稀疏图像对齐算法可以非常快速和稳健地建立特征匹配。稀疏图像对齐在极线约束下联合跟踪一组特征,当特征位置的场景深度已知时,可以使用稀疏图像对齐来代替KLT跟踪[69]。我们进一步建议使用明确建模异常值测量的鲁棒滤波器来估计场景深度。稳健的深度估计和直接跟踪使我们能够跟踪非常弱的拐角特征和边缘。SVO的另一个好处是,它直接从优化开始,这使我们能够轻松地集成来自多个相机的测量以及运动先验。公式可进一步在配有鱼眼和折反射透镜的大型FoV相机使用。SVO算法已被进一步证明在现实世界的应用中是成功的,例如基于视觉的四旋翼飞行[54]或智能手机的三维扫描应用。
相关文章:
svo2论文
论文题目 SVO: Semidirect Visual Odometry for Monocular and Multicamera Systems 内容 1) 具有最小特征漂移的长特征轨迹; 2) 图像平面中的大量均匀分布的特征; 3)新特征与旧地标的可靠关联(即环路闭…...
【GoLang】MAC安装Go语言环境
小试牛刀 首先安装VScode软件 或者pycharmmac安装brew软件 brew install go 报了一个错误 不提供这个支持 重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env 可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc, # bre…...
epoll服务器创建
驱动 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/device.h> #include <linux/uaccess.h> #include <linux/poll.h> unsigned int major; char kbuf[128]{0}…...
jdk11环境 提示“因为 accessExternalDTD 属性设置的限制导致不允许 ‘http‘ 访问“bug
在运行mybatis源码的时候,提示一下错误: Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### Cause: org.apache.ibatis.builder.BuilderException: Error creating docum…...
Android Studio 的版本控制Git
Android Studio 的版本控制Git。 Git 是最流行的版本控制工具,本文介绍其在安卓开发环境Android Studio下的使用。 本文参考链接是:https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 一:Android Studio 中设置Git …...
一个 SpringBoot 项目能处理多少请求
首先,这个问题有坑,因为 spring boot 不处理请求,只是把现有的开源组件打包后进行了版本适配、预定义了一些开源组件的配置通过代码的方式进行自动装配进行简化开发。这是 spring boot 的价值。 使用 spring boot 进行开发相对于之前写配置文…...
Python中的r字符串前缀及其用法详解
Python中的r字符串前缀及其用法详解 1. 介绍 1.1 什么是r字符串前缀 在Python中,r字符串前缀是一种特殊的字符串前缀,用于表示原始字符串。当一个字符串以r前缀开始时,它将被视为原始字符串,其中的转义字符将被忽略。 1.2 r字…...
LabVIEW实现三相异步电机磁通模型
LabVIEW实现三相异步电机磁通模型 三相异步电动机由于经济和出色的机电坚固性而广泛用于工业化应用。这台机器的设计和驱动非常简单,但在控制扭矩和速度方面,它隐藏了相当大的功能复杂性。通过数学建模,可以理解机器动力学。 基于微分方程的…...
读书会-《影响力》
《影响力》这本书的作者罗伯特西奥迪尼时全球知名说服力研究权威。因其在影响力研究领域的开创性,人们将其称为“影响力研究领域的本杰明富兰克林”。这本书从人们的心理状态,进行了很多实验研究,总结出了7大规律。如果从事营销,需…...
141. 环形链表
简单 1.9K 相关企业 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链…...
学习笔记|大模型优质Prompt开发与应用课(二)|第一节:大模型应用密码—Prompt的一千种打开方式
文章目录 第一节:大模型应用密码—Prompt的一千种打开方式01你可能听过一个小故事1910华盛顿纺织厂罢工事件 02 小问题:哪些场景会被提效类目一︰减少重复性工作的成本(降本)例如∶做策划初稿、写JD、润色文案prompt生成结果prompt生成结果prompt生成结果promptprom…...
QT chart进行画图
说明 QT Chart 是一个用于在 Qt 应用程序中绘制图表的开源库。它提供了多种类型的图表,如线图、柱状图、饼图等,可以用于可视化数据和统计信息。QT Chart 是一个基于 Qt 绘图框架的扩展,可以轻松集成到现有的 Qt 应用程序中。 使用 QT Chart,你可以通过简单的代码来创建和…...
Web3将自己写在合约中的代币添加到MetaMask中管理
上文 Web3带着大家根据ERC-20文档编写自己的第一个代币solidity智能合约 带着大家在智能合约中创建了一个自己的代币系统 我们可以在MetaMask中去导入 ganache环境下模拟出来的第一和第二个账号 我们这里 可以看到他们的 ETH 但看不到自己的代币符号 没关系 我们点击这下面的…...
【微信小程序】显示自带的弹窗,包括加载中,成功,错误,提示,警告
在微信小程序中,可以使用以下方法来显示自带的弹窗: 显示加载中的弹窗: wx.showLoading({title: 加载中,mask: true });显示成功的弹窗: wx.showToast({title: 成功,icon: success,duration: 2000 });显示错误的弹窗࿱…...
vue-element-plus-admin框架的tag上下文切换bug
问题 首先贴上该框架的链接:https://github.com/kailong321200875/vue-element-plus-admin 在对路由进行部分修改后,网站多次切换tag时,控制台会出现报错:Cannot read properties of undefined (reading offsetLeft)。 我在框架…...
vue中,父子组件传递参数 props 实现方式
通过 Prop 向子组件传递数据 001:父组件》子组件通信 <template><div><h1>这里是父元素</h1>//******<childComponent :detailMes"detailMes"/></div> </template><script>import childComponent from…...
Unity如何快速接入iOS和GooglePlay的成就排行榜等GameCenter功能
一般在游戏开发中,经常有成就排行榜的需求,按照我们的理解,通常是要自己导入谷歌的sdk,或者苹果的sdk,然后封装后通过桥接来调用。 不用这么复杂,本鱼蛋(egostudio 防爬)告诉大家一个方法,其实…...
Unity下如何实现低延迟的全景RTMP|RTSP流渲染
技术背景 Unity3D可以用于创建各种类型的的应用程序,包括虚拟现实、培训模拟器等。以下是一些可以使用Unity3D全景播放的场景: 虚拟现实体验:全景视频可以用来创建逼真的虚拟环境,使用户能够感受到身临其境的感觉;培…...
STM32 USB使用记录:HID类设备(后篇)
文章目录 目的基础说明项目构建与代码调整接收发送代码与测试示例链接报告描述符总结 目的 接上篇: 《STM32 USB使用记录:HID类设备(前篇)》 USB HID 类的设备有个比较大的好处是大部分时候接入主机中都是可以免驱使用的。这篇文…...
C# 快速写入日志 不卡线程 生产者 消费者模式
有这样一种场景需求,就是某个方法,对耗时要求很高,但是又要记录日志到数据库便于分析,由于访问数据库基本都要几十毫秒,可在方法里写入BlockingCollection,由另外的线程写入数据库。 可以看到,在…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
Appium下载安装配置保姆教程(图文详解)
目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...
RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...
【threejs】每天一个小案例讲解:创建基本的3D场景
代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone,无需安装依赖,直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心三要素 场景(Scene) 使用 THREE.Scene(…...
Vue3 hooks
export default function(){ let name; function getName(){ return name; } return {name,getName} } use it ----------------------------------------------- import useName from hooks/useName const {name,getName} useName(); 这段代码展示了一个自定义 Vue3钩…...
