SIFT算法中,在DoG空间找到极值点后,需要对极值点进行修正,本文主要详细的讲解一下为什么需要修正,以及如何对极值点进行修正。

  下图演示了二维函数离散空间得到的极值点与连续空间的极值点之间的差别

      SIFT算法中DoG特征点的修正-LMLPHP 

  利用已知的离散空间点插值得到连续空间极值点的方法叫做子像元插值。

  首先来看一个一维函数插值的例子(如图):

      SIFT算法中DoG特征点的修正-LMLPHP

  这个图中,我们清晰的看到,离散空间的极值点和连续空间的极值点并不是同一个点

  我们对函数f(x)使用泰勒级数,将其展开为:

      SIFT算法中DoG特征点的修正-LMLPHP

  注:此处说一下离散空间的一阶导和二阶导的求法:

      SIFT算法中DoG特征点的修正-LMLPHP

  然后对f(x)求导,可以求得连续函数f(x)真正的极大值和极大值的坐标:

      SIFT算法中DoG特征点的修正-LMLPHP

  对于二维函数,其泰勒展开为:

      SIFT算法中DoG特征点的修正-LMLPHP

  若将SIFT算法中DoG特征点的修正-LMLPHP表示成向量SIFT算法中DoG特征点的修正-LMLPHP,其向量形式为:

      SIFT算法中DoG特征点的修正-LMLPHP

  注意,此处的两个导数,都是原函数在x=[0,0]'这个点的一阶导和二阶导的值

  对上式求导,以便求取极值点,求导结果如下(此处不会求导的,可以查一查矩阵求导这块的知识):

      SIFT算法中DoG特征点的修正-LMLPHP

  此处一阶导、二阶导和前面一样,可以求得真正的极值点为:

      SIFT算法中DoG特征点的修正-LMLPHP

  极值点的极值为:

      SIFT算法中DoG特征点的修正-LMLPHP

  此处的D即是在0点的函数值。

  若SIFT算法中DoG特征点的修正-LMLPHP在任何方向上的偏移大于0.5时,意味着插值中心点已经偏移到它的临近点上,所以这样的点需要删除。另外,当SIFT算法中DoG特征点的修正-LMLPHP(图像的灰度值在0~1之间),其响应值过小,这样的点易受噪声的干扰而变得不稳定,所以也要被删除。

05-11 22:27