SURF算法是对SIFT算法的改进,其基本结构、步骤与SIFT相近,但具体实现的过程有所不同。SURF算法的优点是速度远快于SIFT且稳定性好。
1.构建Hessian矩阵,构造高斯金字塔尺度空间
SIFT采用的是DoG图像,而SURF采用的是Hessian矩阵行列式近似值图像。
每个像素点都可以求出一个H矩阵,H矩阵 有一个判别式,判别式的值是H矩阵的特征值,可以利用判定结果的符号将所有点分类,根据判别式取值正负,来判断该点是或不是极值点。
高斯滤波等一系列操作之后,得到每个像素的H行列式决定值,并用这个值来判别特征点。
金字塔图像中分为很多层,每一层叫做一个octave,每一个octave中又有几张尺度不同的图片。
(SIFT改变图片大小,SURF中改变滤波器的大小,图像保持不变)
2.利用非极大值抑制初步确定特征点
类似SIFT,检测过程中使用与该尺度层图像解析度相对应大小的滤波器进行检测。
3.精确定位极值点
这里也和SIFT算法中的类似,采用了3维线性插值法得到亚像素级的特征点,同时也去掉那些值小于一定阈值的点,增加极值使检测到的特征点数量减少,最终只有几个特征最强点会被检测出来。
4.选取特征点的主方向
统计邻域内的harr小波特征,即在特征点的邻域内(半径为6S,S为所在尺度),统计60度扇形内所有点的水平harr小波特征和垂直harr小波特征总和,harr小波的尺寸变长为4S,60度扇形以一定间隔进行旋转,最后将最大值那个扇形的方向作为该特征点的主方向。
5.构造SURF特征点描述算子
取一个正方形框,框的边长也是20S(S是所检测到该特征点所在的尺度),该框带方向,即第4步检测出来的主方向。把框分为4*4个子区域,每个子区域统计5*5个像素的水平方向和垂直方向的harr小波特征(方向都相对主方向而言),该harr小波特征为水平方向值之和,水平方向绝对值之和,垂直方向值之和,垂直方向绝对值之和。
所以,每个区域4个值,每个特征点就是16*4=64维向量,这能加快匹配速度。