基于在线光度校准的混合稀疏单目视觉里程计

news2024/11/25 4:58:00

文章:Hybrid sparse monocular visual odometry with online photometric calibration

作者:Dongting Luo, Yan Zhuang and Sen Wang

编辑:点云PCL

代码:https://github.com/luodongting/HSO.git

欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。

公众号致力于点云处理,SLAM,三维视觉,高精地图等领域相关内容的干货分享,欢迎各位加入,有兴趣的可联系dianyunpcl@163.com。未经作者允许请勿转载,欢迎各位同学积极分享和交流。

摘要

本文提出了一种基于在线光度校准的混合稀疏单目视觉里程计(HSO)算法,用于单目视觉,HSO引入了两种新的测量方法,即自适应模式选择的直接图像对齐和使用比例因子的图像光度描述,以增强对图像强度剧烈变化和运动模糊的鲁棒性。此外,HSO能够通过使用局部-全局亮度一致性增强的KLT跟踪,在时间和空间上建立远离的关键帧之间的姿态约束。候选地图点的收敛速度被用作关键帧选择的依据,从而加强了前端和后端之间的协调。光度校准被巧妙地集成到联合工作的VO系统中:

(1)在HSO中准确校准和补偿了相机的光度干扰,如暗角和曝光时间的变化,从而提高了VO的准确性和鲁棒性。

(2)另一方面,VO为光度校准算法提供预计算的数据,减少了资源消耗,并提高了光度参数估计的准确性。

对各种公共数据集进行了广泛实验,以评估所提出的HSO与最先进的单目vSLAM/VO和在线光度校准方法的性能。实验结果表明,所提出的HSO在VO和光度校准方面具有卓越的性能,准确性、鲁棒性和效率与最先进的VO/vSLAM系统可媲美。我们将HSO开源,以造福社区。

73887a0df79d6488ee1dd3826456e47d.png

HSO在TUM Mono VO数据集的第31个序列中重建的地图和所有帧的轨迹,即使不依赖于闭环检测,该序列的起始和终止位置也是闭合的,HSO实现了很高的定位精度。

主要贡献

本文旨在设计一种具有在线光度校准的混合稀疏视觉里程计(HSO)系统。主要贡献如下:

1. 提出了一种准确、鲁棒且高效的HSO算法,通过实验结果支持所提出的HSO在准确性、鲁棒性和效率方面优于现有的基于特征和直接的单目vSLAM/VO方法,尤其在处理图像强度剧烈变化时表现出色。

2. 在混合VO系统中无缝集成了在线辐射校准方法,并遵循Bergmann等人关于光度校准的基本参数化和优化方法。但是,HSO实现了双赢的局面,既实现了更准确的在线光度校准,又提升了VO性能:(i) HSO的VO模块直接提供了在线校准所需的所有信息,包括关键帧、数据关联和曝光时间先验,这些信息在我们的VO模块中进行联合和准确的优化。与Bergmann等人依赖于专门用于光度校准的独立2D-2D KLT跟踪相比,这使得HSO能够实现更准确的相机光度参数估计,并且潜在地减少计算量;(ii) 对于混合VO系统,通过在线校准后,其VO的准确性和鲁棒性得到了增强。更准确的VO进一步改进了在(i)中校准的光度参数,从而提高了图像质量和VO性能。而Bergmann等人的方法中缺少这种双赢效果,因为其光度校准未利用VO中的最优估计。

3. 在三个现有的公共数据集上进行了广泛的各种vSLAM/VO系统实验,通过一组配置全面系统地评估了在线光度校准和HSO与最先进系统的性能,并将源代码公开:https://github.com/luodongting/HSO.git

主要内容

本文提出的HSO系统可以分为三个线程:在线光度校准、运动估计和建图。HSO的流程如图2所示。

b1e0cc2ab1173dba8d7600acd904a7b1.png

HSO的系统流程图,HSO中有三个并行的线程:在线光度校准(橙色)、跟踪(蓝色)和建图(绿色)。

概述

光度校准线程在线生成最佳的光度校准参数,它不断接收新的关键帧并将其添加到关键帧队列中,该队列用于构建窗口化优化问题,通过在该队列中对当前关键帧的曝光时间进行优化,可以减少由帧间传递引起的漂移,然后,通过解决窗口化优化问题来估计相机的光度参数。

