尺度空间与高斯差分算子DoG

      在上一篇中我讲述了图像金字塔(高斯金字塔和拉普拉斯金字塔)。这了篇中介绍在SIFT检测中用到的DoG高斯差分算子。
     此处的高斯金字塔的形成过程上前文的高斯金字塔稍有不同。
 
     在SIFT关键角点检测中,在不同的尺度空间不能使用相同的窗口检测SIFT极值点。对小的角点要用小的窗口,对大的角点只能使用大的窗口。为了达 到这个目的我们要使用尺度空间滤波器。
 
尺度空间滤波器:尺度空间滤波器可以使用一些列具有 不同方差 σ 的高斯卷积核构成。使用具有不同方差值 σ 的高斯拉普拉斯算子 (LoG)对图像进行卷积,LoG 由于具有不同的方差值 σ 所以可以用来检测不 同大小的斑点(当 LoG 的方差 σ 与斑点直径相等时能够使斑点完全平滑。
 
     简 单来说,方差 σ 就是一个尺度变换因子。例如,使用一个小方差 σ 的高斯 卷积核是可以很好的检测出小的角点,而使用大方差 σ 的高斯卷积核时可以很 好的检测出大的角点。所以我们可以在尺度空间和二维平面中检测到局部最大 值,如(xyσ, 这表示在 σ 尺度中(xy)点可能是一个关键点。

  高斯金字塔的详细构建过程

 

1) 先将原图像扩大一倍之后作为高斯金字塔的第1组第1层,将第1组第1层图像经高斯卷积(其实就是高斯平滑或称高斯滤波)之后作为第1组金字塔的第2层,高斯卷积函数为:

尺度空间与高斯差分算子DoG

对于参数σ,在Sift算子中取的是固定值1.6。

2)将σ乘以一个比例系数k,等到一个新的平滑因子σ=k*σ,用它来平滑第1组第2层图像,结果图像作为第3层。

3) 如此这般重复,最后得到L层图像,在同一组中,每一层图像的尺寸都是一样的,只是平滑系数不一样。它们对应的平滑系数分别为:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。

4) 将第1组倒数第三层图像作比例因子为2的降采样(如只取奇数行或奇数列),得到的图像作为第2组的第1层,然后对第2组的第1层图像做平滑因子为σ的高斯平滑,得到第2组的第2层,就像步骤2中一样,如此得到第2组的L层图像,同组内它们的尺寸是一样的,对应的平滑系数分别为:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。但是在尺寸方面第2组是第1组图像的一半。

这样反复执行,就可以得到一共O组,每组L层,共计O*L个图像,这些图像一起就构成了高斯金字塔。

尺度空间与高斯差分算子DoG

注:高斯方差σ的大小与窗口的大小存在一个倍数关系:窗口大小等于 6 倍方差加 1,所以方差的大小也决定了窗口大小。

       LoG 的计算量非常大,所以 SIFT 算法使用高斯差分算子(DoG)来对 LoG 做近似。DoG 就是这组具有不同分辨率的图像金字塔中相邻的两层之间的差值。
 
附1:LoG算子
尺度空间与高斯差分算子DoG
附1:DoG算子
  尺度空间与高斯差分算子DoG
——————————————————————————————————————————————
 
   在 DoG 搞定之后,就可以在不同的尺度空间和 2D 平面中搜索局部最大 值了。对于图像中的一个像素点而言,它需要与自己周围的 8 邻域,以及尺度 空间中上下两层中的相邻的 18(2x9)个点相比(共27个点相比)。如果是局部最大值,它就可能是一个关键点。基本上来说关键点是图像在相应尺度空间中的最好代表。如 下图所示:
 
 
尺度空间与高斯差分算子DoG
 
           在同一组中,每一层图像的尺寸都是一样的,只是平滑系数不一样。它们对应的平滑系数分别为:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。
        SIFT算法的作者在文章中给出了 SIFT 参数的经验值:octaves=4(通过降低采样从而减小图像尺寸,构成尺寸减小的图像金字塔4 层),尺度空间 为 5,也就是每个尺寸使用 5 个不同方差的高斯核进行卷积,初始方差是 1.6, k 等于 2 等。