news 2026/7/10 13:10:56

ORB-SLAM2 从理论到代码实现(十六):ORB 关键点提取和描述子

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ORB-SLAM2 从理论到代码实现(十六):ORB 关键点提取和描述子

1. 什么是特征点?

特征点由关键点和描述子组成,关键点是该特征点在图像中的位置,有些还包括方向、大小等信息,描述子是用来描述该关键点周围像素的一种描述方法,外观相似的关键点应该具有相似的描述子,想要判断两个不同位置的关键点是否相似,可以通过计算他们之间描述子的距离来确定。

2. ORB特征点的关键点和描述子

ORB的关键点是在 FAST (Features from Accelerated Segments Test) 关键点基础上进行了改进,主要是增加了特征点的主方向,称之为Oriented FAST。描述子是在 BRIEF (Binary Robust Independent Elementary Features) 描述子基础上加入了上述方向信息,称之为Rotated BRIEF。

3. FAST关键点

一种检测角点(在图像中,角点比平坦区域和边缘有辨识度)的方法,FAST确定关键点的速度非常快。FAST的思想是:如果一个像素和它周围的像素灰度差别较大(超过设定的阈值),并且达到一定的数目,那么这个像素很可能就是角点。具体检测过程如下:

4.FAST 描述子

BRIEF算法的核心思想是在关键点P的周围以一定模式选取N个点对,把这N个点对的比较结果组合起来作为描述子。为了保持踩点固定,工程上采用特殊设计的固定的pattern来做

5.图像金字塔保证特征点的尺度不变性

图像中检测角点存在远看是角点,近看不是角点的问题,因此采用金字塔的方式。金字塔底层是原始图像,每往上一层,就对图像做一个固定倍率的缩放,得到不同分辨率的图像。在提取ORB特征点的时候,在每一个金字塔层级上进行特征提取,这样不管相机拍摄距离物体是远还是近,都可以在某个层级提取到真正的角点。在对不同图像特征点进行特征匹配时,就可以匹配不同图像里不同层级的金字塔上提取的特征点,实现尺度不变性。

5. ORB特征点的旋转不变性

先计算关键点的“主方向”,然后统一将像素旋转到“主方向”,使得描述子不受相机旋转的影响。

6. 主方向的计算

主方向是指以该点为圆心,在指定半径内做圆,圆内的像素点的灰度值作为质量,计算出该圆质心。圆心指向质心的向量即为主方向。

主方向为

7. BRIEF描述子

一种二进制编码的描述子,以关键点为中心,取固定大小的窗口,在窗口内随机选取一对点 (x0, y0), (x1, y1),如果 (x0, y0) 的灰度值大于等于 (x1, y1),则记为0,小于则记为1。这样如果选取256对点,则可以得到一个256维的二进制描述子。比较两张图象的关键点是否为一点,比较描述子的汉明距离即可。

8. 具有旋转不变性的描述子

在算出主方向后,在计算描述子之前用这个角度旋转图片。把关键点周围一定区域内的像素点旋转到主方向与x轴重合的位置。

原本应该取 (x, y) 位置的像素,旋转之后应该取的像素位置变为:

通过三角函数计算可以得到旋转后新的像素点的坐标为:

ORB-SLAM2里采用了一种固定的选点模板,一共选了256对点。这个模板保证了描述子具有较高的辨识度。在每个关键点都用这个模板确定每一维描述子。

9. 代码实现时的加速方法

在ORB-SLAM2代码实现中,使用了技巧加速主方向的计算:

参考文献

ORB-SLAM2系列第二章——ORB 特征点提取_running snail szj的博客-CSDN博客_orb特征点提取

【ORB-SLAM2】(一)ORB关键点提取和描述子 - 知乎

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 13:09:57

Vite+Vue3+Electron构建客户端桌面应用

这里我的vue3vite项目已经有了,在这基础上使用electron转换成桌面应用。 1、获取electron配置文件 首先可以执行以下命令,从electron的官网下载案例,下载会比较慢,可以直接访问git仓库,下载代码。 git clone https:…

作者头像 李华
网站建设 2026/7/10 13:07:26

168、样本分配中忽略样本 ignore sample 的阈值消融:忽略区域大小对训练稳定性影响

168、样本分配中忽略样本 ignore sample 的阈值消融:忽略区域大小对训练稳定性影响 从一次诡异的loss震荡说起 去年年底调一个YOLOv11的工业检测模型,训练到第80个epoch左右,loss突然像抽风一样上下乱跳,mAP从0.78直接掉到0.62,然后慢慢爬回来,再掉。我盯着tensorboard看…

作者头像 李华
网站建设 2026/7/10 13:07:22

并发编程之Fork/Join框架

一、基本介绍 1.1 基本介绍 Fork/Join框架是Java 7提供的一个用于并行执行任务的框架, 核心思想就是把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果,其实现思想与MapReduce有异曲同工之妙。 Fork就是把一个大任务切分为…

作者头像 李华
网站建设 2026/7/10 13:04:23

170、标签分配改进全景总结:四大分配器源码级对比与最佳配置推荐

170、标签分配改进全景总结:四大分配器源码级对比与最佳配置推荐 从一次深夜调试说起 凌晨两点,我盯着tensorboard上那条死活不涨的mAP曲线,差点把咖啡泼到键盘上。YOLOv11的baseline跑了三天,AP@50:95卡在52.3%纹丝不动。换backbone、调学习率、加数据增强,能试的都试了…

作者头像 李华
网站建设 2026/7/10 12:59:21

数字电路上拉下拉电阻原理与PIC32配置详解

1. 信号上拉与下拉的基础原理 在数字电路设计中,上拉(Pull-up)和下拉(Pull-down)是两种常见的信号处理技术。它们通过在信号线上添加电阻连接到电源(VCC)或地(GND)&#…

作者头像 李华
网站建设 2026/7/10 12:57:55

程序员的35岁,不是门槛,是面照妖镜

焦虑是这个行业的标配 "35岁是门槛"、"脑门要秃了"、"技术更新太快跟不上"——这些话你肯定听过,说不定也说过。 然后呢?然后你就焦虑了。 焦虑完了呢?继续刷手机,继续重复昨天的代码,继续在舒适区里待着。 我想说的是,如果你只想一辈…

作者头像 李华