ORB算法的论文来自"ORB: an efficient alternative to SIFT or SURF",作者是OpenCV维护和开发的公司willowgarage的,论文名字起的很牛气,摘要里说,ORB算法比sift算法效率高两个数量级。江湖上流传的说法是ORB算法综合性能在各种测评里是最好的。
ORB算法是在FAST关键点检测+BRIEF特征上做的。
1. 假设给定一副图。
论文第3节:先用oFAST算法,检测关键点的位置。所谓oFAST,就是orientation的FAST,增加了计算关键点的角点方向。
2. 对这个图,用FAST算法,找出关键点的位置。
3. 对于关键点,用Harris角点检测,选取前N个最好的点。
4. FAST算法不能处理多尺度图像,如果需要处理多尺度的话,就对原来的图像作金字塔,然后对每个图都进行步骤2和3的处理。
5. 对于每个角点,根据Intensity Centroid算法,计算角点的方向。
论文第4节:rBRIEF,旋转敏感的BRIEF,Rotation-Aware Brief
6. brief算法是无向的。
7. 将5中计算出来的角点方向作为brief的方向,进行旋转,就得到了有向的brief,也就是steered brief。steered brief导致区分性能有所下降。这一块,作者在4.2节中说,brief特征的每个bit的值或者是0,或者是1,因此均值是0.5,variance大。从图3可以看出,brief特征的均值在0很多,距离均值0.5比较远,而steered brief特征,加入角点的方向之后,特征均值的分布就比较平均了,也就是说,相对均值0.5来说,variance变小了。variance越大,区分性能越好,这很好理解,差异性越大,表明特征之间的差别越大,越好分类,如果都特征都差不多,接近均值,就不好分了。因此,steered brief的性能肯定不如brief。那么,为什么呢steered brief会导致variance变小呢,也许是图像的角点的方向,在统计学上存在某种性质使得variance变小。另一个是特征之间的相关性。对brief和steered brief作pca,它们的主要能量都在前10~15个主成份上。
8. 用一种贪婪学习算法筛选具有高variance和高不相关的steered brief,结果称之为rBRIEF。
9. ORB特征,就是oFAST和rBRIEF的组合。
在我看来,ORB论文并没有对算法做一个严密的流程设计,算法的参数选择,多尺度,提取特征的细节过程,匹配特征策略等等。如果从头实现代码,还有很多需要考虑的地方,有鉴与此,也许不同的实现会带来不同的性能上差别。实现ORB算法的时候,要实现相关的算法,FAST, Harris角点,Intensity Centroid,BRIEF等等,涉及的还是比较多的,性能非常诱人,非常期望能有好的开源实现可以发布。