首页 > 编程语言 >ORB-SLAM2源码学习:MapPoint.cc:MapPoint::UpdateNormalAndDepth()计算平均观测方向以及观测距离范围1

ORB-SLAM2源码学习:MapPoint.cc:MapPoint::UpdateNormalAndDepth()计算平均观测方向以及观测距离范围1

时间:2024-12-06 18:58:02浏览次数:6  
标签:关键帧 Mat 地图 观测 MapPoint pRefKF 源码 cv

前言

这个函数是属于地图点属性的一部分。

1.函数声明

void MapPoint::UpdateNormalAndDepth()
{
    ....
}

2.函数定义

1.获取观测到该地图点的所有关键帧的信息 

map<KeyFrame*,size_t> observations;
    KeyFrame* pRefKF;
    cv::Mat Pos;
    {
        unique_lock<mutex> lock1(mMutexFeatures);
        unique_lock<mutex> lock2(mMutexPos);
        if(mbBad)
            return;

        observations=mObservations; // 获得观测到该地图点的所有关键帧
        pRefKF=mpRefKF;             // 观测到该点的参考关键帧(第一次创建时的关键帧)
        Pos = mWorldPos.clone();    // 地图点在世界坐标系中的位置
    }

2.计算平均观测方向

// 能观测到该地图点的所有关键帧,对该点的观测方向归一化为单位向量,然后进行求和得到该地图点的朝向
    // 初始值为0向量,累加为归一化向量,最后除以总数n
    cv::Mat normal = cv::Mat::zeros(3,1,CV_32F);
    int n=0;
    for(map<KeyFrame*,size_t>::iterator mit=observations.begin(), mend=observations.end(); mit!=mend; mit++)
    {
        KeyFrame* pKF = mit->first;
        cv::Mat Owi = pKF->GetCameraCenter();
        // 获得地图点和观测到它关键帧的向量并归一化
        cv::Mat normali = mWorldPos - Owi;
        normal = normal + normali/cv::norm(normali);                       
        n++;
    } 

    cv::Mat PC = Pos - pRefKF->GetCameraCenter();                           // 参考关键帧相机指向地图点的向量(在世界坐标系下的表示)
    const float dist = cv::norm(PC);                                        // 该点到参考关键帧相机的距离
    const int level = pRefKF->mvKeysUn[observations[pRefKF]].octave;        // 观测到该地图点的当前帧的特征点在金字塔的第几层
    const float levelScaleFactor =  pRefKF->mvScaleFactors[level];          // 当前金字塔层对应的尺度因子,scale^n,scale=1.2,n为层数
    const int nLevels = pRefKF->mnScaleLevels;                              // 金字塔总层数,默认为8

 3.计算观测距离范围

{
        unique_lock<mutex> lock3(mMutexPos);
        // 使用方法见PredictScale函数前的注释
        mfMaxDistance = dist*levelScaleFactor;                              // 观测到该点的距离上限
        mfMinDistance = mfMaxDistance/pRefKF->mvScaleFactors[nLevels-1];    // 观测到该点的距离下限
        mNormalVector = normal/n;                                           // 获得地图点平均的观测方向
    }

结束语

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

 

 

标签:关键帧,Mat,地图,观测,MapPoint,pRefKF,源码,cv
From: https://blog.csdn.net/2301_76831056/article/details/143646186

相关文章

  • flask框架爱团购系统设计与实现毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于团购系统的研究,现有研究主要集中在大型综合电商平台的团购功能上,如淘宝、美团等平台的团购模式。专门针对特定的爱团购系统的研究......
  • flask框架城镇智慧停车系统毕设源码+论文
    校园二手货物交易平台m1a2o本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于城镇智慧停车系统的研究,现有研究多集中于大城市的停车系统构建与优化,如城市级智慧停车管理系统主要聚......
  • 【可白嫖源码】Springboot校园外卖系统小程序
     摘 要随着生活质量的日益改善以及生活节奏的日益加快,人们对餐饮需求的质量以及速度也随之发生着变化。为了满足社会需求,餐饮的高质量和快节奏也渐渐使电话订餐和网上订餐业日益发展壮大。这也促使了以大学生为主的校园外卖业的发展。校园外卖主要是以大学生为主的一种个性......
  • Y20030029 Java+微信+SPRINGBOOT+MYSQL+LW+传统文化展示微信小程序的设计与开发 配置
    传统文化展示微信小程序1.项目摘要2.课题开发的背景和意义3.项目功能4.界面展示5.源码获取1.项目摘要基于微信小程序的传统文化展示小程序是一个集合了多种传统文化元素与现代化技术的创新平台。它充分利用了微信小程序的便捷性和普及性,为广大用户提供了一个深入......
  • 可白嫖源码-springboot基于微信小程序的点餐系统(案例分析)
    摘 要基于微信的点餐系统是利用微信中的小程序功能来实现,自2011年微信诞生以来,微信的使用越来越普遍,尤其最近几年微信旗下的微信小程序因其不占内存,用完即走的特点吸引越来越多用户,使用微信小程序设计的系统也越来越多。本课题利用了发展至今逐渐趋于成熟的小程序来满足餐饮......
  • 短视频矩阵系统源码开发思路分享,快速搭建高效矩阵体系
    在当下竞争激烈的短视频赛道,搭建一个高效、稳定的短视频矩阵体系显得尤为重要。今天给大家分享基于原生态矩阵系统开发的思路,以确保系统的高性能和安全性。一、前提准备首先确保你的服务器环境安装并配置好了PHP,并且有相应的权限去操作文件等相关资源。同时,要实现智能剪辑视......
  • 基于SSM的汽车在线租赁系统【附源码+文档】
    ......
  • 基于SSM的多用户个人博客网站【附源码+文档】
    ......
  • 第13天:Web应用&源码泄漏&开源闭源&指纹识别&GIT&SVN&DS&备份
    知识点:1、业务资产-应用类型分类2、web单域名获取-接口查询3、web子域名获取-解析枚举4、web架构资产-平台指纹识别1、开源-CMS指纹识别源码获取方式、2、闭源-习惯&配置&特性等获取方式3、闭源-托管资产平台资源搜索监控使用工具:潮汐指纹识别识别到cms然后去网上搜......
  • YOLOv8车牌识别系统 深度学习 LPRNet算法 pytorch 大数据 毕业设计(源码)✅
    YOLOv8车牌识别系统深度学习LPRNet算法pytorch大数据毕业设计(源码)✅1、项目介绍技术栈:Python3.8YOLOv8深度学习LPRNet算法pytorch2、项目界面(1)上传图片进行车牌识别(2)上传图片进行车牌识别2(3)多车牌号码进行车牌识别(4)上传视频进行车牌识别实时检测(5)连接......