特征描述子——SIFT

来源:互联网 发布:卓睿安位软件 编辑:程序博客网 时间:2024/05/21 22:06

          讨论班上同学讲了SIFT图像特征描述子,思路非常清晰,基本要点我也都听懂了,故趁热打铁记录下来。


背景


         在描述图像特征的时候,为了算法的鲁棒性,我们往往希望我们提取到的特征具有噪声不变性、尺度不变性、旋转不变性、光照不变性。我们知道,HOG特征具有噪声不变性、光照不变性,却不具有尺度不变性和旋转不变性,存在一定局限性。于是有了HOG特征的改进版本——SIFT特征。SIFT全称是Scale Invariant Feature Transform。


SIFT简介


        与HOG在整幅图像上均匀地提取梯度方向统计特征不同,SIFT特征提取分为在图片上寻找关键点和提取关键点邻域信息两部分,在提取特征时只关注稳定的关键点及其附近的信息,使得特征更加具有描述性。

   SIFT的亮点就是标红的几个步骤,如图0所示:

                                                                                                                                图0    关键步骤



本文内容组织如下:

(一)关键点提取

         1. 关键点提取方法

         2. 尺度-空间最大判断

         3. 关键点筛选       

(二)关键点特征提取

        1. 梯度直方图统计

        2.  主方向对齐

        3.  SIFT图像局部特征描述子


     

(一)关键点提取


1. 关键点提取方法


        在寻找一幅图像上我们感兴趣的点的时候,我们想要寻找图像上的”稳定点“,这些点是一些十分突出的点不会因光照条件的改变而消失,比如角点、边缘点、暗区域的亮点以及亮区域的暗点,我们统称为斑点(Blob)。

                                      

                              图1   斑点                                                                  图2    LoG算子                                                图3     Gaussian、Gradient of Gaussian、Laplacian of Gaussian


        我们知道当图像窗口和模板结构一样时,卷积响应就会最大。斑点通常就是图1所示的结构,如果我们想要寻找这种结构,那么当然最好的方法就是找一个类似于这个结构的模板来对原图卷积》。图2是LoG算子,是不是和图1的斑点很像?所以我们用LoG算子对图像滤波,局部最大值所在的点,就是我们想要的斑点。


2 .尺度-空间最大判断


        前面我们提到过进行特征提取时,我们往往希望特征具有尺度不变性。图5和图6是不同尺度的同一图像,黑色曲线表示一维数据上的灰度值变化,每个圆圈表示不用尺度的LoG算子。


            图4    想要提取的关键点                                                                       图5      用模板检测大尺度斑点                                                                     图6       用模板检测小尺度斑点


       图5用的模板检测Blob应该是大小最合适的, 如果我们仅使用同一个尺度的模板来检测Blob,当目标尺度如图6中变大的时候,同样尺度的LoG模板已经无法检测到Blob,此时要将模板缩小为红色圆圈大小,才能最好地检测到与图5中对应的Blob。于是,我们要引入不同尺度的LoG模板对原图进行卷积,并选择在spatial和scale上都有局部最大响应的像素为关键点。

        通过引入不同尺度的LoG算子解决了尺度问题,但是多次LoG的计算量是很大的。为了简化计算,采用DoG模板来代替LoG算子,如图7所示:



图7 DoG v.s. LoG


        于是我们可以先对原图用不用 σ 的高斯滤波,再对相邻的 σ 得到的图像作差,得到的就是DoG算子操作的结果,如图8所示,由此构建一个尺度-空间模型,再对图8得到的蓝色map上的每个像素进行判断,如果该像素在尺度和空间上都是最大的,那么我们将这个像素的三维坐标保存下来,列入关键点候选名单;否则不对该点做关注,如图9所示。


        

图8 DoG                                                                                 图9scale-spatial maxima check

        通过最大值检验的点就是我们的关键点候选,如图10所示:



图10 检测到的关键点



3. 关键点筛选


        上一步得到的关键点过多,其中很多都不是我们关心的Blob,需要去除这些对比度较低的点位于边缘上的点


1)关键点定位


        对于我们检测到的关键点,首先要把它们回归到真正的局部最大点。用二次函数(平面)来拟合其scale-spatial三维邻域,表示出其邻域内真正的极值点处的函数这里我没有认真听,细节还不是很懂,先把公式贴出来,如图11所示:



图11 插值求极值点



2)低对比度点

        判断然后判断这个极值点的两个特征值的乘积是否足够大,够大则保留,不够则剔除。


3)位于边缘上的点


          由于边缘有概率会退化地过细且不连续,退化后就会被检测为Blob,可见这些点是不稳定的,因此我们不关注边缘上的点,只关注角点。此处用到了Harris角点检测,大概是计算该处的Hessian矩阵,计算Hessian矩阵的两个特征值,只有当两个特征值都足够大时,才算作角点,图12中给出了一个评判阈值,我还理解的不是很清楚,有机会再继续补这里:



图12        Harris角点检测


        经过上面这几步操作,就可以得到精确地关键点了,如图13所示,是不是质量高了很多!



图13    精确关键点




(二)关键点特征提取


1.  梯度直方图统计


          这一步和HoG完全一样,如图14。


图14   统计梯度方向直方图


2.  主方向对齐


         我们以梯度方向为区间统计方向直方图带来了一个问题:特征受图像旋转影响较大。一个很直观的解决方法就是:选择占比重最大的方向为主方向,所有梯度与主方向进行对齐。如图15所示:


图15   主方向对齐


              对于有多个方向的,我们可以找多个主方向,统计多个直方图作为特征,如图16:


图16   辅方向

这时我们将直方图首尾连接就得到了SIFT特征



3.  SIFT图像局部特征描述子

         为了减小光照影响,对特征进行归一化,还没有讲完,未完待续。。。

        2.  SIFT图像局部特征描述子
0 0
原创粉丝点击