很详细的一个英文博客:
http://aishack.in/tutorials/sift-scale-invariant-feature-transform-introduction/
SIFT (Scale-invariant feature transform, 尺度不变特征变换)
- 是局部特征描述子,尺度不变性
尺度空间:所有尺度上的图像位置,高斯微分函数来识别潜在对于尺度和旋转不变的兴趣点。
1.1 构建高斯金字塔,先将图像放大一倍,每一组(Octave) a1a2a3an(不同blur level)是由不断高斯模糊通过卷积高斯核构成,下一组第一张是当前组最后一张降采样构成,组内不同层插值用于构建高斯金字塔。LoG估计。
2.1 基于Difference of Gaussian 近似--> Laplacian of Gaussian 基于模糊后的二阶导, 相邻层相减构建差分高斯金字塔。关键点检测。
3.1 让候选点与周围如图26个点比较,如为极大值或极小值则初步认为是近似关键点。基于这些点结合**泰勒展开(拉格朗日定理)**和插值法找到极值subpixel位置作为关键点。剔除低部分关键点通过对比度检测和边缘检测。
4.1 通过指定阈值剔除低对比度点;基于Hessian Matrix通过梯度找到角点,两个方向梯度都小是flat region,一小一大是edge,两大是corner;基于图像局部梯度方向,给每个关键点分配一个或多个方向。
5.1 使用梯度方法计算出梯度值和梯度方向. 然后在1.5σ范围内计算梯度方向直方图。极大值为主方向,大于主方向80%的作为新关键点(跟主方向比除了方向都一样)。关键点描述(特征是生成)。
6.1 关键点可能不位于像素内,此时需要插值,周围16*16像素构成窗口计算特征向量; 每个4*4窗口像素根据梯度值和方向分为8个bins方向的直方图;最后以关键点为中心通过高斯核平滑每个窗口值,并生成8*16=128维特征向量;最终标准化除以平方和的根。为了达到旋转不变性,4*4 和 16*16窗口每个方向减去关键点的旋转使得以关键点为主方向。为了减少光照依赖性,任何大于0.2的数都设置为0.2。