当新的帧到达运动估计线程时,系统首先使用最新优化的光度校准参数对其进行光度校准,去除响应函数和渐晕效应,然后,采用具有自适应模式选择的直接图像对齐方法,获得其姿态和曝光时间的初始估计,为了获取当前帧中的特征观测,使用KLT跟踪将局部地图中的特征对齐。关于关键帧选择决策,HSO引入了一种利用前端和后端信息(包括光流、运动估计的运动和候选地图点的收敛时间)的新算法,这使得系统能够以合理且灵活的速率生成新的关键帧。在最后一步中,对当前关键帧和关联关键帧进行局部BA(Bundle Adjustment)。

当一帧完成运动估计的所有任务后,它将被插入到建图线程中,使用距离滤波器更新先前关键帧中提取的所有候选点的逆距离概率模型,并将其与新帧进行合并,同时,将地图点的收敛速度传递给前端,用于关键帧选择和其他阈值设定,当插入的帧是关键帧时,执行自适应候选点提取算法来选择分布良好的新候选点。在初始化时,我们使用2D-2D KLT跟踪并计算单应矩阵(Homography)和本质矩阵(Essential matrix),然后对H或E进行分解,以找到最佳的平移向量和旋转矩阵,从而启动VO系统。

在线光度校准

在线光度校准是指在系统运行过程中,实时校准和调整相机的光度参数,以减小光度干扰对视觉里程计(visual odometry)的影响。光度校准线程的主要任务是在线生成最佳的光度校准参数。它接收新的关键帧并将其添加到关键帧队列中。为了减少由帧间传递引起的漂移,当前关键帧的曝光时间在关键帧队列中进行优化,然后,通过解决窗口化优化问题,估计相机的光度参数,从而实现更准确的光度校准。

5c82962ad90d774ba05c7e849c8b1166.png

 图像采集过程

图像采集如图所示。当响应曲线未知时,目标函数无法找到唯一的解,我们只能得到一组产生相同像素值的解,这类似于单目vSLAM/VO中的尺度问题,但不同之处在于我们不需要找到正确的尺度因子使光度校准系统可用。在我们的工作中,我们采用了Goldman和Chen以及Bergmann等人中的相同方法来处理尺度,也就是说,如果我们知道光度参数的真值,结果将被最优地缩放。否则,我们将尺度设置为1.0。众所周知,暗角效应倾向于导致图像中心和边缘的像素值不一致,这对于vSLAM中的特征跟踪是不利的。例如,即使使用高质量的定焦镜头,在最大光圈设置下,图像边缘的亮度可能比中心亮度低30%至40%,此外,图像曝光时间的剧烈变化可能导致跟踪失败,因此,消除它们对特征跟踪的影响是将光度校准整合到vSLAM系统中的主要目的。

1c2c27effd7f1bb64a4255d5b30cfbab.png

使用不同初始估计的相机响应函数进行光度校准的结果,其中(a)、(b)和(c)分别是使用它们左下角的初始相机响应函数进行校准的图像,而(d)是原始图像。

视觉里程计

 运动估计线程的任务是根据输入的帧图像进行相机运动估计,首先,使用最新优化的光度校准参数对输入帧进行光度校准,去除响应函数和渐晕效应,然后,采用直接图像对齐方法,结合自适应模式选择,获得帧的姿态和曝光时间的初始估计,为了获取当前帧中的特征观测,采用KLT跟踪方法对局部地图中的特征进行对齐。跟踪效果如图。

488fcec3ffd2c6263e066e00c9230706.png

在两个相反的图像亮度变化下的特征跟踪结果,第一列是参考帧,第二列是使用我们的方法在当前帧中进行的特征跟踪结果,第三列是传统KLT方法的结果,绿色和黄色的点表示被跟踪的特征点,即使图像亮度发生剧烈变化,我们的方法仍能有效地跟踪到大量的特征点。

建图线程负责场景的三维重建和地图的更新,通过距离滤波器,将新帧与先前关键帧提取的所有候选点的逆距离概率模型进行更新。同时,将地图点的收敛速度传递给前端,用于关键帧选择和其他阈值设定。当插入的帧是关键帧时,执行自适应候选点提取算法,选择分布良好的新候选点。最后,在当前关键帧和连接的关键帧上执行局部BA(Bundle Adjustment)来进一步优化地图和估计。在初始化阶段,使用2D-2D KLT跟踪方法计算单应矩阵(Homography)和本质矩阵(Essential matrix),然后通过分解得到最佳的平移向量和旋转矩阵,用于启动系统的视觉里程计。

实验与分析

