一. SIFT算法概述
1.1 算法提出的背景:
图像匹配的核心挑战在于将同一目标在不同时间、不同分辨率、不同光照条件、不同位姿下所成的像进行正确对应。传统的匹配算法通常直接提取角点或边缘特征,对环境变化的适应能力较弱,因此迫切需要一种鲁棒性强、能够适应不同光照、不同位姿等复杂场景的有效目标识别方法。1999年,英属哥伦比亚大学的大卫·劳伊(David G.Lowe)教授总结了当时基于不变量技术的特征检测方法,正式提出了一种基于尺度空间、对图像缩放、旋转甚至仿射变换保持不变的局部图像特征描述算子——SIFT(尺度不变特征变换,Scale-Invariant Feature Transform)。该算法在2004年得到了进一步完善与推广。

1.2 算法核心思想:
SIFT算法将一幅图像映射(变换)为一个局部特征向量集合;这些特征向量具有平移、缩放、旋转不变性,同时对光照变化、仿射变换及投影变换也具备一定的不变性。
算法实现步骤简述:
SIFT算法的实质可以归结为在不同尺度空间上查找稳定特征点(关键点)的问题。

1.3 SIFT算法实现物体识别的三大主要工序:
- 提取关键点;
- 为关键点附加详细信息(局部特征),即所谓的描述子;
- 通过两方特征点(附带有特征向量的关键点)的两两比较,找出相互匹配的若干对特征点,从而建立景物之间的对应关系。
二. SIFT算法实现细节详解
下面我们将逐步深入SIFT算法的核心实现过程,从尺度空间构建到关键点匹配,每一步都附有详细说明和图示,帮助你深入理解这一经典算法的每一个环节。
2.1. 构建尺度空间
尺度空间理论基础:
这是一个初始化操作,尺度空间理论的目的是模拟图像数据的多尺度特征。高斯核是唯一能够产生多尺度空间的核函数,一个图像的尺度空间 L(x,y,σ) 定义为原始图像 I(x,y) 与一个可变尺度的二维高斯函数 G(x,y,σ) 的卷积运算。尺度是自然存在的,并非人为创造!高斯卷积只是表现尺度空间的一种形式……


其中 G(x,y,σ) 是尺度可变高斯函数,(x,y)是空间坐标,σ是尺度坐标。σ大小决定图像的平滑程度:大尺度对应图像的概貌特征,小尺度对应图像的细节特征。大的σ值对应粗糙尺度(低分辨率),反之对应精细尺度(高分辨率)。为了在尺度空间有效检测到稳定的关键点,提出了高斯差分尺度空间(DOG scale-space),即利用不同尺度的高斯差分核与图像卷积生成。

下图展示了不同σ下图像的尺度空间:

关于尺度空间的理解说明:
2kσ中的2是必须的,尺度空间是连续的。在Lowe的论文中,将第0层的初始尺度定为1.6(最模糊),图片的初始尺度定为0.5(最清晰)。在检测极值点前,对原始图像进行高斯平滑会丢失高频信息,因此Lowe建议在建立尺度空间前先将原始图像长宽扩展一倍,以保留原始图像信息,增加特征点数量。尺度越大,图像越模糊。
图像金字塔的建立:
对于一幅图像I,建立其在不同尺度下的图像,也称为子八度(octave),这是为了实现尺度不变性(scale-invariant),即在任何尺度下都能找到对应的特征点。第一个子八度的尺度为原图大小,后面每个octave是上一个octave降采样的结果,即原图的1/4(长宽分别减半),构成下一个子八度(更高一层金字塔)。


由图像尺寸决定建几个金字塔,每座金字塔包含几层图像(S一般为3-5层)。第0塔的第0层是原始图像(或经过double后的图像),往上每一层是对其下一层进行高斯卷积(Laplacian变换),其中σ值逐渐增大,例如可以是σ, k*σ, k*k*σ……直观上看,越往上图像越模糊。塔与塔之间是降采样关系,例如第1塔的第0层可以由第0塔的第3层降采样得到,然后进行与第0塔类似的高斯卷积操作。
