我已经阅读了关于SIFT算法herehere的两个参考资料,我并没有真正理解如何检测一些关键点,因为该算法适用于在几种分辨率上计算的高斯差异(它们称为八度) . 以下是根据我从论文中理解的技术的步骤 .

_999_给定输入图像,使用不同的sigma使用高斯滤波器对其进行模糊,从而生成高斯滤波图像 . 在论文中,他们使用每个八度音阶的5个高斯滤波器(他们告诉我们使用sigma和k * sigma高斯滤波器参数对两个相邻的高斯滤波图像进行滤波),并且他们在算法中考虑4个八度音阶 . 因此,总共有20个高斯滤波图像(每个八度音阶5个),但我们将分别对每个八度音阶的5个高斯滤波图像进行处理 .

  • 对于每个八度音阶,我们通过仅减去相邻的高斯滤波图像来计算来自5个高斯滤波图像的4个高斯图像差异(DOG) . 因此,现在我们总共有16个高斯图像的差异,但我们将分别考虑来自每个八度音阶的4个高斯图像的差异 .

  • 通过将每个DOG中的像素与26个相邻像素进行比较来查找局部极值(最大值或最小值)像素 . 其中,8个像素与像素的比例相同(在3x3窗口中),9个在上述比例的3x3窗口中(来自相同八度音阶的高斯图像的差异),在规模的3x3窗口中有9个其他像素下面 .

  • 一旦在不同的八度音阶中找到这些局部极值,我们必须对它们进行细化,消除低对比度点或弱边缘点 . 他们使用泰勒展开函数中的阈值和在Hessian矩阵中计算的特征值比阈值来过滤不良候选者 .

  • (this part I don't understand perfectly) :对于幸存下来的每个兴趣点(我相信每个八度音阶),他们会考虑周围的邻域并计算该区域中每个像素的梯度大小和方向 . 他们构建了一个覆盖360度的梯度方向直方图,并选择了最高峰,也选择了高于最高峰的80%的峰 . 他们定义关键点的方向是用抛物线(拟合函数?)定义到最接近每个峰值的3个直方图值,以插入峰值位置(我真的不完全理解这部分) .

What I am not understanding

1-在我们处理多个八度音阶(图像分辨率)时,教程甚至原始论文都不清楚如何检测单个关键点 . 例如,假设我在第一个八度音阶中检测到1000个关键点,在第二个八度音阶中检测到500个,在第三个八度音阶中检测到250个,在第四个八度音阶中检测到125个关键点 . SIFT算法将返回关于关键点的以下数据:1-(x,y)坐标2-比例(这是什么?)3方向和4-特征向量(我很容易理解它是如何构建的) . 还有来自Opencv的Python函数可以使用原始图像(因此,第一个八度音阶)绘制这些关键点,但是如果在不同的八度音程中检测到关键点,那么算法如何考虑具有不同分辨率的DOG图像?

2-我不太了解算法的第5部分 . 它对于定义关键点的方向是否有用,对吧?有人可以用其他的话向我解释,也许我能理解吗?

3-要查找每个八度音程的局部极值(步骤3),他们不会解释如何在第一个和最后一个DOG图像中执行此操作 . 当我们考虑4个DOG图像时,可以仅在第二个和第三个DOG图像中进行此操作 .

4-作者写的另一件事完全搞砸了我对这种方法的理解:

图1:对于每个刻度空间的八度音程,初始图像与高斯重复卷积以产生左侧所示的一组刻度空间图像 . 减去相邻的高斯图像以在右侧产生高斯差分图像 . 在每个八度音阶之后,高斯图像被下采样2倍,并且重复该过程 .

什么?他只对一个高斯图像进行下采样吗?如何通过这样做重复这个过程?我的意思是,高斯的差异最初是通过不同地过滤INPUT IMAGE来完成的 . 所以,我认为输入图像,而不是高斯图像必须重新采样 . 或者作者忘记写下来自给定八度音阶的高斯图像被下采样并且该过程重复另一个八度音阶?