SIFT的思路整理笔记

尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种计算机视觉的算法用来detect与describe local features,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe在1999年所发表,2004年完善总结。

Applications includeobject recognition,robotic mapping and navigation,image stitching,3D modeling,gesture recognition,video tracking, individual identification of wildlife andmatch moving.

我很不理解,就开始从怎么来的开始入手,首选是

  • 1.尺度空间的相关知识

目的:

  • 现实世界的物体由不同尺度的结构所组成;
  • 在人的视觉中,对物体观察的尺度不同,物体的呈现方式也不同;
  • 对计算机视觉而言,无法预知某种尺度的物体结构是有意义的,因此有必要将所有尺度的结构表示出来;
  • 从测量的角度来说,对物体的测量数据必然是依赖于某个尺度的,例如温度曲线的采集,不可能是无限的,而是在一定温度范围进行量化采集。温度范围即是选择的尺度;
  • 采用尺度空间理论对物体建模,即将尺度的概念融合入物理模型之中。

    尺度空间的性质:

    The linearscale space representation of signal obtained by smoothing with the Gaussian kernel satisfies a number of properties 'scale-space axioms' that make it a special form of multi-scale representation:

    SIFT的思路整理笔记_第1张图片

    参考翻译大概就是:

  • 线性
  • 平移不变性
  • 半群特性:g(x,y,t1) *g(x,y,t2) =g(x,y,t1 +t2)
  • 旋转不变性
  • 尺度不变性
  • 正定性
  • 正规性(积分为1)
  • 不会引入新的极点
  • 不会增强极点
  • 存在无穷小的算子(可微性)

    以上条件,唯一可能的尺度空间核函数是高斯核函数。

    其他多尺度表示方法:

    • 金字塔表示
    • 非线性尺度空间
    • 仿射高斯尺度空间
    • 小波理论

        尺度空间表达和金字塔多分辨率表达之间最大的不同是:

    • 尺度空间表达是由不同高斯核平滑卷积得到,在所有尺度上有相同的分辨率;
    • 而金字塔多分辨率表达每层分辨率减少固定比率。
    所以,金字塔多分辨率生成较快,且占用存储空间少;而多尺度表达随着尺度参数的增加冗余信息也变多。多尺度表达的优点在于图像的局部特征可以用简单的形式在不同尺度上描述;而金字塔表达没有理论基础,难以分析图像局部特征。

    因此尺度空间的获取需要使用高斯模糊来实现,Lindeberg等人已证明高斯卷积核是实现尺度变换的唯一变换核,并且是唯一的线性核。尺度空间使用高斯金字塔表示。Tony Lindeberg指出尺度规范化的LoG(Laplacion of Gaussian)算子具有真正的尺度不变性,Lowe使用高斯差分金字塔近似LoG算子,在尺度空间检测稳定的关键点。

    什么是高斯模糊?它是一种图像滤波器,它使用正态分布(高斯函数)计算模糊模板,并使用该模板与原图像做卷积运算,达到模糊图像的目的。

    高斯模糊说明过程参考http://blog.csdn.net/zddblog/article/details/7521424#t4

    (一)用二维高斯函数说明

    N维空间正态分布方程为:

    (1-1)

    其中,是正态分布的标准差,值越大,图像越模糊(平滑)。r为模糊半径,模糊半径是指模板元素到模板中心的距离。如二维模板大小为m*n,则模板上的元素(x,y)对应的高斯计算公式为:

    (1-2)

       在二维空间中,这个公式生成的曲面的等高线是从中心开始呈正态分布的同心圆,如图2.1所示。分布不为零的像素组成的卷积矩阵与原始图像做变换。每个像素的值都是周围相邻像素值的加权平均。原始像素的值有最大的高斯分布值,所以有最大的权重,相邻像素随着距离原始像素越来越远,其权重也越来越小。这样进行模糊处理比其它的均衡模糊滤波器更高地保留了边缘效果。

    SIFT的思路整理笔记_第2张图片

    理论上来讲,图像中每点的分布都不为零,这也就是说每个像素的计算都需要包含整幅图像。在实际应用中,在计算高斯函数的离散近似时,在大概3σ距离之外的像素都可以看作不起作用,这些像素的计算也就可以忽略。通常,图像处理程序只需要计算的矩阵就可以保证相关像素影响。

    (二)图像的二维高斯模糊

    根据σ的值,计算出高斯模板矩阵的大小(),使用公式(1-2)计算高斯模板矩阵的值,与原图像做卷积,即可获得原图像的平滑(高斯模糊)图像。为了确保模板矩阵中的元素在[0,1]之间,需将模板矩阵归一化。5*5的高斯模板如表2.1所示。

    SIFT的思路整理笔记_第3张图片


    下图是5*5的高斯模板卷积计算示意图。高斯模板是中心对称的。

    SIFT的思路整理笔记_第4张图片

    SIFT的思路整理笔记_第5张图片

    (三)分离高斯模糊

    如图2.3所示,使用二维的高斯模板达到了模糊图像的目的,但是会因模板矩阵的关系而造成边缘图像缺失(2.3 b,c),越大,缺失像素越多,丢弃模板会造成黑边(2.3 d)。更重要的是当变大时,高斯模板(高斯核)和卷积运算量将大幅度提高。根据高斯函数的可分离性,可对二维高斯模糊函数进行改进。

    高斯函数的可分离性是指使用二维矩阵变换得到的效果也可以通过在水平方向进行一维高斯矩阵变换加上竖直方向的一维高斯矩阵变换得到。从计算的角度来看,这是一项有用的特性,因为这样只需要次计算,而二维不可分的矩阵则需要次计算,其中,m,n为高斯矩阵的维数,M,N为二维图像的维数。

    另外,两次一维的高斯卷积将消除二维高斯矩阵所产生的边缘。(关于消除边缘的论述如下图2.4所示, 对用模板矩阵超出边界的部分——虚线框,将不做卷积计算。如图2.4中x方向的第一个模板1*5,将退化成1*3的模板,只在图像之内的部分做卷积。)

    SIFT的思路整理笔记_第6张图片

    SIFT的思路整理笔记_第7张图片

    附录1是用实现的二维高斯模糊和分离高斯模糊。表2.2为上述两种方法和opencv2.3开源库实现的高斯模糊程序的比较。

    SIFT的思路整理笔记_第8张图片

    像素点的值是周围像素点的加权平均,因为中心点高,所以可以说明上面一句话,距离原始像素越来越远,其权重也越来越小,我认为比较重要。

    然后就是尺度空间的生成:

    一个图像的尺度空间,定义为一个变化尺度的高斯函数与原图像的卷积。

      

    其中,*表示卷积运算,

      

    其中m,n表示高斯模板的维度(由确定)。(x, y)代表图像的像素位置。是尺度空间因子,值越小表示图像被平滑的越少,相应的尺度也就越小。大尺度对应于图像的概貌特征,小尺度对应于图像的细节特征。

    为了有效的在尺度空间检测到稳定的关键点,提出了高斯差分尺度空间(DOG scale-space)。利用不同尺度的高斯差分核与图像卷积生成。

    下图所示不同σ下图像尺度空间:

    SIFT的思路整理笔记_第9张图片


    关于尺度空间的理解说明:2kσ中的2是必须的,尺度空间是连续的。在  Lowe的论文中 ,将第0层的初始尺度定为1.6(最模糊),图片的初始尺度定为0.5(最清晰). 在检测极值点前对原始图像的高斯平滑以致图像丢失高频信息,所以 Lowe 建议在建立尺度空间前首先对原始图像长宽扩展一倍,以保留原始图像信息,增加特征点数量。尺度越大图像越模糊。 

    • 2.金字塔的生成

    对图像做不同尺度的高斯模糊;

    对图像做降采样(隔点采样)。

    SIFT的思路整理笔记_第10张图片

    图像的金字塔模型是指,将原始图像不断降阶采样,得到一系列大小不一的图像,由大到小,从下到上构成的塔状模型。原图像为金子塔的第一层,每次降采样所得到的新图像为金字塔的一层(每层一张图像),每个金字塔共n层。金字塔的层数根据图像的原始大小和塔顶图像的大小共同决定,其计算公式如下:

    (3-3)

    其中M,N为原图像的大小,t为塔顶图像的最小维数的对数值。如,对于大小为512*512的图像,金字塔上各层图像的大小如表3.1所示,当塔顶图像为4*4时,n=7,当塔顶图像为2*2时,n=8。

    为了让尺度体现其连续性,高斯金字塔在简单降采样的基础上加上了高斯滤波。如图3.1所示,将图像金字塔每层的一张图像使用不同参数做高斯模糊,使得金字塔的每层含有多张高斯模糊图像,将金字塔每层多张图像合称为一组(Octave),金字塔每层只有一组图像,组数和金字塔层数相等,使用公式(3-3)计算,每组含有多张(也叫层Interval)图像。另外,降采样时金字塔上边一组图像的第一张图像(最底层的一张)是由前一组(金字塔下面一组)图像的倒数第三张隔点采样得到。(上面表格第二层的图片大小应该为256吧)。

    高斯金字塔的组数为:


    高斯模糊的系数σ,具体关系如下:

    (这个不知道为什么?)

    其中,σ为尺度空间坐标,s为每组中层坐标,σ0为初始尺度,S为每组层数(一般为3~5)。根据这个公式,我们可以得到金字塔组内各层尺度以及组间各图像尺度关系。

    组内相邻图像尺度关系:


    相邻组间尺度关系:


    所以,相邻两组的同一层尺度为2倍的关系

    最终尺度序列总结为:


    o为金字塔组数,n为每组金字塔层数。


    注:由于组内的多张图像按层次叠放,因此组内的多张图像也称做多层,为避免与金字塔层的概念混淆,本文以下内容中,若不特别说明是金字塔层数,层一般指组内各层图像。

    注:如3.4节所示,为了在每组中检测S个尺度的极值点,则DOG金字塔每组需S+2层图像,而DOG金字塔由高斯金字塔相邻两层相减得到,则高斯金字塔每组需S+3层图像,实际计算时S在3到5之间。取S=3时,假定高斯金字塔存储索引如下:

    第0组(即第-1组):  0 1  2  3  4   5

    第1组:            6 7  8  9  10 11

    第2组:            ?

    则第2组第一张图片根据第一组中索引为9的图片降采样得到,其它类似。 

    图像金字塔化一般包括两个步骤:使用低通滤波器平滑图像;对平滑图像进行降采样(通常是水平,竖直方向1/2),从而得到一系列尺寸缩小的图像。

    SIFT的思路整理笔记_第11张图片

    上图中(a)是对原始信号进行低通滤波,(b)是降采样得到的信号。

    而对于二维图像,一个传统的金字塔中,每一层图像由上一层分辨率的长、宽各一半,也就是四分之一的像素组成:

    SIFT的思路整理笔记_第12张图片


    在使用尺度空间时使用金字塔表示,也就是计算机视觉中最有名的拉普拉斯金子塔(《The Laplacian pyramid as a compact image code》)。

    高斯拉普拉斯LoG(Laplace of Guassian)算子就是对高斯函数进行拉普拉斯变换:

    核心思想还是高斯。




    介绍一下:高斯差分金字塔(DoG)

    2002年Mikolajczyk在详细的实验比较中发现尺度归一化的高斯拉普拉斯函数的极大值和极小值同其它的特征提取函数,例如:梯度,Hessian或Harris角特征比较,能够产生最稳定的图像特征。

    而Lindeberg早在1994年就发现高斯差分函数(Difference of Gaussian ,简称DOG算子)与尺度归一化的高斯拉普拉斯函数非常近似。其中的关系可以从如下公式推导得到:

    利用差分近似代替微分,则有:

                       

    因此有

    其中k-1是个常数,并不影响极值点位置的求取。

    SIFT的思路整理笔记_第13张图片

    如图3.2所示,红色曲线表示的是高斯差分算子,而蓝色曲线表示的是高斯拉普拉斯算子。Lowe使用更高效的高斯差分算子代替拉普拉斯算子进行极值检测,如下:

    (3-4)

    在实际计算时,使用高斯金字塔每组中相邻上下两层图像相减,得到高斯差分图像,如图3.3所示,进行极值检测。

    构建高斯金字塔之,就是用金字塔相邻图像相减构造DoG金字塔。

    SIFT的思路整理笔记_第14张图片








    下面是http://blog.csdn.net/xiaowei_cqu/article/details/27692123做的一个LoG和DoG的比较:

    在实际计算时,三种方法计算的金字塔组数noctaves,尺度空间坐标σ,以及每组金字塔内的层数S是一样的。同时,假设图像为640*480的标准图像。

    金字塔层数:


    其中o_min = 0,对于分辨率为640*480的图像N=5。

    每组金字塔内图像数:
    S=3,即在做极值检测时使用金子塔内中间3张图像。
    对于LoG每组金字塔内有S+2张图像(S=-1,0,1,2,3),需要做S+1次高斯模糊操作(后一张图像由前一张做高斯模糊得到);而DoG每组金字塔有S+3张高斯图像,得到S+2张DoG图像。
    尺度空间系数:


    其中,S表示每组金字塔内图像层数,n为当前高斯层数,取0-4。DoG需要5个尺度系数得到6张GSS图像,而LoG只需要前4个尺度系数得到5张图像。

    LoG高斯核使用正太分布(高斯函数)计算模糊模版,N维空间正太分布方程为:

     

    于是,二维高斯模板上的距离中心点为(x,y)的元素对应高斯计算公式为:

     

    规范化的高斯拉普拉斯图像为

     

    最终构造LoG金字塔有5层,每层有S+2=5张图像,每层金字塔内每张图像尺度是前一张的k倍,即构成的连续尺度序列:


    其中o为当前金字塔层数,n为在当前金字塔层中图像张数。
    由于卷积计算性质:

    (不是很理解这个公式,标准差的平方和不对啊,按照http://blog.csdn.net/liguan843607713/article/details/42215965的证明过程,上面公式对么?应该是(根号k平方减一))

    在计算时,通过对前一张图像做尺度系数为的卷积操作,可以减少卷积计算次数。故在金字塔每层内的S+2张图像,需要S+1次卷积操作,每次LoG核的尺度系数为:

     SIFT的思路整理笔记_第15张图片

    图1. LoG金字塔示意图。 左侧为图像尺度空间系数,红色矩形框为实际参与比较的空间系数,右侧为在上一张图像做LoG卷积操作的尺度系数

    DoG由于LoG与Gauss核具有如下关系:


    即,

     

    因此,LoG算子可以用高斯差分算子DoG(Difference of Guassians)表示。

     

    于是通过高斯金字塔每层内相邻两张图像相减可以得到DoG金字塔。对于最后需要S张图像寻找极值点,需要S+2张DoG图像,S+3张高斯图像。具体关系如图2.所示。

    SIFT的思路整理笔记_第16张图片

    图 2. 由高斯金字塔得到DoG金字塔及其对应的尺度空间系数示意图。


    LoG & DoG

    一个直观的比较结果,使用分别计算LoG和DoG,得到:

    SIFT的思路整理笔记_第17张图片

    可以看到,LoG比DoG明显需要更多的加法运算和乘法运算。虽然DoG需要在每层金字塔多做一次高斯操作(即为了得到S+2张DoG图需要S+3张高斯模糊图),但通过减法取代LoG核的计算过程,显著减少了运算次数,大大节省了运算时间。

    • 3.检测尺度空间极值点

    LoG近似DoG找到关键点也就是检测尺度空间极值点,

    为了寻找尺度空间的极值点,每一个采样点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。如图所示,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。 一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点,如图所示。黑色的x为当前像素,跟26个点进行比较,判断出是最大值或者是最小值,则x就是特征点

    SIFT的思路整理笔记_第18张图片

    同一组中的相邻尺度(由于k的取值关系,肯定是上下层)之间进行寻找

    SIFT的思路整理笔记_第19张图片

    s=3的情况

     在极值比较的过程中,每一组图像的首末两层是无法进行极值比较的,为了满足尺度变化的连续性(下面有详解)

    我们在每一组图像的顶层继续用高斯模糊生成了 3 幅图像,高斯金字塔有每组S+3层图像。DOG金字塔每组有S+2层图像.


    ==========================================

    这里有的童鞋不理解什么叫“为了满足尺度变化的连续性”,现在做仔细阐述:

    假设s=3,也就是每个塔里有3层,则k=21/s=21/3,那么按照上图可得Gauss Space和DoG space 分别有3个(s个)和2个(s-1个)分量,在DoG space中,1st-octave两项分别是σ,kσ; 2nd-octave两项分别是2σ,2kσ;由于无法比较极值,我们必须在高斯空间继续添加高斯模糊项,使得形成σ,kσ,k2σ,k3σ,k4σ这样就可以选择DoG space中的中间三项kσ,k2σ,k3σ(只有左右都有才能有极值),那么下一octave中(由上一层降采样获得)所得三项即为2kσ,2k2σ,2k3σ,其首项2kσ=24/3。刚好与上一octave末项k3σ=23/3尺度变化连续起来,所以每次要在Gaussian space添加3项,每组(塔)共S+3层图像,相应的DoG金字塔有S+2层图像。

    ==========================================

    使用Laplacian of Gaussian能够很好地找到找到图像中的兴趣点,但是需要大量的计算量,所以使用Difference of Gaussian图像的极大极小值近似寻找特征点.DOG算子计算简单,是尺度归一化的LoG算子的近似,

    有关DOG寻找特征点的介绍及方法详见

    http://blog.csdn.net/abcjennifer/article/details/7639488

    http://blog.csdn.net/songzitea/article/details/8831909

    极值点检测用的Non-Maximal Suppression

    这样产生的极值点并不全都是稳定的特征点,因为某些极值点响应较弱,而且DOG算子会产生较强的边缘响应。

    • 4.关键点定位

    以上方法检测到的极值点是离散空间的极值点,以下通过拟合三维二次函数来精确确定关键点的位置和尺度,同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力。

    (一)关键点的精确定位

    离散空间的极值点并不是真正的极值点,图4.1显示了二维函数离散空间得到的极值点与连续空间极值点的差别。利用已知的离散空间点插值得到的连续空间极值点的方法叫做子像素插值(Sub-pixel Interpolation)。

    SIFT的思路整理笔记_第20张图片

    为了提高关键点的稳定性,需要对尺度空间DoG函数进行曲线拟合。利用DoG函数在尺度空间的Taylor展开式(拟合函数)为:

    (4-1)

    其中,。求导并让方程等于零,可以得到极值点的偏移量为:

    (4-2)

    对应极值点,方程的值为:

    (4-3)

    其中,代表相对插值中心的偏移量,当它在任一维度上的偏移量大于0.5时(即x或y或),意味着插值中心已经偏移到它的邻近点上,所以必须改变当前关键点的位置。同时在新的位置上反复插值直到收敛;也有可能超出所设定的迭代次数或者超出图像边界的范围,此时这样的点应该删除,在Lowe中进行了5次迭代。另外,过小的点易受噪声的干扰而变得不稳定,所以将小于某个经验值(Lowe论文中使用0.03,Rob Hess等人实现时使用0.04/S)的极值点删除。同时,在此过程中获取特征点的精确位置(原位置加上拟合的偏移量)以及尺度()。

    (二)消除边缘响应

    一个定义不好的高斯差分算子的极值在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率。

    DOG算子会产生较强的边缘响应,需要剔除不稳定的边缘响应点。获取特征点处的Hessian矩阵,主曲率通过一个2x2 的Hessian矩阵H求出:

      (4-4)

    H的特征值α和β代表x和y方向的梯度,

     (4-5)

    表示矩阵H对角线元素之和,表示矩阵H的行列式。假设是α较大的特征值,而是β较小的特征值,令,则

    (4-6)                

    导数由采样点相邻差估计得到,在下一节中说明。

    D的主曲率和H的特征值成正比,令为α最大特征值,β为最小的特征值,则公式的值在两个特征值相等时最小,随着的增大而增大。值越大,说明两个特征值的比值越大,即在某一个方向的梯度值越大,而在另一个方向的梯度值越小,而边缘恰恰就是这种情况。所以为了剔除边缘响应点,需要让该比值小于一定的阈值,因此,为了检测主曲率是否在某域值r下,只需检测

    (4-7)

    式(4-7)成立时将关键点保留,反之剔除。

    在Lowe的文章中,取r=10。图4.2右侧为消除边缘响应后的关键点分布图。

      

    SIFT的思路整理笔记_第21张图片

    (三)有限差分法求导

    有限差分法以变量离散取值后对应的函数值来近似微分方程中独立变量的连续取值。在有限差分方法中,我们放弃了微分方程中独立变量可以取连续值的特征,而关注独立变量离散取值后对应的函数值。但是从原则上说,这种方法仍然可以达到任意满意的计算精度。因为方程的连续数值解可以通过减小独立变量离散取值的间格,或者通过离散点上的函数值插值计算来近似得到。这种方法是随着计算机的诞生和应用而发展起来的。其计算格式和程序的设计都比较直观和简单,因而,它在计算数学中使用广泛。

    有限差分法的具体操作分为两个部分:

    1. 用差分代替微分方程中的微分,将连续变化的变量离散化,从而得到差分方程组的数学形式;

    2. 求解差分方程组。

    一个函数在x点上的一阶和二阶微商,可以近似地用它所临近的两点上的函数值的差分来表示。如对一个单变量函数f(x),x为定义在区间[a,b]上的连续变量,以步长将区间[a,b]离散化,我们会得到一系列节点,

    然后求出f(x)在这些点上的近似值。显然步长h越小,近似解的精度就越好。与节点相邻的节点有,所以在节点处可构造如下形式的差值:

     节点的一阶向前差分

    节点的一阶向后差分

    节点的一阶中心差分

    本文使用中心差分法利用泰勒展开式求解第四节所使用的导数,现做如下推导。

    函数f(x)在处的泰勒展开式为:

    (4-8)

    则,

    (4-9)

    (4-10)

    忽略h平方之后的项,联立式(4-9),(4-10)解方程组得:

    (4-11)

     (4-12)

    二元函数的泰勒展开式如下:

    SIFT的思路整理笔记_第22张图片

    展开后忽略次要项联立解方程得二维混合偏导如下:

    (4-13)

    综上,推导了4.1,4.2遇到的所有导数计算。同理,利用多元泰勒展开式,可得任意偏导的近似差分表示。

    SIFT的思路整理笔记_第23张图片

    在图像处理中,取h=1,在图4.2所示的图像中,将像素0的基本中点导数公式整理如下:

    SIFT的思路整理笔记_第24张图片


    (四)三阶矩阵求逆公式

    高阶矩阵的求逆算法主要有归一法和消元法两种,现将三阶矩阵求逆公式总结如下:

    若矩阵

    SIFT的思路整理笔记_第25张图片

    可逆,即时,

    (4-14)

    • 5.关键点方向分配(128维方向参数)

    上一步中确定了每幅图中的特征点,为每个特征点计算一个方向,依照这个方向做进一步的计算, 利用关键点邻域像素的梯度方向分布特性为每个关键点指定方向参数,使算子具备旋转不变性。


    为(x,y)处梯度的模值和方向公式。其中L所用的尺度为每个关键点各自所在的尺度。至此,图像的关键点已经检测完毕,每个关键点有三个信息:位置,所处尺度、方向,由此可以确定一个SIFT特征区域。

    梯度直方图的范围是0~360度,其中每10度一个柱,总共36个柱。随着距中心点越远的领域其对直方图的贡献也响应减小.Lowe论文中还提到要使用高斯函数对直方图进行平滑,减少突变的影响。在实际计算时,我们在以关键点为中心的邻域窗口内采样,并用直方图统计邻域像素的梯度方向。梯度直方图的范围是0~360度,其中每45度一个柱,总共8个柱, 或者每10度一个柱,总共36个柱。Lowe论文中还提到要使用高斯函数对直方图进行平滑,减少突变的影响。直方图的峰值则代表了该关键点处邻域梯度的主方向,即作为该关键点的方向

    SIFT的思路整理笔记_第26张图片

    直方图中的峰值就是主方向,其他的达到最大值80%的方向可作为辅助方向

    SIFT的思路整理笔记_第27张图片

    由梯度方向直方图确定主梯度方向

    该步中将建立所有scale中特征点的描述子(128维)

    SIFT的思路整理笔记_第28张图片

    Identify peak and assign orientation and sum of magnitude to key point.The user may choose a threshold to exclude key points based on their assigned sum of magnitudes.

    关键点描述子的生成步骤

    SIFT的思路整理笔记_第29张图片

     通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。为了增强匹配的鲁棒性,只保留峰值大于主方向峰值80%的方向作为该关键点的辅方向。因此,对于同一梯度值的多个峰值的关键点位置,在相同位置和尺度将会有多个关键点被创建但方向不同。仅有15%的关键点被赋予多个方向,但可以明显的提高关键点匹配的稳定性。实际编程实现中,就是把该关键点复制成多份关键点,并将方向值分别赋给这些复制后的关键点,并且离散的梯度方向直方图要进行插值拟合处理,来求得更精确的方向角度值。

    • 6.关键点特征描述生成

    通过以上步骤,对于每一个关键点,拥有三个信息:位置、尺度以及方向。接下来就是为每个关键点建立一个描述符,用一组向量将这个关键点描述出来,使其不随各种变化而改变,比如光照变化、视角变化等等。这个描述子不但包括关键点,也包含关键点周围对其有贡献的像素点,并且描述符应该有较高的独特性,以便于提高特征点正确匹配的概率。 

    SIFT描述子是关键点高斯图像梯度统计结果的一种表示。通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。

    Lowe建议描述子使用在关键点尺度空间内4*4的窗口中计算的8个方向的梯度信息,共4*4*8=128维向量表征。表示步骤如下:

    (1). 确定计算描述子所需的图像区域

    特征描述子与特征点所在的尺度有关,因此,对梯度的求取应在特征点对应的高斯图像上进行。将关键点附近的划分为d*d(Lowe建议d=4)个子区域,每个子区域做为一个种子点,每个种子点有8个方向。每个子区域的大小与关键点方向分配时相同,即每个区域有个子像素,为每个子区域分配边长为的矩形区域进行采样(个子像素实际用边长为的矩形区域即可包含,但由式(3-8),不大,为了简化计算取其边长为,并且采样点宜多不宜少)。考虑到实际计算时,需要采用双线性插值,所需图像窗口边长为。在考虑到旋转因素(方便下一步将坐标轴旋转到关键点的方向),如下图6.1所示,实际计算所需的图像区域半径为:

       (6-1)

    计算结果四舍五入取整。

    SIFT的思路整理笔记_第30张图片

    (2). 将坐标轴旋转为关键点的方向,以确保旋转不变性,如6.2所示。 

    SIFT的思路整理笔记_第31张图片

    旋转后内采样点的新坐标为:

      (6-2)

    (3). 将内的采样点分配到对应的子区域内,将子区域内的梯度值分配到8个方向上,计算其权值。

    旋转后的采样点坐标在半径为radius的圆内被分配到的子区域,计算影响子区域的采样点的梯度和方向,分配到8个方向上。

    旋转后的采样点落在子区域的下标为

        (6-3)

    Lowe建议子区域的像素的梯度大小按的高斯加权计算,即

    (6-4)

    其中a,b为关键点在高斯金字塔图像中的位置坐标。

    (4). 插值计算每个种子点八个方向的梯度。

    SIFT的思路整理笔记_第32张图片

    如图6.3所示,将由式(6-3)所得采样点在子区域中的下标(图中蓝色窗口内红色点)线性插值,计算其对每个种子点的贡献。如图中的红色点,落在第0行和第1行之间,对这两行都有贡献。对第0行第3列种子点的贡献因子为dr,对第1行第3列的贡献因子为1-dr,同理,对邻近两列的贡献因子为dc和1-dc,对邻近两个方向的贡献因子为do和1-do。则最终累加在每个方向上的梯度大小为:

    (6-5)

    其中k,m,n为0或为1。

    (5). 如上统计的4*4*8=128个梯度信息即为该关键点的特征向量。特征向量形成后,为了去除光照变化的影响,需要对它们进行归一化处理,对于图像灰度值整体漂移,图像各点的梯度是邻域像素相减得到,所以也能去除。得到的描述子向量为,归一化后的特征向量为

     (6-7)

    (6). 描述子向量门限。非线性光照,相机饱和度变化对造成某些方向的梯度值过大,而对方向的影响微弱。因此设置门限值(向量归一化后,一般取0.2)截断较大的梯度值。然后,再进行一次归一化处理,提高特征的鉴别性。

    (7). 按特征点的尺度对特征描述向量进行排序。

    至此,SIFT特征描述向量生成。

     

    描述向量这块不好理解,zddhub画的草图,供参考:

    SIFT的思路整理笔记_第33张图片

    • 7.SIFT的缺点

    SIFT在图像的不变特征提取方面拥有无与伦比的优势,但并不完美,仍然存在:

    1. 实时性不高。

    2. 有时特征点较少。

    3. 对边缘光滑的目标无法准确提取特征点。

    等缺点,如下图7.1所示,对模糊的图像和边缘平滑的图像,检测出的特征点过少,对圆更是无能为力。近来不断有人改进,其中最著名的有SURF和CSIFT。

    SIFT的思路整理笔记_第34张图片

    =====================================================未完

    关于金字塔的推荐两篇论文

    1、The Pyramid Match: Efficient Matching for Retrieval and Recognition

    2、Beyond Bags of Features: Spatial Pyramid Matching for Recognizing Natural Scene Categories

    --------------------------------------参考-----------------------------------------------------

    http://blog.csdn.net/xiaowei_cqu/article/details/27692123

    http://blog.csdn.net/xiaowei_cqu/article/details/8067881

    http://blog.csdn.net/abcjennifer/article/details/7639681

    http://blog.csdn.net/zddblog/article/details/7521424#t4

    http://blog.sina.com.cn/s/blog_53896f580100krm9.html

    https://en.wikipedia.org/wiki/Scale-space_axioms 

    https://en.wikipedia.org/wiki/Scale-invariant_feature_transform

    

  • 你可能感兴趣的:(SIFT的思路整理笔记)