在本节中,通过多个公共数据集对所提出的HSO系统进行了视觉里程计系统和光度校准的评估,使用一台配备Intel Core i5-6400 CPU(2.70 GHz)和32 GB内存的笔记本电脑来运行所有实验,没有使用GPU并行化,由于在vSLAM系统中,闭环可以显著消除累积漂移,因此结果无法反映闭环之前的性能。因此,为了与ORB-SLAM和ORB-SLAM3进行合理的比较,我们关闭了它们的闭环,需要注意的是,HSO方法在所有实验中使用相同的参数,而对于其他方法(如DSO和ORB-SLAM),特征提取阈值进行了修改,以确保能够提取足够的特征点,特别是对于ICL-NUIM数据集,以避免跟踪失败。下图展示了HSO在不同环境下的重建结果,包括曝光变化、运动模糊和走廊等场景。所有结果均不需要进行任何参数修改。

1e77a4418376f57abbb8cd0b9101e772.png

定性示例,第一行是EuRoC MAV数据集中的V103和V203序列,第二行是TUM Mono VO数据集中的sequence_26,所有示例都包括地图构建的结果以及VO运行期间的跟踪状态。

总结

本文介绍了一种新颖的混合稀疏单目VO系统命名为HSO,它的直接图像对齐设计为自适应于图像梯度信息,提供了稳定可靠的初始估计,由于局部-全局联合光度描述被集成到其KLT跟踪中,极大减轻了不规则的图像亮度变化对姿态跟踪的影响,在极端图像亮度变化和运动模糊的情况下,光度校准的纯比率模型比传统的线性模型表现出更强的稳健性能,通过考虑候选点的收敛速度,引入了一种新颖的关键帧选择机制,我们的一个主要贡献在于在线光度校准方法完全与VO/vSLAM系统集成,使其能够应对各种光度干扰。获得的光度参数估计结果也可以应用于依赖光度一致性假设的其他视觉算法。

在三个公共数据集上评估了提出的系统,总体而言,我们的系统在效率、准确性和稳健性方面优于现有的单目基于特征和直接方法,该系统可以解决一些现有方法中的棘手情况,例如EuRoC MAV数据集中的V103和V203,同样,在光度校准方面,我们获得的相机光度参数估计精度也优于现有的在线光度校准系统。在未来的工作中,我们将致力于将此HSO系统扩展到具有更大视场(例如鱼眼)的相机,并将运动先验集成到系统中,以获得绝对尺度并提高在快速运动下的系统性能。

更多详细内容后台发送“知识星球”加入知识星球查看更多。

3D视觉与点云学习星球:主要针对智能驾驶全栈相关技术,3D/2D视觉技术学习分享的知识星球,将持续进行干货技术分享,知识点总结,代码解惑,最新paper分享,解疑答惑等等。星球邀请各个领域有持续分享能力的大佬加入我们,对入门者进行技术指导,对提问者知无不答。同时,星球将联合各知名企业发布自动驾驶,机器视觉等相关招聘信息和内推机会,创造一个在学习和就业上能够相互分享,互帮互助的技术人才聚集群。

以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

aa5f4aae9637794987cf4384116be34c.png

扫描二维码

                   关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入知识星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享与合作方式:微信“cloudpoint9527”(备注:姓名+学校/公司+研究方向) 联系邮箱:dianyunpcl@163.com。

为分享的伙伴们点赞吧!

268a71f0011f2b9fb6d2b11c8886bbb9.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小破站上线了!

作者 | 磊哥 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 为了给大家更好的阅读体验,磊哥搞了一个专业的技术网站,整理并总结了 Java 中比较经典的文章&…

管理类联考——英语——知识篇——作文题材说明

小作文题材 一、题材:小作文的内容(写什么) 1.疫情相关的主题:(以信件方式出题可能性60%,对生活影响大) (1)停学、复学:线上或线下停学和复学( go back to class/ school )&#x…

绕过激活锁 ,拯救一台旧手机iphone

一台旧的iphone忘了apple id账号和密码了,导致锁住了 某宝上解锁要花50, 不是舍不得花钱,作为一个搞技术的,实在觉得花钱有点丢人 经过一番探索 最终确定了有用的流程 并贴出来 亲测可用 最终实现了趟再床上就可以打卡 1、 刷机 …

拯救者2022款 y9000k 安装ubuntu20.04 休眠后无法唤醒(成功解决)

拯救者2022款 y9000k 安装ubuntu20.04 休眠后无法唤醒 一.建议在安装新的 NVIDIA 显卡驱动之前卸载原有的驱动程序。这样可以确保新驱动程序的安装过程更加干净和稳定。以下是卸载原有驱动的步骤:1.进入命令行界面: 按下 Ctrl Alt F3 进入文本模式的命…

