欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《视觉SLAM14讲》学习笔记——ORB特征提取与匹配

程序员文章站 2022-06-11 12:08:50
...

本篇博客是对于《视觉SLAM十四讲》中第7讲的ORB特征提取和匹配部分进行一个记录,后续会继续完善和补充ORB的其他内容

7.1 特征点法

  • 视觉里程计算法主要分为:特征点法直接法
  • 特征点法的优点:稳定,对光照、动态物体不敏感

7.1.1 特征点

  • 提取角点的算法有:Harris角点、FAST角点、GFTT角点
  • 单纯的角点不具有尺度不变性,目前主要的特征点有**SIFT1 、SURF、ORB2**等
  • 特征点由**关键点(Key-point)描述子(Descriptor)**组成
    • 关键点:特征点在图像里的位置,有些特征点还带有朝向、大小等信息
    • 描述子:通常是一个向量,按照某种人为设计的方式,描述了该关键点周围像素的信息

7.1.2 ORB特征

FAST关键点

  • ORB改进了FAST检测子不具有方向信息和尺度的问题,并且使用二进制描述子BRIEF(Binary Robust Independent Elementary Feature)
    • 尺度不变性:构建图像金字塔,并在金字塔的每一层上检测角点《视觉SLAM14讲》学习笔记——ORB特征提取与匹配
    • 旋转不变性:灰度质心法(Intensity Centroid)找一个灰度值作为权重的中心C,连接几何中心O和C,得到一个方向向量,

BRIEF描述子

  • BRIEF是二进制的描述子,存储方便,实时性也好

7.1.3 特征匹配

  • 最简单的特征匹配方法是暴力匹配:对于每一个特征点xtn和所有的xt+1n测量描述子的距离,然后选取距离最近的点对。
  • 由于这里使用的BRIEF(二进制 0或1),所以只需要比较不同的位数就可以了

7.2 实践(C++ & OpenCV-3.3.1)

7.2.1 OpenCV的ORB特征

具体的代码就不放在这了,这里我附上了我自己的Github链接和书的作者的Github链接。
列举一些需要记住的编写方式:

// 初始化
// OpenCV中特征点的类型为“==KeyPoint==”
vector<KeyPoint> keypoints_1, keypoints_2;
Mat descriptors_1, descriptors_2;
// 
Ptr<FeatureDetector> detector = ORB::create();
Ptr<DescriptorExtractor> descriptor = ORB::create();
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce-Hamming");

  1. 尺度不变特征变换(Scale-Invariant Feature Transform) ↩︎

  2. ORB (Oriented FAST and Rotated BRIEF) ↩︎