学习笔记:SIFT算法

学习笔记:SIFT算法

SIFT概述

SIFT(Scale-invariant feature transform),即尺度不变特征转换,是计算机视觉中用来检测图像局部特征的算法。SIFT的基本思路是寻找到图像中的一些关键点,这些点不会因为光照等条件的改变而消失,然后用这些关键点来描述该图像。SIFT算法的基本过程是寻找灰度图的局部的最值点,将其作为关键点。在计算机中,是通过滤波器来求最值的,但是这里会遇到尺度的问题:滤波器和图像中的物体都是有尺度大小的,哪怕是同一尺度的滤波器对两幅包含不同尺度的同一物体的图像进行滤波也可能会出现不同的最值点。SIFT算法利用了图像金字塔分解来解决这个问题,它对图像构建了图像金字塔,图像金字塔中的所有图像与原图相似,每一层都包含图像的尺度不同,物体尺度也不相同,这样就可以通过对图像金字塔中每层求局部最值点,再通过一些方法去除一部分就可以得到同一尺度下的关键点。

SIFT算法的特点:

  1. SIFT是图像的局部特征,对旋转、尺度缩放、亮度变化保持不变;
  2. 对视角变化、仿射变换、噪声有一定的稳定性;
  3. 独特性好,信息量丰富,适用于在海量特征数据库中进行快速准确的匹配;
  4. 多量性:即使少数的几个物体也可以产生大量SIFT特征向量;
  5. 可扩展性,可以方便地与其它形式的特征向量进行联合。

SIFT算法可以解决目标自身状态、场景所处的环境和成像器材的成像特性等因素影响图像配准/目标识别跟踪的性能。可以在一定程度上解决:

  1. 目标的旋转、缩放、平移;
  2. 图像仿射/投影变换;
  3. 光照影响;
  4. 目标遮挡;
  5. 杂物场景;
  6. 噪声

过程

SIFT算法的过程可以分解为:

  1. 尺度空间极值检测:搜索所有尺度上的图像位置,通过DoG(Difference of Gaussian,高斯差分算子)来识别潜在的对于尺度和旋转不变的兴趣点;
  2. 关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定关键点位置和尺度;
  3. 方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。在之后对图像数据的操作都相对于关键点方向、尺度和位置进行变换,从而提供对于这些变换的不变性;
  4. 关键点描述:在每个特征点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种允许较大局部形状变形和光照变化的表示。

具体的实现步骤:

检测DoG尺度空间极值点

尺度空间

DoG尺度空间

SIFT算法提出,通过对两个相邻高斯尺度空间的图像相减,可以完成再某一尺度上对关键点的检测,得到一个DoG响应函数D(x,y,σ):

其中,k表示两个相邻尺度空间倍数的常熟
SIFT算法中进行关键点搜索是通过构建图像金字塔进行的,将图像金字塔分为O组,每组S层,下一组图像时上一组图像按照隔点采样得到的。DoG结果是通过每组上下相邻两层的高斯尺度空间图像相减得到:

关键点的搜索是通过同一组内各DoG相邻层之间比较完成的,每一个采样点要和它所有的相邻点进行比较,看该点是否是图像域和尺度域的极值点。

关键点定位

子像素插值(去除非真正极值点)

搜索极值点过程是在离散空间中进行的,这种方法得到的极值点很可能还不是真正的极值点,离散空间极值点和连续空间极值点的关系:

可以通过尺度空间DoG函数进行曲线拟合来得到连续空间极值点(子像素插值),然后剔除掉那些距离插值中心过大或者过小的点(>0.5或者<0.03)。

去除边缘响应

一个平整的DoG响应峰值往往在跨越边缘时主曲率会明显增大,经过垂直边缘方向时主曲率会明显变小。主曲率可以通过Hessian矩阵求出。

方向确定

SIFT具有旋转不变性,为了实现这一性质,需要通过被检测到的特征点周围的局部结构中求出一个衡量判断方向的依据——方向基准,图像梯度是其中运用广泛的方法。以检测到的关键点作为圆心选择一个半径为3*1.5σ的窗口,在该窗口内计算图像梯度的幅角和幅值,然后使用方向直方图(HoG)统计确定关键点的方向。HoG范围从0~360度,10度一组,每个采样点按照梯度方向加权得到HoG。HoG的峰值代表了该关键点处邻域梯度的主方向,任何大于峰值80%的方向创建一个具有该方向的关键点。如果有多峰值的情形,用每个峰值和左右两个峰值进行二次曲线拟合,以定位峰值的实际位置。

关键点描述

SIFT描述子是关键点领域高斯图像梯度统计结果的表示。通过对关键点周围图像区域进行分块,计算块内梯度直方图,生成具有独特性的向量,该向量描述了区域图像信息,具有唯一性。其过程大致为:

  1. 确定计算描述字所需的图像区域:一般为4 * 4窗口中计算8个方向的梯度信息;
  2. 将坐标轴旋转为关键点的方向,确保旋转不变性;
  3. 将邻域内的采样点分配到对应的子区域内,将子区域内的梯度值分配到8个方向上,计算权值;
  4. 插值计算每个种子点8个方向的梯度;
  5. 把方向直方图每个方向上梯度幅值限制在一定门限之下(一般为0.2);
  6. 描述符向量元素归一化,去除光照影响;

经过检测极值点-> 关键点定位 -> 方向确定 -> 关键点描述这几步骤之后,得到了SIFT描述子,可以通过对关键点描述子的欧式距离来作为两幅图的关键点相似性度量。

SIFT算法的缺陷

  1. SIFT在求主方向阶段太过依赖局部区域像素的梯度方向,有可能造成主方向不准确,从而在之后的特征向量提取和匹配中放大误差,使得匹配失败;
  2. SIFT算法中尺度非常关键,而图像金字塔并不能对图像所有的尺度进行描述,因此尺度也存在误差;
  3. SIFT可以用于对平面形状的两个物体建立射影对应关系,但是对于曲面物体无法推导点的对应;

发展

SIFT发展历程:

  • PCA-SIFT:在SIFT基础上使用PCA简化了SIFT描述子。
  • CSIFT:彩色尺度特征不变变换,SIFT只能用于灰度图,CSIFT可以针对彩色图像进行尺度不变特征提取。
  • SURF(Speeded Up Robust Features),SIFT算法的增强版,计算量更小,运输更快,提取的特征点几乎与SIFT相同。
  • ASIFT(Affine-SIFT)抗仿射SIFT变换,提取的特征点多于SIFT。

参考:

[1] http://blog.csdn.net/CXP2205455256/article/details/41747325
[2] http://blog.csdn.net/cy513/article/details/4414352
[3] http://blog.csdn.net/zddblog/article/details/7521424
[4] 戴维理. 基于SIFT的图像拼接和特征提取的研究[D]. 电子科技大学, 2015.

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