首页 > 编程语言 >ORB-SLAM2源码学习:LocalMapping.cc: LocalMapping::MapPointCulling剔除不合格的地图点

ORB-SLAM2源码学习:LocalMapping.cc: LocalMapping::MapPointCulling剔除不合格的地图点

时间:2024-11-30 15:59:44浏览次数:7  
标签:lit MapPointCulling mlpRecentAddedMapPoints int LocalMapping 地图 观测 相机 源码

前言

新增地图点需要经过比较严苛的筛选才能留下,只有这样才能提高定位和建图的准确性、控制地图建图规模、降低计算量。

新增地图点主要来自a.双目相机和RGB-D相机模式下的跟踪线程产生的地图点b.局部建图线程中关键帧之间生成的新的地图点。 

函数声明

void LocalMapping::MapPointCulling()

函数定义

地图点(即关键帧中生成的 3D 点)的删除条件

满足以下任意一个条件的地图点会被删除:

条件一:地图点的观测相机数量相对于预测相机数量的比例小于 25%。

解释:每个地图点在被创建时都有一个预计的观测相机数量,这些观测相机可以看到或检测到这个地图点。当实际观测到该地图点的相机数量小于预测数量的 25% 时,该地图点将被删除。这一条件的设立目的是删除那些在实际观测中少于预期的地图点,减少冗余数据。

条件二:从地图点建立开始,已经超过了 2 个关键帧,且该地图点的观测相机数未超过阈值 cnThObs。

cnThObs 的具体定义:对于单目相机,cnThObs = 2。对于双目或 RGB-D 相机,cnThObs = 3。

相机观测计数方法:每观测一次,观测相机数加 1。如果用双目或 RGB-D 相机观测一次,则相机数加 2。

解释:此条件设立是为了清除那些在创建后无法被足够多的相机观测到的地图点。当一个地图点建立后,如果经过了 2 个关键帧的时间周期,且观测到该点的相机数量仍不足,则说明该点的观测数据较少,可能并不是一个稳定的、可靠的地图点,因此会将其删除。这一操作有助于保持地图点的准确性和有效性。

void LocalMapping::MapPointCulling()
{
    // Check Recent Added MapPoints
    list<MapPoint*>::iterator lit = mlpRecentAddedMapPoints.begin();
    const unsigned long int nCurrentKFid = mpCurrentKeyFrame->mnId;

    // Step 1:根据相机类型设置不同的观测阈值
    int nThObs;
    if(mbMonocular)
        nThObs = 2;
    else
        nThObs = 3;
    const int cnThObs = nThObs;
	
	// Step 2:遍历检查新添加的地图点
    while(lit!=mlpRecentAddedMapPoints.end())
    {
        MapPoint* pMP = *lit;
        if(pMP->isBad())
        {
            // Step 2.1:已经是坏点的地图点仅从队列中删除
            lit = mlpRecentAddedMapPoints.erase(lit);
        }
        else if(pMP->GetFoundRatio()<0.25f)
        {
            // Step 2.2:跟踪到该地图点的帧数相比预计可观测到该地图点的帧数的比例小于25%,从地图中删除
            // (mnFound/mnVisible) < 25%
            // mnFound :地图点被多少帧(包括普通帧)看到,次数越多越好
            // mnVisible:地图点应该被看到的次数
            // (mnFound/mnVisible):对于大FOV镜头这个比例会高,对于窄FOV镜头这个比例会低
            pMP->SetBadFlag();
            lit = mlpRecentAddedMapPoints.erase(lit);
        }
        else if(((int)nCurrentKFid-(int)pMP->mnFirstKFid)>=2 && pMP->Observations()<=cnThObs)
        {
            // Step 2.3:从该点建立开始,到现在已经过了不小于2个关键帧
            // 但是观测到该点的相机数却不超过阈值cnThObs,从地图中删除
            pMP->SetBadFlag();
            lit = mlpRecentAddedMapPoints.erase(lit);
        }
        else if(((int)nCurrentKFid-(int)pMP->mnFirstKFid)>=3)
            // Step 2.4:从建立该点开始,已经过了3个关键帧而没有被剔除,则认为是质量高的点
            // 因此没有SetBadFlag(),仅从队列中删除
            lit = mlpRecentAddedMapPoints.erase(lit);
        else
            lit++;
    }
}

