SIFT特征提取算法
Posted 小木匠_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SIFT特征提取算法相关的知识,希望对你有一定的参考价值。
学到SIFT看到了参考了最下面的四篇文章,最后综合起来,根据自己的理解,按着自己的想法,手敲了下面的内容,感觉好长,不过希望对大家有用。
SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points)及其有关scale 和 orientation 的描述子得到特征并进行图像特征点匹配,获得了良好效果。
基本的路线:
1. 尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。
2. 关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。
3. 方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。
4. 关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。
一、尺度空间
尺度空间理论的基本思想是:在图像信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测和不同分辨率上的特征提取等。
尺度空间理论目的是模拟数据的多尺度特征。
为什么要先建立尺度空间呢?因为计算机机器对不知道物体的尺度,所以我们要先教会机器认识,教机器那就是把不同尺度的物像输入给及其,完成一个认知的过程。在构建尺度空间的过程中,相关的就是高斯卷积核,也是实现尺度变换的唯一线性核。通过不同的来构造尺度空间
对于一个二维图像的尺度空间定义为
其中G(x,y,)是尺度可变的高斯函数
是尺度空间因子,是高斯正态分布的方差,反映了图像被平滑的程度,值越小表征图形被平滑程度越小,相应尺度也越小
进一步为了高效地在尺度空间内检测出稳定的特征点,在SIFT算法中使用尺度空间中的差分高斯(Ddifferenc of Gaussina,DOG)z作为极值作为判别依据。DOG子定义如下
下图是不同下图像尺度空间
二、图像金字塔,高斯金字塔,高斯差分金字塔
这三个金字塔是为了找极值点(关键点的铺垫)
图像金字塔:首先是低通滤波器平滑图像,然后对预处理的图像进行降采样(水平竖直的1/2),从而得到一系列尺寸缩小的图像。、
对于传统的金字塔,每一层是由上一层分辨率的长宽各一半,也就是1/4的像素组成。
高斯金字塔是在多分辨率金字塔简单的降采样基础上高斯滤波得到的,也就是对金字塔每层图像用不同的做高斯模糊。金字塔的每层的多张图像合称为一组octave,每组都会有不同的层。需要注意的是,在降采样的时候,金字塔上边一组图像的第一张图像(最底层的一张)是由前一组(金字塔下面一组)图像的倒数第三章图像隔点采样得到的。
而SIFT算法通过对两个相邻高斯尺度空间上的图像相减来得到DOG图像,就是D(x,y,)
下面结合图像来理解一下,左边的是高斯金字塔,右边的是高斯差分金字塔,这里的层数组数先不用管后面用到会再说,先看个金字塔过程这里
三、DOG关键点(尺度空间的极值点)
为了寻找尺度空间的极值点,每一个采样点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。
如图所示,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。 一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点,如图所示。
知道了极值点的找法,但是有个问题就是如果是每组的首层和末层都缺少一个临近层的时候,又怎么找呢?当然还是按上面的原则,缺少的话我们就再添加补上,这里为什么要在顶层加上高斯模糊生成的3幅图像呢?这里增加图像是为了首尾层有临近层,这个数字3层是为了保证尺度变换的连续性,下面的这个图就会解释加3层,为什么能保证尺度变换的连续性。
以上是关于SIFT特征提取算法的主要内容,如果未能解决你的问题,请参考以下文章