SIFT学习笔记(三)

上一篇文章中,我们讨论了构建高斯差分尺度空间的基本操作,在这片文章中,我们将继续学习SIFT特征的知识。

Credit:

本次学习中所引用的研究来自:

王芳芳,陈华 《动态背景下的视频目标跟踪》,硕士学位论文

怎么求SIFT特征

检测DOG尺度空间极值点

极值点选取

前文中说过,SIFT算子是为了获取图像的特征点。而这一步骤的目的,就是提取特征。提取方法也很简单:将一个像素与其周围的26个相邻像素进行比较,如果该像素取到最大值或最小值,那么这就是一个极值点。26个像素是指,与其同层周围8个像素,和上下两层9个像素进行比较。这样就导致,每层边缘的一个像素点无法被比较,但是这样的像素只占极少的部分,边缘像素也一般不出现在追踪情况里。它也会导致每组第一层和最后一层的图像没有进行比较,因为它们没有上下两层。所以这表示我们需要在高斯差分金字塔中额外生成多余的两层图像,再加上高斯差分会让DOG金字塔比GSS金字塔少一层,所以我们需要生成S+3层高斯金字塔。

那么,第二个问题就是,极值点怎么产生?因为彩色图像都是三通道的,而极值点只能是一个描述向量的性质。常用的方法有:

  1. 最简单的转换为灰度。这是最常见的方法,SIFT算子本身也是基于灰度的。但是这么做有个显而易见的缺点,就是丢失了图像的彩色信息,对图像信息损失比较严重。
  2. 也有通过加权合成三个通道,用一个特征量表示的。但是通常这类算法的健壮性都不是非常高,因为光照对这类算法的影响比较大,不同的条件下表现也都不一样,同时运算量也比较大。

在本次的学习中,我采用的方法是这样的:在接收到图像信息的时候,缓存该帧,同时同步转换为灰度图像。利用灰度图像进行SIFT特征点提取,之后抛弃灰度图金字塔,将彩色图像上对应的点标记为特征点,送入下一个处理模块,并准备处理下一帧。

低对比度极值点处理

经过上面的操作,将获得大量的极值点。到那时很多极值点属于噪声,所以为了去掉DoG局部曲率非常不对称的像素。通过拟和三维二次函数以精确确定关键点的位置和尺度(达到亚像素精度),同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力,在这里使用近似Harris Corner检测器。

首先对空间尺度函数进行泰勒展开: 求导并令其导数为0,获得精确位置: 只取泰勒展开前两项并将精确位置代入: 此时,将获得一个特征值,若此值 则保留,否则舍弃。

经过这样处理的极值点可以去掉低对比度的极值点,只保留与周围像素点差别较明显的点。但是依然存在局部曲率不对称的点,例如,边缘上的点,在沿边缘方向曲率变化不明显,在垂直于边沿方向曲率变化明显。为了排除边缘响应,还要继续进行下一步处理。

边缘响应极值点排除

Hessian矩阵

Hessian矩阵是一个数学概念,简单来说,是用来判断多元函数在某一点处有没有极值的矩阵。它的概念是,若一个多元函数在x0处由任意阶导数,那么: 其中 将上述展开式写成矩阵形式,则有: 即: 其中 G便是Hessian矩阵。

没有看懂? 好吧我也没怎么看懂,不过幸运的是,数学理论推导在这次学习中并不是很重要,因为,一方面,我们的目的是使用这一矩阵而不是证明其合理,另一方面,其实我们不用完整的把全部过程都算出来。

使用Hessian矩阵处理极值点

刚才讲了Hessian矩阵,如果你觉得没有看明白,不必担心,因为,这一步操作比刚才的说明简单多了……

一个极值点处的主曲率可以通过一个2*2的Hessian矩阵H求出: 导数由采样点相邻差估计得到。D的主曲率和H的特征值成正比,令α为较大特征值,β为较小的特征值,则: 令α=γβ,则: (r+1)2/r的值在两个特征值相等的时候最小,随着r的增大而增大,因此,为了检测主曲率是否在某域值r下,只需检测: 如果不满足上述不等式,则抛弃该极值点。Lowe在论文中建议的r值为10。


在这篇文章中,我们讨论了如何利用高斯差分尺度空间找到其极值点,和怎样优化极值点。在接下来的文章中,我将继续学习如何从极值点产生SIFT描述子,若有错误,还望指正。