SIFT算法原理(不带公式)

尺度不变特征转换(Scale-invariant feature transform或SIFT)是David Lowe于1999年提出的局部特征描述子,并于2004年进行了更深入的发展和完善。Sift特征匹配算法可以处理两幅图像之间发生平移、旋转、仿射变换情况下的匹配问题,具有很强的匹配能力。

1、SIFT算子特性

Sift算子具有以下特性:
(1)、Sift特征是图像的局部特征,对平移、旋转、尺度缩放、亮度变化、遮挡和噪声等具有良好的不变性,对视觉变化、仿射变换也保持一定程度的稳性。
(2)、独特性好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配。
(3)、多量性,即使少数的几个物体也可以产生大量Sift特征向量。
(4)、速度相对较快,经优化的Sift匹配算法甚至可以达到实时的要求。
(5)、可扩展性强,可以很方便的与其他形式的特征向量进行联合。

2、SIFT特征匹配

Sift特征匹配算法主要包括两个阶段,
第一阶段是Sift特征的生成。即从多幅图像中提取对尺度缩放、旋转、亮度变化无关的特征向量,如角点、边缘点、暗区的亮点及亮区的暗点等。
第二阶段是Sift特征向量的匹配。
2.1、Sift特征的生成一般包括以下几个步骤:
(1)、构建尺度空间,检测极值点,获得尺度不变性。
搜索所有尺度上的图像位置,通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。
这里写图片描述
(2)、特征点过滤并进行精确定位。
在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度,关键点的选择依据于它们的稳定程度。
这里写图片描述
(3)、为特征点分配方向值;
基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向,所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。
这里写图片描述

至此,图像的关键点(特征)已经检测完毕,每个关键点有三个信息:位置,所处尺度、方向,由此可以确定一个SIFT特征区域。
(4)、生成关键点描述子。
以特征点为中心取16*16的邻域作为采样窗口,将采样点与特征点的相对方向通过高斯加权后归入包含8个bin的方向直方图,最后获得4*4*8的128维特征描述子
步骤如下:
这里写图片描述
首先将坐标轴旋转为关键点的方向,以确保旋转不变性。以关键点为中心取8×8的窗口。
这里写图片描述
Figure.16*16的图中其中1/4的特征点梯度方向及scale,右图为其加权到8个主方向后的效果。

图左部分的中央为当前关键点的位置,每个小格代表关键点邻域所在尺度空间的一个像素,利用公式求得每个像素的梯度幅值与梯度方向,箭头方向代表该像素的梯度方向,箭头长度代表梯度模值,然后用高斯窗口对其进行加权运算。
图中蓝色的圈代表高斯加权的范围(越靠近关键点的像素梯度方向信息贡献越大)。然后在每4×4的小块上计算8个方向的梯度方向直方图,绘制每个梯度方向的累加值,即可形成一个种子点,如图右部分示。此图中一个关键点由2×2共4个种子点组成,每个种子点有8个方向向量信息。这种邻域方向性信息联合的思想增强了算法抗噪声的能力,同时对于含有定位误差的特征匹配也提供了较好的容错性。
计算keypoint周围的16*16的window中每一个像素的梯度,而且使用高斯下降函数降低远离中心的权重。
这里写图片描述
Figure.keypoint周围的16*16区域

这样就可以对每个feature形成一个4*4*8=128维的描述子,每一维都可以表示4*4个格子中一个的scale/orientation(尺寸/方向)。 将这个向量归一化之后,就进一步去除了光照的影响。
2.2、Sift特征匹配:
当两幅图像的Sift特征向量生成以后,下一步就可以采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。取图1的某个关键点,通过遍 历找到图像2中的距离最近的两个关键点。在这两个关键点中,如果次近距离除以最近距离小于某个阙值,则判定为一对匹配点。

参考:
http://blog.csdn.net/haluoluo211/article/details/52767143
http://blog.csdn.net/wys2011101169/article/details/53925134
http://doc.orz520.com/a/doc/2014/1013/2078573.html

你可能感兴趣的:(运动目标跟踪生成式)