本文大部分内容来自ORB特征提取详解,在此基础上加上自己对原论文的理解。
ORB(Oriented FAST and Rotated BRIEF)是一种快速提取特征点和描述子的算法。其特征检测基于FAST,采用BRIEF描述子并加以改进。基于《ORB: an efficient alternative to SIFT or SURF》
1.尺度和旋转不变性的oFAST检测
1.1Fast经典方式提取角点(不具有旋转无关、尺度无关)
第一步,参考文章SIFT角点简介;
第二步:对提取出来的特征点进行Harris特征点检测,检测时设立低阈值,以获得多于N个的fast特征点。
并按照harris的代价函数排序得到最终需要的N个特征值。
1.2尺度无关性
设置一个比例因子scaleFactor(opencv默认为1.2)和金字塔的层数nlevels(pencv默认为8)。将原图像按比例因子缩小成nlevels幅图像。缩放后的图像为:I’= I/scaleFactork(k=1,2,…, nlevels)。nlevels幅不同比例的图像提取特征点总和作为这幅图像的oFAST特征点。
1.3旋转不变性
实现旋转无关性需要为每个特征带一个旋转方向信息。常用的有MAX和BIN的方法,以及ORB的灰度质心方法
BIN:
SIFT中的旋转性是检测特征点邻域内所有像素点的梯度,并构成一个梯度方向直方图(10个或8个柱的直方图),选择最大的柱所对应的梯度范围作为这个特征的主方向。此外还有
MAX
选择特征点邻域内值最大的梯度所对应的方向作为主方向。其效果要比BIN方法稍差。
灰度质心
ORB算法提出使用h灰度质心(intensity centroid) [2] [ 2 ] 来确定FAST特征点的方向。通过计算一个矩来计算特征点以r为半径范围内的质心,特征点坐标到质心形成一个向量作为该特征点的方向。
一个图像块(比如5x5的图像块中),对应的2x2的矩的元素表达为:
而该图像窗口的质心就是:
那么整个窗口的旋转为:
其中