IDEA Build Artifacts 功能使用总结

文章目录 创建Artifact步骤Build Artifact步骤 打开IDEA,在没有创建Artifact时,菜单"Build -> Build Artifacts…“是灰色的,不可用状态。 所以,第一步是进入"File -> Project Structure…”,创建Arti…

10. python从入门到精通——模块

目录 模块的概述 自定义模块 Python中的包 以主程序的形式执行 引用其他模块 模块的概述 什么是模块:在python中模块就是python程序,一个模块就是一个*.py的文件,通常情况下把能够实现某一特定功能的代码放置在一个文件中作为一个模块&…

基于Java实验室耗材管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

如何理解gic控制器中的originating PE Banked和target PE Banked

【问题】 如何理解originating PE Banked和target PE Banked,下面gicv2/gicv3的banked如何理解? 【回答】 GICv2 中,SGI 对于 originating PE(即生成中断的处理器)和 target PE(即接收中断的处理器&#…

【JVM】命令行工具的基本使用--JVM常用指令

文章目录 背景一、Java 性能诊断工具简介二、简单命令行工具2.1、jps2.2、jinfo2.3、jstat2.4、jstack2.5、jmap2.6、jhat 三、图形化综合诊断工具3.1、JVisualvm3.2、JProfiler3.3、JConsole 背景 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用…

few-shot / one shot / zero shot object counting论文汇总

文章目录 2021OBJECT COUNTING: YOU ONLY NEED TO LOOK AT ONE 2022Scale-Prior Deformable Convolution for Exemplar-Guided Class-Agnostic CountingCounTR: Transformer-based Generalised Visual CountingFew-shot Object Counting with Similarity-Aware Feature Enhance…

python+vue企业高校文档管理系统的设计与实现

开发语言:Python 框架:django/flask Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发软件:PyCharm 在这个推荐个性化的时代,采用新技术开发一个文档系统来分享和展示内容是一个…

编程语言/文件系统/网络协议存在的那些编码

前面的文章介绍了URL编码,UTF8编码,base64,gzip等多种编解码的方式,这里,本节对字符和编码一些杂项进行梳理,相信你会感兴趣。 Python 中的字符和编码 为什么要强调字符编号和字符编码分离这样⼀个概念呢…

A100 GPU服务器安装CUDA教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

02队列及代码实现

队列介绍 队列是一个有序列表,可以用数组或是链表来实现。、遵循先入先出的原则。 (先存入队列的数据,要先取出。后存入的要后取出) 数组模拟队列 队列本身是有序列表,若使用数组的结构来存储队列的数据,则…

【6月比赛合集】42场可报名的「创新应用」、「数据分析」和「程序设计」大奖赛,任君挑选!

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注! 以下信息仅供参考,以比赛官网为准 目录 创新应用赛(39场比赛)数据分析赛&…

MySQL—SQL优化详解(上)

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏&#xf…

万物的算法日记|第三天

笔者自述: 一直有一个声音也一直能听到身边的大佬经常说,要把算法学习搞好,一定要重视平时的算法学习,虽然每天也在学算法,但是感觉自己一直在假装努力表面功夫骗了自己,没有规划好自己的算法学习和总结&am…

FasterTransformer 001 start up

FasterTransformer Faster Transformer是一个Transformer单层前向计算的高效实现。一个函数由多个OP组合实现。每一个基本OP都会对应一次GPU kernel的调用,和多次显存读写。OP融合可以降低GPU调度和显存读写,进而提升性能。在Faster Transformer&#x…

位姿估计 | 目标体坐标系相对于相机坐标系的位姿估计及其Python代码

目录 引言技术流程1. PNP介绍2. ICP介绍a. 利用ICP求解目标相对相机的位姿b. 利用ICP求解相机帧间运动 Python代码 引言 本文接着分享空间目标位姿跟踪和滤波算法中用到的一些常用内容,希望为后来者减少一些基础性内容的工作时间。以往分享总结见文章:位…

Redis 之Jedis 加springboot整合Redis

Jedis API 文档 在线文档: https://www.mklab.cn/onlineapi/jedis/ Jedis 介绍 Jedis 工作示意图 Java 程序操作Redis 的工具 示意图 Jedis 操作Redis 数据 快速入门 创建maven 项目 注意二步是路径配置自己想放哪里 三步是 定义包的层次结构 嫌弃麻烦的也可以不设置 …