一、SIFT的概念
SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述,具有非常强的稳健性。SIFT算法的特点有:
- SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;
- 独特性好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;
- 多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;
- 高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;
- 可扩展性,可以很方便的与其他形式的特征向量进行联合。
SIFT算法可以解决的问题:
目标的自身状态、场景所处的环境和成像器材的成像特性等因素影响图像配准/目标识别跟踪的性能。而SIFT算法在一定程度上可解决:
- 目标的旋转、缩放、平移
- 图像仿射/投影变换
- 光照影响
- 目标遮挡
- 杂物场景
- 噪声
二、SIFT算法
按照参考博客所写的内容可以将SIFT算法分解为如下四步:
- 尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯差分函数来识别潜在的对于尺度和旋转不变的兴趣点。
- 关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。
- 方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。
- 关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。
1.尺度空间
尺度空间理论的基本思想是:在图像信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测和不同分辨率上的特征提取等。
尺度空间理论目的是模拟数据的多尺度特征。
为什么要先建立尺度空间呢?
因为计算机机器对不知道物体的尺度,所以我们要先教会机器认识,教机器那就是把不同尺度的物像输入给及其,完成一个认知的过程。在构建尺度空间的过程中,相关的就是高斯卷积核,也是实现尺度变换的唯一线性核。通过不同的来构造尺度空间
对于一个二维图像的尺度空间定义为
2.图像金字塔,高斯金字塔,高斯差分金字塔
这三个金字塔是为了找极值点(关键点的铺垫)
图像金字塔:首先是低通滤波器平滑图像,然后对预处理的图像进行降采样(水平竖直的1/2),从而得到一系列尺寸缩小的图像。
对于传统的金字塔,每一层是由上一层分辨率的长宽各一半,也就是1/4的像素组成。
高斯金字塔是在多分辨率金字塔简单的降采样基础上高斯滤波得到的,也就是对金字塔每层图像用不同的做高斯模糊。金字塔的每层的多张图像合称为一组octave,每组都会有不同的层。需要注意的是,在降采样的时候,金字塔上边一组图像的第一张图像(最底层的一张)是由前一组(金字塔下面一组)图像的倒数第三章图像隔点采样得到的。
SIFT算法通过对两个相邻高斯尺度空间上的图像相减来得到DOG图像
下面结合图像来理解一下,左边的是高斯金字塔,右边的是高斯差分金字塔,这里的层数组数先不用管后面用到会再说,先看个金字塔过程这里
3. DOG关键点(尺度空间的极值点)
为了寻找尺度空间的极值点,每一个采样点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。
中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。 一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点,如图所示。
知道了极值点的找法,但是有个问题就是如果是每组的首层和末层都缺少一个临近层的时候,又怎么找呢?当然还是按上面的原则,缺少的话我们就再添加补上,这里为什么要在顶层加上高斯模糊生成的3幅图像呢?这里增加图像是为了首尾层有临近层,这个数字3层是为了保证尺度变换的连续性,下面的这个图就会解释加3层,为什么能保证尺度变换的连续性。