ORB-SLAM2源码分析(单目)——关键帧的检测与创建

文章详细介绍了ORB-SLAM2系统中关键帧的概念和重要性,以及如何选择和创建关键帧。关键帧是减少信息冗余、优化计算资源的关键,选择时考虑帧间距离、运动变化和局部地图质量等因素。ORB-SLAM2采用跟踪线程宽松选择和局部建图线程剔除冗余的策略,并在回环检测中运用帧簇概念,确保系统高效运行。
摘要由CSDN通过智能技术生成

ORB-SLAM2源码分析(单目)——关键帧的检测与创建

一、 什么是关键帧

通俗来说,关键帧就是几帧普通帧里面具有代表性的一帧
相近帧之间信息冗余度很高,关键帧是取局部相近帧中最有代表性的一帧,可以降低信息冗余度。举例来说,摄像头放在原处不动,普通帧还是要记录的,但关键帧不会增加。
关键帧选择时还会对图片质量、特征点质量等进行考察,在Bundle Fusion、RKD SLAM等RGB-D SLAM相关方案中常常用普通帧的深度投影到关键帧上进行深度图优化,一定程度上关键帧是普通帧滤波和优化的结果,防止无用的或错误的信息进入优化过程而破坏定位建图的准确性。
如果所有帧全部参与计算,不仅浪费了算力,对内存也是极大的考验,这一点在前端vo中表现不明显,但在后端优化里是一个大问题,所以关键帧主要作用是面向后端优化的算力与精度的折中,使得有限的计算资源能够用在刀刃上,保证系统的平稳运行。假如你放松ORB_SLAM2 关键帧选择条件,大量产生的关键帧不仅耗计算资源,还会导致local mapping 计算不过来,出现误差累积
在后续我们的局部地图线程和闭环检测线程,都是使用关键帧来进行操作,所以关键帧非常重要
在这里插入图片描述

二、 如何选择关键帧

选择关键帧主要从关键帧自身和关键帧与其他关键帧的关系2方面来考虑。
关键帧自身质量要好,例如不能是非常模糊的图像、特征点数量要充足、特征点分布要尽量均匀等等;
关键帧与其他关键帧之间的关系,需要和局部地图中的其他关键帧有一定的共视关系但又不能重复度太高,以达到既存在约束,又尽量少的信息冗余的效果。
选取的指标主要有:
(1)距离上一关键帧的帧数是否足够多(时间)。比如我每隔固定帧数选择一个关键帧,这样编程简单但效果不好。比如运动很慢的时候,就会选择大量相似的关键帧,冗余,运动快的时候又丢失了很多重要的帧。
(2)距离最近关键帧的距离是否足够远(空间)/运动比如相邻帧根据pose计算运动的相对大小,可以是位移也可以是旋转或者两个都考虑,运动足够大(超过一定阈值)就新建一个关键帧,这种方法比第一种好。但问题是如果对着同一个物体来回扫就会出现大量相似关键帧。
(3)跟踪局部地图质量(共视特征点数目)记录当前视角下跟踪的特征点数或者比例,当相机离开当前场景时(双目或比例明显降低)才会新建关键帧,避免了第2种方法的问题。缺点是数据结构和逻辑比较复杂。
在关键帧的运用上,我认为orbslam2做的非常好,跟踪线程选择关键帧标准较宽松,局部建图线程再跟据共视冗余度进行剔除,尤其是在回环检测中使用了以关键帧为代表的帧“簇”的概念,回环筛选中有一步将关键帧前后10帧为一组,计算组内总分,以最高分的组的0.75为阈值,滤除一些组,再在剩下的组内各自找最高分的一帧作为备选帧,这个方法非常好地诠释了“关键帧代表局部”的这个理念。

三、 检测当前帧是否为关键帧(NeedNewKeyFrame)

判断当前帧是否为关键帧
在这里插入图片描述

(1) 纯VO模式和局部地图线程被占用情况下,不进行检测
在这里插入图片描述

检测成关键帧时,会将该关键帧插入到局部地图线程,如果局部地图线程正在被闭环检测使用,则不进行插入。
(2) 获取当前地图中的关键帧数目,如果距离上一次重定位较近,并且关键帧数目超出了最大限制,不插入关键帧
在这里插入图片描述

(3) 当前帧有多少地图点是被其他关键帧观测过

在这里插入图片描述

(4) 判断是否将当前帧当成关键帧进行插入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、 将当前帧作为关键帧,初始化当前关键帧并且插入(CreateNewKeyFrame)

在这里插入图片描述

(1) 判断局部建图线程是不是关闭了,如果关闭则无法插入
在这里插入图片描述

(2) 将当前帧构造成关键帧,如果是双目或者RGBD相机则生成新的地图点

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值