《视觉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)
- 尺度不变性:构建图像金字塔,并在金字塔的每一层上检测角点
- 旋转不变性:灰度质心法(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");
上一篇: 最小费用最大流
下一篇: spring mvc路径匹配原则详解