SIFT

       一个好的特征描述子,要有好的区分性、尺度和旋转不变性以及鲁棒性(光照等)。SIFT可能说是最经典的

特征描述方法了,其主要分成下面四步:

     (1)尺度空间选择:在尺度空间中选择潜在的满足尺度不变和旋转不变的关键点;

            关于尺度空间,先对图像做高斯金字塔(包括高斯模糊和降维),再做拉普拉斯金字塔(需要做内插才能做差)。

            更多可以参考:http://www.cnblogs.com/ronny/p/3886013.html

            具体到SIFT,将不同尺度空间分成不同的Octave(高斯金字塔的组数),对于每个Octave,采用不同的标准差,即

   每个Octave不同的层数(S)。同一个Octave中,相邻图像的差即为DoG,即对应的尺度空间。

     (2)关键点定位:精确定位特征点的位置,剔除伪特征点;

            由不同的尺度空间,我们可以选出所有的局部极值点,这其有有很多极值点,且不一定为关键点,因为需要剔除。

            主要分为两步:

             1)粗剔除:剔除响应值低的关键点。通过将DoG进行泰勒展开、求导,可以得到关键点的

     精确位置与尺度,剔除响应值低的点;

             2)进一步剔除:DoG在边缘具有较强的响应值,而这些点通常是难定位、不稳定的,因此需要删除边缘效应。

     (3)方向分配:基于关键点的局部梯度方向,给每个关键点分配方向;

            选取关键点周围16*16的窗口,统计这256个像素的梯度按方向统计到36个bin的直方图中(加权的,权值为梯度大小)。

         选取直方图中的峰值作为这个关键点的方向(旋转不变)。

     (4)关键点描述:对于每个关键点,用一个高维的向量去描述每个关键点。

            采用梯度方向直方图来对其进行描述。将16*16的窗口分成16个4*4的小窗口,统计每个小窗口的梯度(8个bin),

    最后得到的描述子向量为16*8=128维。

      参考:http://blog.csdn.net/a130737/article/details/37564463?utm_source=tuicool&utm_medium=referral

      更具体的,可参考如下博文:

      参考:http://www.cnblogs.com/ronny/p/4028776.html    

      博文同样是分为几个点:

      构建高斯差分金字塔:在这个点中,尺度空间生成了多少图像,为什么是倒数第三张解释的很清楚。

                                     这部分代码可参考这位博主:http://blog.csdn.net/xiaowei_cqu/article/details/8067881

                                      

      特征点搜索:在这个点中,清楚的解释了子像元插值,也就知道了为什么以及如何进行精确点的定位。最后介绍了边缘效应的方法。

                         这部分的源码可看这里,很惭愧,没看下去:http://blog.csdn.net/xiaowei_cqu/article/details/8087239

      方向赋值:为关键点赋值,包括位置、方向和尺度信息。源码分析:http://blog.csdn.net/xiaowei_cqu/article/details/8096072 

      关键点描述:http://blog.csdn.net/xiaowei_cqu/article/details/8113565

      

      

原文地址:https://www.cnblogs.com/573177885qq/p/4732856.html