结束语

以上就是我学习到的内容,如果对您有帮助请多多支持我,如果哪里有问题欢迎大家在评论区积极讨论,我看到会及时回复。

标签:lit,MapPointCulling,mlpRecentAddedMapPoints,int,LocalMapping,地图,观测,相机,源码
From: https://blog.csdn.net/2301_76831056/article/details/143704600

相关文章

  • ORB-SLAM2 ---- LocalMapping::MapPointCulling()和LocalMapping::CreateNewMapPoints
    文章目录一、函数意义二、LocalMapping::MapPointCulling()1.函数讲解2.函数代码三、LocalMapping::CreateNewMapPoints()1.函数讲解2.函数代码四、总结一、函数意义这两个函数是局部见图的核心函数之二,作用是删除不好的地图点,为创造新的地图点。学习局部建图......
  • flask框架高校疫情管理系统的设计与实现(毕设源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于高校疫情管理系统的研究,现有研究主要以疫情防控的某一环节或部分功能为主,如健康监测或物资管理等。专门针对集班级、学生、健康信......
  • flask框架化妆品商城网站(毕设源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于化妆品商城网站的研究,现有研究主要以大型综合电商平台中的化妆品板块为主,专门针对独立的化妆品商城网站的研究较少。在国内外,电商......
  • springboot343大学生选修选课系统的设计与实现(论文+源码)_kaic
     毕业设计(论文)大学生选修选课系统设计与实现      摘 要传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装大学生选修选课系统软件来发挥其高效地信息处理......
  • 在线考试系统(源码+数据库+报告)
    基于SpringBoot的在线考试系统,系统包含两种角色:管理员、用户,系统分为前台和后台两大模块,主要功能如下。前台:-首页:展示系统的一些基本信息和轮播图。-试卷表:展示可供用户选择的试卷列表。-公告:展示系统的公告信息,包括考试通知、成绩公布等。-课程:展示用户所选课程的相......
  • 学生网上选课系统(源码+数据库+报告)
    316基于SpringBoot的学生网上选课系统,系统包含三种角色:管理员、老师、学生,系统分为前台和后台两大模块,主要功能如下。管理员:个人中心:管理个人信息,包括修改个人信息、查看选课记录等。基础数据管理:管理系统的基础数据,包括学院信息、专业信息、班级信息等。教学资源管理:管......
  • 基于Web实现的就业信息管理系统设计与实现(计算机毕业设计,附源码+文档)
    文章目录1.内容见下图2.详细视频演示3.系统运行效果介绍4.技术框架4.1前后端分离架构介绍4.3程序操作流程5.项目推荐6.成品项目7.系统测试7.1系统测试的目的7.2系统功能测试8.代码参考9.为什么选择我?10.获取源码1.内容见下图2.详细视频演示文章......
  • 【bluedroid】A2dp Source播放流程源码分析
    在蓝牙音频传输领域,A2DP(AdvancedAudioDistributionProfile,高级音频分发协议)扮演着关键角色,它能够实现高质量音频(如立体声音乐)通过蓝牙在不同设备间的传输。在Android系统所采用的Bluedroid蓝牙协议栈里,A2DPSource承担着音频流发送的重任,将音频数据传输至A2DPSink(像......
  • 开源短视频源码,通过压缩和合并资源实现首屏优化
    开源短视频源码,通过压缩和合并资源实现首屏优化通过压缩CSS、JavaScript和HTML等开源短视频源码中的静态资源文件,并将它们合并为较少的文件,可以减少网络请求次数和文件大小,加快页面加载速度。压缩以下是一个示例Webpack配置文件,展示如何使用css-minimizer-webpack-plugi......
  • 直播短视频系统源码,一步步实现缓存机制
    直播短视频系统源码,一步步实现缓存机制1、逻辑冲突设计的伊始谈到,为了保证解耦,我们希望缓存机制不能修改播放器源码,但MediaPlayer如何在不改源码的情况下,将自身的缓存加载逻辑交给我们的CacheService呢?如下述代码中所展示的,这种实现似乎无法避免:publicclassMy......