SIFT究竟在做什么?

WHAT

SIFT属于传统特征提取方式,与通过深度学习的反复学习提取出的特征值不同,传统特征提取方式需要通过人工计算和模拟实验找到所需要的特征点。一个好的特征量应该具有尺度不变的性质,本文就是在解释通过怎样的计算步骤能找到这样的特征量。

WHY

特征量往往被用在物体识别,并且应该是分辨度高的,以区分于杂乱的背景和庞大的数据库。

HOW

我们主要使用四个步骤:1.尺度空间的极值检测,2.关键点的定位,3. 方向分配 4. 关键点描述,来提取我们所需要的特征量。

目的

这篇文章帮助我们从图片中提取出图像特征,能满足即使当这个图片中某一事物或场景发生了失真,视角偏移,噪点增添或是光线改变时,也能将图片间的相关点进行对应。而且他它们是易于区分的特征,即使是从庞大的特征库中也能利用它们找到对应的真正的物体或场景。

步骤

分为以下三步

  1. 尺度空间的极值提取
  2. 关键点定位
  3. 方向分配
  4. 关键点描述

这一系列的方法称作为SIFT,即尺度不变的特征转换。

1. 尺度空间的极值提取

生成高斯图像、尺度空间

极值提取的计算式,将使用DoG进行计算。首先我们已经知道唯一可行的尺度空间核就是高斯核,因此我们使用高斯函数对图像进行卷积从而得到尺度空间。其次,Lindebeg在1994年提出了LoG是对于尺度不变检测的必要算子。并且,Mikolajczyk提出利用LoG的最小值和最大值之差可以求出图片的稳定特征。而DoG正好可以近似于LoG。

对于每个尺度空间,通过将原始图像与高斯核不断卷积,并将临近的生成图像相减形成高斯差值图像。之后,对图像进行下采样,再进行同样的工作。这样保证采样精度不变的情况下,计算量大大下降。

局部极值提取

每个点将会和坐标空间上的8个临近点,以及尺度空间上的18个点,共计26个点进行比较。只有在27个点中是最小或最大才会被定义为极值。由于我们可以进行一些前处理筛选掉大部分的点,所以极值验证的过程并不会花费很大。

明显的是,采样频率关系到极值的选择。但不幸的是并没有确定的采样频率能使我们一定能找到所需的极值。因此我们使用实验的方法来决定最优频率。

尺度上的采样频率

我们测试了当改变尺度空间上的采样时,重现率和关键点检测数量的改变趋势。结果表明,当采样频率增加时,重现率有下降趋势,这有可能因为即使找到了更多的极值,但他们不够稳定;并且,随着频率增加,更多的关键点被检测出来,虽然他们有助于物体检测,但运算量也大大上升,因此我们折中选择了3这个尺度空间的采样频率。

空间上的采样频率

通过测试预平滑的采样频率与重现率的关系我们发现,当频率越大重现率也越大,但为了保证运行的效率,我们选择了1.6这个值。

2. 精确的关键点定位

上个步骤中我们找到了离散空间的极值候选者,但不一定是真正的连续函数上的极值。本章通过对取样点的D(x)求导得出偏移量,以寻找真正的极值。首先,如果偏移值大于0.5则认为极值在相邻的采样点。其次,如果有极值点的D(x)是小于0.03的我们认为它是不稳定的,因此也会被舍弃。

消除边缘响应

当主曲率过大时我们认为这是边缘上的点,由于边缘点并不稳定我们需要去除。通过计算,我们只要通过计算海塞矩阵的对角和行列式的比值就能求出特征值之比,这大大减少了计算量。本文将特征值的比值阈值设为10,大于10的将被去除。

3. 方向分配

对于每个关键点,我们通过统计临近区域的点的向量和角度来确定关键点的方向。通过直方图的形式统计被分配在各个角度的临近点的数量,取最多的为关键点的方向。此外,若有其他方向的统计值高于最高值的80%,我们将其认定为第二方向。

4. 特征点描述

我们已经知道使用神经元模型,即计算出特定方向和空间次数的梯度可以得到非常稳定的特征量,可以用于视角改变和亮度改变的问题。

特征量表现

通过计算和统计关键点周围像素的向量方向分布,对关键点进行描述。本文中我们将对1616的范围的区域分成4\4的格子,来对它们的8个向量方向进行统计。
此外,为了对光照变化具有不变性,我们还要对向量归一化。这样能减少光亮变化而产生的对梯度带来的线性变化。其次,为向量长度设置阈值,减小值较大的向量的重要度,以减少对非线性光照变化的敏感度。

对仿射变换的敏感性

根据实验,当仿射度上升时匹配度大幅度下降。但实际上在3D图像上的可旋转范围较小,仿射不变性并不是那么重要。而如果在平面图片上时,我们可以使用xx的方法生成额外的SIFT特征量,使得最终生成标准特征库三倍量的特征。

对大数据集的对比

更多是因为初始特征的位置和方向的分配问题而不是特征的可区分度造成的

对物体识别的应用

1. 关键点匹配

我们对每个关键点与数据库中的特征进行匹配,得到欧几里得距离最近的候选项。但是实际上许多特征来自于杂乱的背景或对于这个物体的识别并没有帮助。因此我们通过一个高效的手法剔除掉这些无用的特征。这个方法就是对比与最近的正确图像的距离,和最近的错误图像的距离之比。当这个比值大于0.8时(即错误图像的距离高于正确图像的距离的80%时),我们就淘汰这个特征。

有效的最近邻法

我们使用BBF算法来搜索最近的点。这个算法对于我们的特征值最有效,考虑原因可能是上章提到我们只需要探索距离比值小于0.8的特征点。

霍夫变换聚类

为了提高对小物体和被遮挡物体的识别问题,我们希望即使少类的特征也能识别出物体。而通过霍夫变换将特征值聚类的方法能提升这一可能性。

[1] https://blog.csdn.net/lavender19/article/details/120396145
[2]https://blog.csdn.net/shiyongraow/article/details/78296710
[3]https://www.cnblogs.com/shine-lee/p/10950963.html 仿射变换