各种特征提取算子
1 ORB(ORientedBrief):
论文Ethan Rublee and Vincent Rabaud and KurtKonolige and Gary Bradski, ORB:an efficient alternative to SIFT or SURF.点击下载论文
理论参考:http://www.cnblogs.com/scnucs/archive/2011/12/20/2294189.html
代码实现效果:http://blog.csdn.net/merlin_q/article/details/7026375
2 Brief(Binary Robust Independent Elementary Features)
由EPFL的Calonder在ECCV2010上提出的。主要思路就是在特征点附近随机选取若干点对,将这些点对的灰度值的大小,组合成一个二进制串,并将这个二进制串作为该特征点的特征描述子。详细算法描述参考如下论文:
Calonder M., Lepetit V., Strecha C., Fua P.: BRIEF:Binary Robust Independent Elementary Features. ECCV 2010
开源代码:这里。实现效果:http://blog.csdn.net/yangtrees/article/details/7533988
注:在BRIEF eccv2010的文章中,BRIEF描述子中的每一位是由随机选取的两个像素点做二进制比较得来的。文章同样提到,在此之前,需要选取合适的gaussian kernel对图像做平滑处理。(为什么要强调这一点,因为下述的ORB对此作了改进。)
BRIEF的优点在于速度,缺点也相当明显:
1:不具备旋转不变性。
2:对噪声敏感
3:不具备尺度不变性。
ORB就是试图解决上述缺点中的1和2.
注明:
在ORB的方案中,是采用了FAST作为特征点检测算子。FAST应用的很多了,是出名的快,以防有人不知道,请看这里。在Sift的方案中,特征点的主方向是由梯度直方图的最大值和次大值所在的bin对应的方向决定的。略嫌耗时。在ORB的方案中,特征点的主方向是通过矩(moment)计算而来。有了主方向之后,就可以依据该主方向提取BRIEF描述子。但是由此带来的问题是,由于主方向会发生变化,随机点对的相关性会比较大,从而降低描述子的判别性。解决方案也很直接,采取贪婪的,穷举的方法,暴力找到相关性较低的随机点对。
BRIEF使用的是pixel跟pixel的大小来构造描述子的每一个bit;这样的后果就是对噪声敏感。ORB的方案中,做了这样的改进,不再使用pixel-pair,而是使用9×9的patch-pair,也就是说,对比patch的像素值之和。(可以通过积分图快速计算)。
3)关于尺度不变性:
ORB没有试图解决尺度不变性,(因为FAST本身就不具有尺度不变性。)但是这样只求速度的特征描述子,一般都是应用在实时的视频处理中的,这样的话就可以通过跟踪还有一些启发式的策略来解决尺度不变性的问题。
4)关于计算速度:
ORB是sift的100倍,是surf的10倍。
3 FREAK
2012 出来的对前面BRIEF改进
论文下载:http://infoscience.epfl.ch/record/175537/files/2069.pdf
代码相关网站:http://www.ivpe.com/freak.htm
ORB就是BRIEF的改进,BRIEF太简单了,就不介绍了,有兴趣的朋友自己看paper吧。ORB的paper我读下来,感觉改进主要有以下几点:用FAST作为特征点提取的算法,更快了,添加了特征点的主方向,这样就具有了旋转不变性。最后一点其实我也想到了,当时看BRIEF的时候就想应该可以优化,就是ORB采用贪婪穷举的方法得到了相关性较低的随机点对,还有一个改进就是对于随机点对,受噪声的影响很大BRIEF的办法就是对原图像滤波,降低噪声的影响,ORB不在使用像素点的直接比较,而是选择该像素为中心的一个小patch作为比较对象,提高了抗噪能力。
FREAK个人理解是这个算法是基于人眼视网膜细胞的分布,中间密集,四周稀疏,从而在图像中构建很多的区域,当然越靠近中心的区域采样更密集,四周区域采样稀疏,随机对比各区域的像素得到一组2值特征,这个算法也关注了尺度和方向的问题,都有对应的解决办法,还根据了人眼看事物时眼睛不停的转动,设计了一种级联的搜索器,总而言之,我感觉这个算法也是受ORB和BRISK这种2值特征的启发下的一种改进吧。
OpenCV在2.4.2中,FREAK给出了pattern的训练代码。
注明:虽然两种算法不能直接比较,因为FREAK没有提供特征点位置检测的算法,个人感觉如果FREAK采用FAST来做detection,确实速度应该要逼ORB要快一些。
代码:http://download.csdn.net/detail/yang_xian521/4421537
效果图:http://blog.csdn.net/yang_xian521/article/details/7732835
4 BRISK
BRISK描述子由Stefan Leutenegger等人发表于ICCV11上。(ORB也是ICCV11上出现的)。详见这篇文章: “BRISK: Binary Robust In variantScalableKeypoints”。
BRISK是也是BRIEF描述子的一种改进,相比于BRIEF特征,它具有旋转不变性、尺度不变性和对噪声的鲁棒性。
实现:
http://blog.csdn.net/jinxueliu31/article/details/18556855
http://blog.csdn.net/xiazhao1234/article/details/7752292
其中
Watch BRISK in action.
(这个视频中的效果的确很好,快速,实时,特征虽然没有SIFT多,但是也足够)
Stefan Leutenegger, Margarita Chli andRoland Siegwart, BRISK: Binary Robust Invariant Scalable Keypoints, to appear in Proceedings of the IEEE International Conference onComputer Vision (ICCV) 2011.
Open-source package containing windowsand linux libraries, a demo application, and a Matlab mex interface:
Download brisk.zip(16 MB)
(v0.1 December 10th 2011)
Provided under the terms and conditionsof the BSD license.
Please contact [email protected], if you have related questions or suggestions.
注:SIFT,SURF描述符数据类型有是float的,而 ORB,BRIEF是uchar的,注重实时性。