SIFT算法系列之特征点检测

特征点检测算法简述

  说到特征(feature)可能包含许多种类:常用的图像领域的主要特征有颜色特征、纹理特征、形状特征、空间关系特征。其实不论哪种特征,其特征的描述或者表达的主要思路在于:通过特征的提取表达来区分图像的信息。特征点可以理解为是图像中变化较大的信息区域,具有独特性。为什么要把图像中的变化较大的区域提取出来作为特征表述,其主要原因还是存在于模拟人眼观察一幅图像时候最先观察到的是整体轮廓或者变化显著的部分区域。谈及特征点提取算法的发展:近些年一直都在研究图像灰度像素信息之间的特征点检测方法(例如应用最广泛的Harris角点检测算子)。SIFT算子并没有采用Harris角点检测特征点,主要原因在于Harris检测算子并没有尺度不变性能。关于SIFT特征检测过程将在下面讲述。

SIFT算法特征点检测过程

  SIFT算法特征点检测过程主要依赖于尺度空间完成时,通过各个相邻尺度图像之间相减得到差分高斯金字塔图像,随后进行Hessian矩阵检测与泰勒展开定位特征点精确位置。

SIFT算法系列之特征点检测_第1张图片
图1 相邻尺度空间图像差分图像示意图

   从上图1可以看出经过不同尺度参数 σ σ 卷积运算后的图像(尺度参数差值为 σ=2 σ = 2 )直接做差分运算,得到右边的差分高斯图像能够很清晰的看出右边的差分高斯图像主要轮廓和高频信息被保留了下来(边缘、极值点等)。那么作者为什么要采用差分高斯策略?这里其实主要在于差分高斯(DoG)近似于拉普拉斯高斯(LoG)函数。经过卷积运算后可以保留下高频信息,同时采用DoG计算效率大大降低,不需要LoG的二阶梯度求导运算。
SIFT算法系列之特征点检测_第2张图片
图2 LoG与DoG响应函数示意图

   从图2可以看出DoG的响应函数与LoG接近,同时在构建DoG时候不需要进行求导运算只需简单的作差。同时,高斯函数线性可分(能够将二维高斯卷积核函数分成水平、垂直两个向量进行单独运算进行加速)。因此,SIFT算法中DoG步骤完成初步的特征信息筛选。

SIFT特征点检测

  DoG金字塔图像生成后,通过全搜索中间层DoG图像(去除第一个和最后一个DoG图像)的像素点,判断当前像素点的像素值是否大于(或者小于)周围8邻域的像素值。如果当前像素点大于周围8邻域的像素值,那么当前像素点的像素值对比相同位置不同层次间(上下两幅DoG图像相同坐标位置)的周围8邻域值对比,如果都大于上下两层共18个像素值,那么记录当前像素的为极大值点。同理,当前像素点为极小值点判决过程一样。通过上述搜索到的局部极大值或极小值点具有尺度不变特性,同时记录下当前像素点的尺度σ的参数值。当局部极大值极小值提取出来后,下面就是要对邻域的数据进行详细的匹配来确定位置、尺度和主要的曲率值。具有对比度很低(对噪声很敏感),或者在边缘位置很差的局部极值点需要剔除。所以,关于如何剔除点SIFT算法采取泰勒展开式和Hessian矩阵进行特征点剔除。

Hessian矩阵与泰勒展开式作用分别是什么?

  泰勒展开式主要是对当前点附近进行曲线拟合来判决是否为最优极值点位置,如果存在偏移量 (x,y,scale)>0.5 ( x , y , s c a l e ) > 0.5 那么进行迭代拟合。SIFT算法代码中迭代次数最大设置为5,通过奇异值分解Hessian矩阵提取主成分与原始位置矩阵偏导进行矩阵乘积运算获取 (x,y,scale) ( x , y , s c a l e ) 的偏移量,不断迭代直至偏移量 <0.5 < 0.5

  经过泰勒展开策略迭代搜索邻域极值点之后,就是对当前的特征点进行是否为边缘点进行判断。SIFT算法采用二阶Hessian矩阵来进行判别。主要思想如下图:

SIFT算法系列之特征点检测_第3张图片
图3 角点、边缘区域判决方式

   Hessian矩阵主要是消除边缘点提取没有在最大最小极值抑制阶段保留下来,其主要原因在于SIFT计算后续描述子匹配时边缘信息构建的局部区域描述子在边缘方向区分度不够唯一。关于Hessian矩阵求取特征值 λ1 λ 1 λ2 λ 2 如何消除边缘点(判断是否边缘区域)可以类似参考Harris角点对边缘响应原理一致如下图。

SIFT算法特征点实验过程

下面先来看一下SIFT算法特征点检测的流程图:

SIFT算法系列之特征点检测_第4张图片
图4 特征点检测流程图

   那么,我们就来简单叙述一下图4的特征点检测过程。从图4中我们可以看到,DoG图像金字塔是由高斯金字塔所生成,例如:(DoG中的①由高斯金字塔的①与②图像作差获取,其它类似)。生成DoG金字塔之后,对DoG图像进行局部极值点搜索与判决(搜索图像去除每塔中的第一张和最后一张[DoG中①与④])。如果在DoG上当前点坐标大于周围8邻域像素值,则进行相同位置上下两层18各点进行比较,如果大于则存储尺度不变点,否则继续下一个点搜索。(局部极小值点判决方法类似)。判决出局部极值点之后,通过泰勒展开对当前像素点进行亚像素定位,迭代判决像素点偏移量损失。亚像素定位之后,通过Hessian矩阵进行边缘点信息剔除,最后经过Hessian矩阵删除后的点就是SIFT提取的最终尺度不变点。

参考

  http://www.cs.ubc.ca/~lowe/
  http://robwhess.github.io/opensift/

你可能感兴趣的:(图像处理)