SIFT特征点检测算法是一种检测局部特征的算法,它是通过求一幅图中的特征点及其有关scale和orientation的描述子得到特征并进行图像特征点匹配。
SIFT算法具有如下一些特点:
1.SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;
2.独特性好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;
3.多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;
4.高速性,经优化的SIFT匹配算法甚至可以达到实时地 要求;
5.可扩展性,可以很方便的与其他形式的特征向量进行联合。
SIFT特征检测主要包括以下4个基本步骤:
1.尺度空间极值检测:
搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。
2.关键点定位
在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。
3.方向确定
基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。
4.关键点描述
在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变化和光照变化。
以下内容是自己的笔记:
1.构件尺度空间
尺度空间理论的目的是 模拟图像数据的多尺度特征
高斯卷积核——实现尺度变换的唯一线性核
G(x,y,sigma) sigma的大小决定图像的平滑程度:越大,描述的是图像的概貌,低分辨率的
越小,描述的是图像的细节,高分辨率的
高斯差分尺度空间 (DoG scale-space)
图像金字塔的建立:对一幅图像I,建立其在不同尺度scale的图像,也称为子八度(octave),为了在任何尺度都能够有对应的特征点,第一个子八度的scale为原图,每升一个尺度,长宽分别减半。
2.LoG近似DoG找到关键点<检测DoG尺度空间极值点>
本层的周围8个点,上下两层的9*2个点,共26个点。一个点如果在DoG尺度空间本层以及上下两层的26个邻域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点。
3.除去不好的特征点
4.给特征点赋值一个128维方向参数
利用关键点邻域像素的梯度方向分布特性为每个关键点指定方向参数,使算子具备旋转不变性,每个关键点有三个信息:位置、所处尺度、方向。
梯度直方图的范围是0~360度,其中每10度一个柱,总共36个柱。随着距中心点越远的邻域其对直方图的贡献也相应减小。
我们以关键点为中心的邻域窗口内采样,并用直方图统计邻域像素的梯度方向。直方图的峰值代表了该关键点处邻域梯度的主方向,即作为该关键点的方向,超过最大bin值80%的那些方向作为辅助方向。
关键点描述子的生成步骤:
(1)旋转主方向:将坐标轴旋转为关键点的方向,以确保旋转不变性;
(2)生成描述子:对于一个关键点产生128个数据,即最终形成128维的SIFT特征向量;
(3)归一化处理:将特征向量的长度归一化,则可以进一步去除光照变化的影响。
5.关键点描述子的生成
取每个特征点的16*16邻域,然后将其划分成4个4*4的小块,在每个4*4的小块上计算8个方向的梯度方向直方图,绘制每个梯度方向的累加值,即可形成一个种子点。
这样,每个feature就可以形成一个4*4*8=128维的描述子。
6.根据SIFT进行Match
比较两幅图中所有scale的描述子进行匹配(例如:Hamming距离法)。