####0. 特征检测定义、作用和使用相关
-
特征检测是从图像中
自动提取对象特征用以表述该对象, 同时还可以利用得到的特征数据描述在不同的图像中发现相同的对象,(一旦得到两个对象的描述子,就可以使用它们实现特征数据的匹配与比对,从而分辨出它们是否具有相似性)
而且特征对对象的旋转、缩放、光照等具有不变性。 -
整个过程可以分为三个部分:
检测、描述、匹配。 -
OpenCV中是通过
feature2d与xfeature2d完成整个流程操作的,从而实现基于图像特征的对象检测与匹配。
####1.SURF特征检测
-
SURF(Speeded Up Robust Feature)特征就是图像最常见的特征之一, 该方法在2006年由几位作者联合提出, 主要是用来克服SIFT(一种特征检测方法)计算量比较大, 运行速度比较慢的缺点; -
SURF具有以下的
优点:基于积分图计算,快速关键点提取;不同关键点描述;快速描述子匹配;同时具有旋转、尺度、光照不变性; -
SURF通过建立
不同尺度的级联算子来实现高斯图像的尺度不变性特征, 计算LOG得到每个像素点的Hessian矩阵, -
在建立级联算子实现Hessian矩阵的计算中, SURF使用了
积分图来实现预计算, 通过积分图查找表实现Hessiam矩阵快速计算。离散高斯及其近似梯度算子如下图:
算子级联实现尺度空间不变性,如下图:
-
最终把
高斯核近似为一个盒子滤波, 这样就可以不用进行高斯核与浮点数计算, 基于积分图,不断扩大盒子滤波核的大小, 就可以在不同层数计算结果; -
对
第一层分别使用9×9、15×15、21×21、27×27,扩大之后进行下层级计算。每个层级之间的差值一般取值为12, 这时下个层级的滤波核就是39×39,再下一个层级就是51×51。 取值为24时,下个层级就是51×51, 再下个层级就是75×75。 -
为了在每一层之间定位图像的关键点 (图像的关键点就是图像Hessian矩阵梯度最大值或者最小值所在点的附近), 对同一层级的不同层3×3×3范围内寻找极大值或者极小值作为候选点, 对满足条件的关键点, 使用插值公式寻找亚像素级别的关键点的准确位置, 最终得到SURF特征检测的关键点数据。
####2.SURF特征描述子
特征描述子是用来描述每个关键点特征的唯一数据,它必须能够显著区分各个特征关键点的不同之处,SURF特征描述子是基于Haar小波响应理论的,可以通过积分图进行快速计算,描述子首先要选取关键点周围的像素块(ROI),通常ROI区域的大小为20个像素,分为4×4的网格区域,如下图:
使用Haar在X方向与Y方向的2s×2s像素块响应,基于高斯权重分别计算dx、dy,最终可得到:
对每个5×5的子区域都会得到一个向量v,对于4×4,整个子区域可得到16个相互连接的向量,它们就是该关键点的描述子,归一化之后就是具有光照不变性特征的描述子。这种方式没有考虑选择不变性,没有对每个描述子指派方向角度,称为U-SURF描述子,对上述描述子在0°~360°方向上使用滑动窗口60°大小计算滑动窗口的梯度和最大值,指派为该描述子的方向,0°~360°,60°滑动窗口如下图:
实验证明,在窗口较小的情况下,容易导致出现异常高峰的问题,在窗口比较大的情况下,容易出现向量过长,描述子描述不够准确的问题,所以一般情况下更趋向跳过方向指派步骤直接使用U-SURF,它在±15°范围内可以保证旋转不变性特征。