ORB 特征提取算法(理论篇)

风流意气都作罢 提交于 2019-11-27 05:08:53

Abstract

ORB 是 Oriented Fast and Rotated Brief 的简称,可以用来对图像中的关键点快速创建特征向量,这些特征向量可以用来识别图像中的对象。
其中,Fast 和 Brief 分别是特征检测算法和向量创建算法。ORB 首先会从图像中查找特殊区域,称为关键点。关键点即图像中突出的小区域,比如角点,比如它们具有像素值急剧的从浅色变为深色的特征。然后 ORB 会为每个关键点计算相应的特征向量。ORB 算法创建的特征向量只包含 1 和 0,称为二元特征向量。1 和 0 的顺序会根据特定关键点和其周围的像素区域而变化。该向量表示关键点周围的强度模式,因此多个特征向量可以用来识别更大的区域,甚至图像中的特定对象。
ORB 的特点是速度超快,而且在一定程度上不受噪点和图像变换的影响,例如旋转和缩放变换等。

FAST 算法

ORB 特征检测的第一步是查找图像中的关键点,而关键点检测算法即使用 FAST 算法。
FAST 是 Features from Accelerated Segments Test 的简称,可以快速选择关键点,算法步骤如下:
给与一个像素点 p,FAST 比较目标 p 圆圈范围中的 16 个像素,每个像素按高于 p,小于 p,或者与 p 相似,分为三类。

注意这里的比较是带有阈值 h 的。对于给定的阈值 h,更亮的像素将是亮度超过 Ip+h 的像素,更暗的像素将是亮度低于 Ip-h 的像素,相似像素将是亮度在这两个值之间的像素。在对像素分类后, 如果如果圈圈上有 8 个以上的相连像素,暗于或亮于 p 则将像素 p 选作关键点。
而 FAST 如此高效的原因是,仅将 p 与圆圈中的 4 个等距像素相比。这种方法已经证明和比较 16 个周围像素的效果相同。如果至少有一对连续像素的亮度高于或低于 p,则将 p 选作关键点。这种优化使得在整个图像中搜索关键点的时间缩短了四倍。

但是,这些关键点可以像我们提供什么样的信息?对比邻近像素的亮度有何意义?首先观察一下 FAST 算法标记关键点的图像。

可以看出关键点位于亮度有变化的区域,此类区域通常确定了某种边缘,例如猫的爪子。边缘定义了猫的界限,以及脸部区域的界限,因此这些关键点使我们能够识别这只猫,而不是图像中的任何其他对象或背景。

BRIEF 算法

我们已经知道 ORB 如何使用 FAST 确定图像中的关键点,下面我们将了解 ORB 如何使用 BRIEF 算法,并将这些关键点转换为特征向量。

ORB 算法的第二步是将第一个算法发现的关键点变成特征向量,这些特征向量可以共同表示一个对象。

要创建特征向量,ORB 会用到 BRIEF 算法。BRIEF 是 Binary Robust Independent Elementary Features 的简称,它的作用是根据一组关键点创建二元特征向量。正如在简介视频中看到的,二元特征向量又称为二元描述符,是仅包含 1 和 0 的特征向量。在 BRIEF 中 每个关键点由一个二元特征向量描述,该向量一般为 128-512 位的字符串,其中仅包含 1 和 0。

注意,这里的“位”是二进制位的简称,1 位只能存储一个二进制值,要么 1 要么是 0。位字符串是一组位,这些是位字符串示例。

第一个是 1 位字符串 因此只存储 1 位。第二个是 2 位字符串,因此可以存储 2 个二进制位。在此示例中它存储的是 0 和 1。同样,第三个是 3 位字符串,因此可以存储 3 个位,以此类推。计算机运行的是二进制或机器代码,因此使用二元特征向量的一大优势是可以非常高效地存储在内存中,并且可以快速计算。速度对实时应用来说极为关键,这些特性不仅使 BRIEF 速度非常快,而且使 BRIEF 能够在计算资源非常有限的设备(例如智能手机)上运行。

BRIEF 如何为每个点创建这些二元描述符?BRIEF 算法首先利用高斯核对给定图像进行平滑处理,以防描述符对高频噪点过于敏感。然后,对于给定关键点,例如猫爪上的这个点。

BRIEF 从该关键点周围界定好的邻域内随机选择一对像素,关键点周围的邻域称为 Patch,它是一个具有特定像素宽度和高度的正方形。
这里显示的随机对中的第一个像素,是一个蓝色正方形,它是从以关键点为中心的高斯分布中抽取的一个像素,标准偏差或分散趋势为 σ。

这里显示为黄色正方形的像素,是随机对中的第二个像素。它是从以该第一个像素为中心的高斯分布中抽取的像素,标准偏差为 σ/2,经验表明这种高斯选择提高了特征匹配率。

BRIEF 然后开始为关键点构建二元描述符,方法是如下所示地比较这两个像素的亮度。如果第一个像素比第二个亮,则为描述符中的相应位分配值 1,否则分配值 0。

在这个示例中第二个像素比第一个亮,因此我们为特征向量的第一个位分配值 0。特征向量的第一个位对应的是这个关键点的第一个随机点对,然后 BRIEF 会针对同一关键点选择新的随机像素对比较它们的亮度并为特征向量中的下个位分配 1 或 0。

在上面新选取的随机像素中,我们看到现在第一个像素比第二个亮,因此为特征向量中的第二个位分配值 1。

对于 256 位向量,BRIEF 会针对同一关键点重复这一流程 256 次,然后转到下个关键点。接着将 256 个像素亮度比较结果放入该关键点的二元特征向量中。BRIEF 像这样为图像中的每个关键点创建一个向量。

后记

本文是 Udacity 计算机视觉纳米学位课程笔记,下一步将在 OpenCV 中应用 ORB 算法,并观察 ORB 算法的鲁棒性。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!