SURF(Speeded Up Robust Features)
原理参考了https://www.cnblogs.com/gfgwxw/p/9415218.html
在上一讲中,我们看到了SIFT的关键点检测和描述。但它相对较慢,人们需要更加快速的版本。2006年,Bay,H.,Tuytelaars,T。和Van Gool,L三人发表了另一篇论文“SURF:Speeded Up Robust Features”,引入了一种名为SURF的新算法。顾名思义,它是SIFT的加速版本。
这个积分图我们也介绍过好多次了,用于快速计算卷积。
这块内容我们很熟悉了,这个感觉有点像联合概率分布的感觉。这个可以加速的原因就是避免了一些重复的计算,我们事先把一些计算结果存在积分图里面,可以直接利用而不是下次用到某一个结果的时候再次计算。
b就是高斯滤波器的二阶求导结果。
为什么可以
为什么经过高斯滤波可以看做是一种尺度变换呢?这是因为高斯滤波某种程度上和降采样(也就是缩小图片)实现的效果是一样的,因为高斯滤波可以弱化边缘,可以消除像素之间的差异,会让图像变得模糊,这一点和降采样的效果是很像的。
这就是前面提到的一种HAAR特征提取方法。
简而言之,SURF增加了许多功能来提高每一步的速度。分析显示它比SIFT快3倍,而性能与SIFT相当。SURF擅长处理模糊和旋转的图像,但不善于处理视角变化和光照变化(据opencv官方)。在opencv中它和SIFT的用法类似:
解释一些参数的含义,extended表示描述符的维数,0代表使用64维描述符而,1表示使用128维的描述符。upright表示是否计算方向,0代表计算方向,1代表不计算方向。hessianThreshold表示hessian行列式的阈值。nOctaves是高斯金字塔的组数,默认是4。
nOctaveLayers是每一组的层数,默认是2。
下面我们来试验对比下:
这个是SIFT的时间。
SURF的时间好长,但是检测出来的点很多,我们需要增大阈值了,我们这里设为1000,在实际情况下,最好是300-500。
enmm,看着太乱了,不好显示,再加大一下阈值。
可以看到方向是不一样的。如果不计算方向:
感觉也没有快多少。也感觉不到SURF比SIFT快,可能是我只运行了一次,具有偶然性?
BRIEF
参考了https://blog.csdn.net/hujingshuang/article/details/46910259
也就是说BRIEF其实本身并不是一种特征检测方法,而其实应该算是一种特征描述方法。
上面是分别用五种采样方法得到的图形。这里再介绍一种特征匹配方法:CenSurE。
参考了http://www.docin.com/p-1253563282.html
http://www.doc88.com/p-9929575192507.html
大致步骤都差不太多,它也是对SIFT的一种改进。
这里又要拿出来积分图了。
再详细的信息可以到http://www.doc88.com/p-9929575192507.html去看一看这篇硕士论文或者去参看原文:
Motilal Agrawal, Kurt Konolige, and Morten Rufus Blas. Censure: Center surround extremas for realtime feature detection and matching. In Computer Vision–ECCV 2008, pages 102–115. Springer, 2008.
opencv中CenSurE的类是
BRIEF的类是:
默认是取256对点,256个数据需要32*8个位,也就是32个字节,这个相比前面的128维(128个数字至少需要128*8位,也就是128个字节,64维也需要64个字节)
然后我们来试一下这个吧。
这个速度感觉好快啊,检测出来特征点只有89个,不过默认是不描述方向的。
时间还稍微短了一点?这个des出出来是一个元组:
第一个元素是关键点存储的一个列表,第二个元素是特征描述的一个元组。
它的长度是32个字节,用uint8存储。
ORB
ORB出现的很大的一个原因是:SIFT和SURF已获得专利,您应该支付它们的使用费用。但ORB不是!!!它不需要安装opencv-contrib就可以使用。关于它的原理,参考https://blog.csdn.net/zouzoupaopao229/article/details/52625678
这里又提到了FSAT,我们算是复习一下。
第一步主要还是排除。
原来的FAST里面并没有步骤四和五的内容。步骤四感觉就是和SIFT结合了一下。
这是我们第二次见了。
均值为0.5的时候信息熵最大,包含信息量最多,方差大。
4
关于积分图加速,其实我一直存有疑问,它是怎么加速高斯滤波的?参考了https://www.cnblogs.com/celerychen/archive/2013/03/09/2951660.html
按照2的思路,其它类型的滤波器或许也可以用均值来组合逼近,当然统计滤波就有点麻烦了。比如中值滤波我感觉要求最高的其实是排序算法,只要排序算法速度快,它的效率就高。
如果还不是很懂可以看看https://blog.csdn.net/yirant7/article/details/51332881
opencv里面怎么实现呢?
因为这里会有特征点数,所以需要排名,我们取前面n个,除了哈里斯得分,还有FAST得分。
我们来试一试:
感觉是比SIFT要快,但是没有100倍吧。我看换一种得分方式结果会有不同吗?
区别比较小吧。
特征检测和描述大概就学习这么多吧。