讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/123092196 文末正下方中心提供了本人 联系方式, 点击本人照片即可显示 W X → 官方认证 {\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证} 文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证
一、前言上一篇博客,我们对 ORBextractor::operator() 中调用的ComputePyramid(image)函数进行了讲解,那么接下来我们就是要分析紧跟在其后面的 ComputeKeyPointsOctTree(allKeypoints) 函数进行讲解。其代码实现位于src/ORBextractor.cc文件中。在讲解代码之前,我们先来具体的了解一下ORC特征,前面的博客我们提及到ORB特征主要由 Oriented FAST 关键点与 Rotated BRIEF 描述子两个部分组成。
二、FAST关键点
我们先来了解一下什么四FAST关键。判断一个像素点是否为FAST关键点,主要流程如下:
1、选取像素p,假设它的亮度为Ip;
2、设置一个阈值T(比如Ip的20%);
3、以像素p为中心,选取半径为3的圆上的16个像素点;
4、假如选取的圆上,有连续的N个点的亮度大于Ip+T或小于Ip-T,那么像素p可以被认为是关键点;
通常取12,即为FAST-12。其他常用的N取值为9和11,它们分别被称为FAST-9,FAST-11)。
5、循环以上4步,对每一个像素执行相同操作。
简单的图示如下: FAST是一种角点,主要检测局部像素灰度变化明显的地方,以速度快著称。它的思想是:如果一个像素与它邻域的像素差别较大(过亮或过暗),那它更可能是角点。
在FAST-12算法中,为了更高效,可以添加一项预测试操作,以快速地排除绝大多数不是角点的像素。具体操作为,对于每个像素,直接检测邻域圆上的第1,5,9,13个像素的亮度。只有当这四个像素中有三个同时大于Ip+T或小于Ip-T时,当前像素才有可能是一个角点,否则应该直接排除。这样的预测试操作大大加速了角点检测。此外,原始的FAST角点经常出现“扎堆”的现象。所以在第一遍检测之后,还需要用非极大值抑制(Non-maximal suppression),在一定区域内仅保留响应极大值的角点, 避免角点集中的问题。
FAST特征点的计算仅仅是比较像素间亮度的差异,速度非常快,但它也有一些问题如下:
F A S T 特征点数量很大且不确定 → \color{red}{FAST特征点数量很大且不确定→} FAST特征点数量很大且不确定→FAST特征点数量很大且不确定,而我们往往希望对图像提取固定数量的特征。因此,在ORB中,对原始的FAST算法进行了改进。 我们可以指定最终要提取的角点数量N,对原始FAST角点分别计算Harris响应值,然后选取前N NN个具有最大响应值的角点,作为最终的角点集合。
F A S T 角点不具有方向信息 → \color{red}{FAST角点不具有方向信息→} FAST角点不具有方向信息→由于它固定取半径为3的圆,存在尺度问题 :远处看着像是角点的地方,接近后看可能就不是角点了。针对FAST角点不具有方向性和尺度的弱点,ORB添加了尺度和旋转的描述。尺度不变性由构建图像金字塔,并在金字塔的每一层上检测角点来实现。而特征的旋转是由灰度质心法(Intensity Centroid)实现的
金字塔我们已经在前面进行了讲解,对于灰度质心法(Intensity Centroid)稍后会进行讲解
三、代码流程
//用于存储所有的关键点信息
allKeypoints.resize(nlevels);
//循环对图像金字塔进行处理
for (int level = 0; level
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?