1.概述
在基础篇里面讲模板匹配的时候已经介绍过,图像匹配主要有基于灰度和基于特征两种方法。基于特征匹配的方法有很多种如:FAST、HARRIS、SIFT、SURF、SUSAN等。其中SIFT算法由D.G.Lowe于1999年提出,2004年完善总结。SIFT是一种鲁棒性好的尺度不变特征描述方法,但SIFT算法计算数据量大、时间复杂度高、算法耗时长。针对上述缺点许多研究者对SIFT算法做了不同的改进,Yanke等人提出用PCA-SIFT方法对特征描述进行数据降维,但在没有任何先验知识的情况下反而增加了计算量;Delpont等人提出用SVD方法进行特征匹配,但匹配过程计算复杂,且不能用于宽基线匹配;Grabner等人用积分图像虽提高了SIFT的计算速度,但是降低了SIFT方法的优越性。
Herbert Bay等人于2006年提出了SIFT算法的改进算法SURF算法,其性能超过了SIFT算法且能够获得更快的速度。SURF在光照变化和视角变化不变性方面的性能接近SIFT算法,尤其对图像严重模糊和旋转处理得非常好。且标准的SURF算子比SIFT算子快好几倍,SURF算法最大的特征在于采用了harr特征以及积分图像的概念,这大大加快了程序的运行速度。
SURF算法和SIFT算法在opencv中是一种很高级的算法,opencv提供了SURF算法的API接口。需要说明的是SURF和SIFT算法在OpenCV提供的nonfree中,而且在OpenCV3.x后不再集成到OpenCV发行版中,同意存放到opencv_contrib中,需要去opencv github页面手动下载编译。点击跳转,编译方法网上有很多教程。
2.Surf原理
特征点的提取基于尺度空间理论,我们通过检测图像局部极值点来锁定特征点坐标,即局部的最亮点或最暗点。
2.1构建Hessian矩阵
SURF算法检测特征点是基于Hessian矩阵实现的,Hessian矩阵是SURF算法的核心。设f(x,y)为二阶可微函数,Hessian矩阵H是函数、偏导数组成如下:
Hessian矩阵判别式为:
判别式的值是H矩阵的特征值,可以利用判别式的符号确定是否是极值,若det(H)<0则可判断(x, y)不是局部极值点,若det(H)>0则可判断点(x, y)为局部极值点。
将上述方法应用到图像中,给出图像中的一个点,其像素可表示为I(x, y),在尺度为σ其Hessian矩阵定义如下:
式中:L_xx是高斯滤波二阶导同I=(x,y)卷积的结果,其中L_xy、L_yy的含义类似。