Brook_icv《SIFT特征详解》难点的辅助阅读内容

在我学习SIFT时,遇到了我认为整理得最好的一篇文章Brook_icv《SIFT特征详解》。作者文字严谨,阅读略带美感,让人舒服,以致于我改变以前的写作方式,尝试一种新的方式,即以大牛的文章作为学习的主体内容,而对于文章中不懂的内容将梳理后尝试呈现在本文中,以辅助理解。

学友阅读本文,需要先阅读Brook_icv《SIFT特征详解》一文,这篇文章足够优秀,仔细阅读,学友会有大收获。
另,辅助阅读的另一篇文章是SIFT算法详解,集大成之者。

因为我本文大多是个人理解与总结,所以有兴趣的学友,不妨阅读试试。

1 “3.1尺度变化的连续性”节的补充内容

在这一节我明白了尺度变化的连续性,最关心的是DoG(高斯差分空间)中从第0组到最后一组能够进行极值检测的所有的层,任意相邻层之间的尺度比例保持在一个k值。
在这里插入图片描述
2.2节中指出,对于一张图像,我们可以通过公式计算高斯空间的组数O(octave),但没有指出如何确定每一组的层数S,并且在高斯空间和高斯差分空间每组层数发生了变化(相差一),因此S到底指代什么?

我认为S指的是高斯差分空间中能够在极值检测中取得极值的层数,换句话说,排除了高斯差分空间每组的首层与末尾层,虽然两者参与了极值检测,但是只是作为被比较的对象,比较的过程并不是以他们为中心

因此,反推知,高斯差分空间中每组的层数是(S+2),而高斯空间中每组的层数是(S+3)。因此在每一层要准备S+3个尺度[σ,kσ,k2σ,k3σ,k4σ,k5σ][σ,kσ,k^2σ,k^3σ,k^4σ,k^5\sigma],最终取得极值的S个层对应[kσ,k2σ,k3σ][kσ,k^2σ,k^3σ]

2 “4.删除不好的极值点(特征点)”

如果有谁希望在此得到辅助的解释,我想我是办不到的。
因为我理解不了曲线拟合的过程,以及“离散空间找到的极值点不一定是真正意义上的极值点”这样的说法。

不过,我了解到在Harris角点检测中也遇到的问题解决思路:
1. 对于一个二维的图像函数(比如,DoG空间函数和Harris中的自相似函数),如果直接求解,基本解不出来,间接的求其近似值的方式是通过泰勒的一阶展开式或者二阶展开式。在SIFT中就用这种思路来剔除低对比度的特征点,Harris用来简化自相似函数的求解复杂度。参考Harris角点检测数学计算过程
2. 二维函数常常会转化为矩阵的形式来求解,矩阵的现实意义丰富多彩且易懂(二次型的意义是什么?有什么应用? - 马同学的回答 - 知乎 )。比如说,一个简单的二维矩阵意味着图像的拉伸,图像的旋转,而在涉及到矩阵的维度发生增加减少时又表达着图像的投影。一个矩阵可以包含多种运动类型,而通过正交操作和特征值分解,可以实现对拉伸动作和旋转动作的分解,同时矩阵分解后得到的正交矩阵单纯地意味着图像的旋转操作,对角矩阵单纯地意味着图像地拉伸,而对角矩阵中地特征值又是图像问题解决思路的重点。比如在SIFT中两个特征值β1,β2\beta1 ,\beta2的相加的平方(β1,β2)2(\beta1 ,\beta2)^2与两个特征值的乘积(β1β2)(\beta1· \beta2)的比值通过与某个阈值的比较,来判断该边缘响应点是否足够稳定,或者说是否达到我们希望达到的稳定程度。这点与Harris的特征值得用法十分相似,不同点在于Harris中与某个阈值比较的是
β1β2k(β1,β2)2{\beta1 \beta2}-k·{(\beta1 ,\beta2)^2}
而SIFT中是:(β1,β2)2β1β2\frac {(\beta1 ,\beta2)^2} {\beta1 \beta2},是不是十分地类似呢?

3 “5. 求取特征点的主方向”节的补充内容

“高斯差分空间的构造”和“极值点筛选”过程,是为了找到一张图像在不同尺度下都存在的特征点(关键点),实现图像的尺度不变性

不太确切的图
图中的星星视为找到的共同的特征点。

而这节“求取特征点的主方向”是为了实现图像的旋转不变性。

方式是:利用特征点邻域像素的梯度分布特性来确定其方向参数,再利用图像的梯度直方图求取关键点局部结构的稳定方向。

这里的实现流程是:

  • 确定每个特征点的邻域大小:以特征点为中心、以3*1.5σ为半径的区域。
  • 计算该邻域中各个像素点的(包括中心特征点)的梯度(大小与方向),而梯度的计算,通常是由其所在位置的周围的一个小局部邻居像素的值所决定,且运用算子辅助计算,而这里的梯度计算**似乎得到了简化,只需要每个像素点的右边和下面的邻居点即可得到。**但不管如何,这一步结束会得到每个特征点3σ\sigma邻域内所有像素点的梯度大小与梯度方向。
  • 以每个特征点为基本统计单位,统计每个特征点邻域中所有像素点的梯度方向与大小。统计的规则是,第一步分组,因为梯度方向范围是0-360,所以将360默认分为8份[0-45,45-90,90-135,135-180,180-225,225-270,270-315,315-360]。将处于相同区间的像素点归为一组。第二步组内sum加和,每个组内的像素点的梯度的大小(或称为幅度)进行累加。
    参考
    更加具体的是
    参考2
  • 对统计图像进行多种策略的分析处理,目的只有一个,确定某个特征点其最有可能的主方向。为了达到最可能,因此进行了多种策略的安排
    比如,首先,使用高斯函数对直方图进行平滑以增强特征点近的邻域点对关键点方向的作用,并减少突变的影响。其次,为了得到更精确的方向,通常还可以对离散的梯度直方图进行插值拟合。接着,关键点的方向可以由和主峰值最近的三个柱值通过抛物线插值得到。最后,当存在一个相当于主峰值80%能量的柱值时,则可以将这个方向认为是该特征点辅助方向
  • 最终返回的是每个特征点的三个信息:位置,尺度和方向其实我有 疑问,这个方向是个范围还是近似取了某个具体的角度值!

以下是我的另一个疑问
因为每个特征点会由位置/尺度和方向三个信息组成,因此,假设高斯金字塔一共6组,每组3层,则对于每个特征点,它会存在18个位置、方向和尺度不会完全一致的组合形式。(我没有看过源码,只是凭空猜测。)
不太确切的图

4 “6. 生成特征描述” 节的补充内容

用一张图来表达补充的内容:

  • 每个特征点的SIFT特征向量的形式如何?
  • 在Lowe的实验论文中和实际生产中,一般每个特征点的邻域大小是多少?
    在这里插入图片描述

如有错误,请不吝赐教。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章