SIFT算法详解

前一阵子把SIFT算法再仔细研究了一下,然后把里面的重点难点都查了查,自认为已经吃的比较透了。

下面把自己认为比较难以理解的地方列出来给大家,如果有错误,欢迎指正。

1、首先说尺度,我认为一个物体,只有在合适的尺度的观察下才有意义。比如一个苹果,放大看就是一个分子,缩小了看就是一个小点。这个的尺度可以单纯的理解为尺寸大小。如果目标是一个不明物体,为了能以很好的观察到它,一个简单的方法是观察它在不同尺度下的形态,选择最合适的那个尺度。由于尺度极其重要,计算机视觉的专家们决定模仿上述,对一张图片进行处理,生成一个受单个参数(尺度)影响的集合。随着尺度越来越大,图片的具体细节越来越少。而高斯卷积核被认为是唯一的线性核,随着σ越大,图片就越模糊(这里的知识点还一直吃不透)。而SIFT由于采用了降采样生成金字塔结构,我觉得SIFT中的尺度可以分为相对尺度和绝对尺度。相对尺度即每一组之间的尺度,属于同一分辨率下比较。而绝对尺度则由σ和图片分辨率共同决定。具体后面还会提到。

2、再从频谱的角度来看SIFT所构建的高斯金字塔。高斯滤波属于低通滤波器。如果把一张图片看成是无限带宽的话,先对它进行σ=σ0的滤波,把生成的图片(即高斯金字塔的第一个octave第一层)的最高频率定为w0,当对它进行σ=σ1的滤波,把生成的图片(即高斯金字塔的第一个octave第二层)的最高频率定为w1,以此类推。这时,相邻的两层之间的差值,即DOG表示的就是频率处于(w0,w1)之间的分量。所以每一层DOG(等效为带通滤波器的输出),是有其独特性的,故而产生的极值点具有尺度不变性。见下图(画的有点糙)

SIFT算法详解

3、有很多人在学SIFT的时候,总是会苦恼为什么要降采样,我当时也很困惑,明明一直滤波下去就可以了。于是,在啃了一系列图像的金字塔表示的论文后,得出的结论是,单纯的为了减小计算量。不过SIFT的金字塔设计地很巧妙。

  • 由于我们采用高斯滤波的时候,用的是6σ+1* 6σ+1的模板去滤的。所以σ的大小决定了模板的大小;

  • 而高斯滤波最本质的就是把该点的像素值用周围领域里的所有值加权求和来替换

所以,对于一张大图用的高斯函数去滤波,所涉及的邻域(或者说占图像总面积的份额)和对一张1/4小图用σ的高斯函数去滤波,所涉及的领域范围相同的,也就是说所产生的平滑效果是一样的。sift金字塔每次在2σ0的时候进行降采样,对于大图来讲,他的尺度还是2σ0,而对于小图来讲他的尺度回到了σ0,也就是我可以继续用之前的小模板来产生对于大图来讲的大尺度(2σ0)。这样的结构,既保证了尺度的连续性,又大大减小了计算量。

4、关键点定位的时候为什么要用Hessian矩阵?

首先为什么要去除边界点,照理说即使在边界上,我这个点也是极值点啊?理由是用来检测极值点的模板太小了,就是一个3*3,而DOG算子有特别强的边界效益,由此生成的极值点并不是真正意义上的角点。而且这些点的邻域大致相似,产生的描述子也相似,故而就不存在独特性了。

再来看为什么要用Hessian矩阵的特征值来去除。首先来看方向导数,一阶方向导数表征的是某个方向上一阶导数的大小,梯度方向一阶方向导数最大。那二阶方向导数表征的就是某个方向上二阶导数的大小。推到得到:

SIFT算法详解

这时,令SIFT算法详解二阶方向导数就可以表示成SIFT算法详解,这里的μ = <h,k>。这个式子对于学过矩阵论的应该不陌生吧。如果μ是H的特征向量,那么二阶方向导数的值就是H的特征值。并且H有两个特征值,随着μ的不同,方向导数的所有取值在H的两个特征值之间变化(这部分不明白的同学可以去知乎查查矩阵的特征值的具体含义)。而二阶导正好是和曲率正相关的,所以再经过论文里面步骤就能判断出改特征点是否是边界点。

5、描述子的生成。其实这部分处理没有很好的理论支撑,单纯的就想通过对关键点邻域信息的描述,使得这个关键点‘与众不同’。觉得原论文步骤繁琐,难以理解的同学,不妨试试自己定义邻域信息。只要信息量足够,也能有很好的效果。

好了,就先说这么多吧。如果还有问题可以看我做的PPT点击打开链接

,或者联系我:[email protected]