//我们在从金字塔的图像中获取特征点时为每一个特征点计算了描述子
//现在看看如何计算一个空间的地图点的描述子
void MapPoint::ComputeDistinctiveDescriptors()
{// Retrieve all observed descriptorsvector<cv::Mat> vDescriptors;//获取到某一个地图点可以被哪些关键帧观测到以及在这些关键帧上与该地图点对应的特征点的编号map<KeyFrame*,size_t> observations;{unique_lock<mutex> lock1(mMutexFeatures);if(mbBad)return;observations=mObservations;}if(observations.empty())return;//vDescriptors用来存储这些所有与可以观测到该地图点的特征点的描述子vDescriptors.reserve(observations.size());for(map<KeyFrame*,size_t>::iterator mit=observations.begin(), mend=observations.end(); mit!=mend; mit++){//获取可以观测到此地图点的所有关键帧KeyFrame* pKF = mit->first;//然后获取,在该关键帧下与该地图点对应的特征点的描述子//vDescriptors中存储了所有的那些可以观测到该地图点的图像上的与之对应的特征点的描述子。if(!pKF->isBad())vDescriptors.push_back(pKF->mDescriptors.row(mit->second));}if(vDescriptors.empty())return;// Compute distances between themconst size_t N = vDescriptors.size();//Distances是一个N*N的二维数组float Distances[N][N];//计算任意两个描述子之间的海明距离//Distances[N][N]是一个对称矩阵并且对角线上的元素都为0for(size_t i=0;i<N;i++){Distances[i][i]=0;for(size_t j=i+1;j<N;j++){int distij = ORBmatcher::DescriptorDistance(vDescriptors[i],vDescriptors[j]);Distances[i][j]=distij;Distances[j][i]=distij;}}// Take the descriptor with least median distance to the rest//需要找到的是一个最小的中值距离int BestMedian = INT_MAX;int BestIdx = 0;for(size_t i=0;i<N;i++){//将Distences中的每一行单独拿出来//因为在这个矩阵中第i行表示,第i个描述子与其他所有描述子之间的海明距离vector<int> vDists(Distances[i],Distances[i]+N);//将这些距离进行排序sort(vDists.begin(),vDists.end());//经过排序之后都要取排序后的中值int median = vDists[0.5*(N-1)];//遍历Distances中的所有行找到一个最小的中值,那么该描述子就可以代表这个地图点的描述子if(median<BestMedian){BestMedian = median;BestIdx = i;}}{unique_lock<mutex> lock(mMutexFeatures);mDescriptor = vDescriptors[BestIdx].clone();}
}

Take the descriptor with least median distance to the rest

就是在所有的描述子中找到那个与其他所有的描述子之间的距离的中值最小的描述子作为该地图点的描述子,

这里选择的是中值作为衡量标准。

ORB-SLAM2中MapPoints的描述子的计算相关推荐

  1. SLAM--PL-SLAM中基于线特征的初始化方法(LSD算法,LBD描述子,计算R和t)

    SLAM中基于线特征的初始化方法 线特征的初始化 直线段检测算法---LSD:a Line Segment Detector 描述子---LBD:Line detection and descript ...

  2. PCL中3D特征描述子Shot详解

    上周点云公众号开始分享群友们的反馈分享,由博主分配任务,半个月甚至一个月参与学习小伙伴的反馈给群主,并在微信交流群中进行学术交流,加强大家的阅读文献能力,并提高公众号的分享效果.已经有一些开始陆续反馈 ...

  3. Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?

    Surf算法是一把牛刀,我们可以很轻易的从网上或各种Opencv教程里找到Surf的用例,把例程中的代码或贴或敲过来,满心期待的按下F5,当屏幕终于被满屏花花绿绿的小圆点或者N多道连接线条霸占时,内心 ...

  4. ORB-SLAM2-金字塔求解-特征点的提取-描述子的计算

    //这个成员函数重载了函数括号运算符,让他具有函数的特点 //但是还不知道在其他程序块是如何应用这块代码的. //InputArray和OutputArray是opencv中的两个函数接口 void ...

  5. 详细解读ORBSLAM中的描述子提取过程

    一直都在基于ORBSLAM做一些相关的开发,只知道进来的图片会直接提取出BRIEF描述子,但是都没有详细地看过它具体的提取过程,今天仔细研究了一下代码和相关理论,弄清楚之后感觉神清气爽,部分内容查找有 ...

  6. M2DP:一种新的三维点云描述子及其在回环检测中的应用

    文章:M2DP: A Novel 3D Point Cloud Descriptor and Its Application in Loop Closure Detection 作者:Li He , ...

  7. (01)ORB-SLAM2源码无死角解析-(31) ORB特征匹配→词袋BoW:BRIEF描述子转BoW向量

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  8. ORB SLAM2源码解读(三):Frame类

    文章目录 前言 构造函数 双目相机 RGBD相机 单目相机 ExtractORB:提取特征点 ComputeBoW:计算词袋数据 SetPose:设置相机外参 isInFrustum:判断一个MapP ...

  9. 特征描述子提取公用接口

    OpenCV封装了一些特征描述子提取算法,使得用户能够解决该问题时候方便使用各种算法.这章用来计算的描述子提取被表达成一个高维空间的向量 vector.所有实现 vector 特征描述子子提取的部分继 ...

最新文章

  1. python图合并_Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
  2. 如何把使用到android res文件夹下面资源(R.xx.xx)的工程打包成jar文件,供其它项目使用...
  3. Spark RDD概念学习系列之RDD的重要内部属性(十五)
  4. 成功解决numpy.core._internal.AxisError: axis -1 is out of bounds for array of dimension 0
  5. 【SpringMVC 之应用篇】 1_SpringMVC入门 —— 第一个 Spring MVC 程序
  6. Android:阻止输入法将图片压缩变形
  7. 解决wmv播放的问题
  8. linux命令 正则表达式,详解Linux命令中的正则表达式
  9. 女神!浙大教授荣获世界杰出女科学家奖!
  10. poi comment
  11. MyEclipse10 中的两种FreeMarker插件的安装与配置
  12. keepalived 和 zookeeper的区别
  13. jquery1.9+获取append后的动态元素
  14. Python+OpenCV:直方图均衡化(Histogram Equalization)
  15. Cuda-convnet配置指南 on Windows8.1+CUDA6.5+VS2013
  16. php5中文手册 pdf_tp5.0完全开发手册
  17. 南方cass字体样式设置_cass改变字体格式 cass字体样式管理器
  18. 网络操作系统VyOS之NAT实践
  19. c++二进制转化成十进制
  20. 软件开发常用英语词汇

热门文章

  1. Fifth scrum meeting - 2015/10/30
  2. mysql一些写常用命令
  3. 【转】高性能WEB开发系列之重绘与回流
  4. 如何使用三态工作流 - [MOSS 2007应用日记]
  5. 操作系统原理之操作系统简介(第一章)
  6. crm 一级菜单排序,二级菜单选中并且展开,非菜单权限的归属,权限粒度控制到按钮级别...
  7. 关于群论证明费马小定理?
  8. Axure下拉框级联操作
  9. 1070: [SCOI2007]修车
  10. Python 执行代码的两种方式