如何在SIFT中使用DoG金字塔

时间:2010-04-24 14:45:13

标签: image-processing pattern-recognition sift

我是图像处理和模式识别的新手。我正在尝试实现SIFT算法,我可以创建DoG金字塔并识别每个八度音程中的局部最大值或最小值。我不明白的是如何在每个八度音程中使用这些局部最大/最小值。我如何结合这些要点?

我的问题可能听起来很微不足道。我读过Lowe的论文,但是在他建造DoG金字塔后他无法理解他的所作所为。 任何帮助表示赞赏。

谢谢

3 个答案:

答案 0 :(得分:4)

基本上,他在构建DoG金字塔后所做的就是检测这些图像中的局部极值。之后,他丢弃了一些检测到的局部极值,因为它们可能不稳定。识别这些不稳定关键点/特征的过程分两步完成:

  1. 拒绝对比度低的点
  2. 拒绝沿边缘定位不佳的点(这意味着它们仅在一个方向上具有强烈的边缘响应)
  3. 为了能够完成这些步骤,首先需要通过泰勒级数展开来获得极值的真实位置。它将为您提供解决这两个步骤的信息。

    最后一步是构建描述符......

    我正在研究这个算法的过程中,我发现它并不是那么容易理解。 Lowe的论文中没有包含一些细节,因此它更难以理解。我还没有找到更多可以更深入解释这个算法的额外资源,但是有一些开源实现,所以你也可以使用它们。

    编辑:更多信息:)

    您链接的纸张是他早期的作品,您应该获得最新版本的纸张,因为有一些修改。寻找更多资源我也读过他的专利,它也包含旧信息,所以你也不应该看那里。

    所以,我对这个尺度空间极值步骤的理解如下。首先,我们需要建立一个高斯金字塔。论文称,对于局部极值完整性,我们需要在每个八度音阶中构建 s + 3 高斯图像。经过一些测试,Lowe得出结论,对于 s = 3 ,他获得了最好的结果。这意味着我们在每个八度音阶中有6个高斯图像,我们从中得到5个DoG图像。请注意,所有这些DoG图像具有相同的分辨率。重新采样仅在传递到下一个八度音程时完成。

    下一步是寻找局部极值。 Lowe建议在26个邻域内进行搜索,这意味着我们应该从第二个图像开始搜索,因为这是第一个存在26个邻域的图像。同样,我们停止搜索第四张图像。对于每个八度音程单独重复该过程。对于发现的每个极值,至少应保存其位置和比例。发现下一步的极值将是更精确的定位,这是用泰勒系列完成的。

    这是我理解这一步是如何运作的,我希望我离真相不太远:)

    希望这会有所帮助。

答案 1 :(得分:1)

vlfeat是一个实现多种计算机视觉算法的开源库,包括SIFT。您应该能够查看该源代码,以便更好地了解正在完成的工作。

如果你在每个八度音阶中正确找到极值,那么你可以:

  1. 执行更详细的拟合 极值的规模和位置
  2. 拒绝低对比度和边缘     反应
  3. 对于此时剩余的每个功能,

    1. 计算窗口大小相对于检测到的要素比例的主导方向
    2. 构建SIFT描述符表示(通过将渐变累积到方向直方图的空间4x4网格中)。这在paper
    3. 的6.1中有所描述

      我不确定这有多少帮助,因为我不知道你在哪里挂了。

答案 2 :(得分:0)

我们有两座金字塔。高斯和DoG金字塔。高斯金字塔有6个模糊图像。 DoG是这些图像的差异,因此DoG中有5个图像。 你与高斯金字塔无关。请注意,所有这些都是在第一个八度音阶!当您创建第一个金字塔时,请调整图像大小并开始为第二个八度音阶构建新的金字塔。

让我们说你的原始图像是512x512。在第一个八度音阶中,所有图像都是512x512但在第二个八度音阶中,所有图像都是256x256。再次,你有6个图像高斯金字塔和5个在DoG金字塔。但是它们在第二个ocave中都是256x256。无需提及第3个八度音阶。

现在匹配最小值和最大值:(你在第一个八度) 让我们说你在第一个八度音阶看最大值。您必须使用DoG金字塔并从第2张图片开始。你取一个像素并计算它是否是最大值。在此计算中,您应该使用DoG金字塔的第1,第2和第3张图像。如果完成,则通过考虑第二,第三和第四图像去找第三图像中的最大值。最后,通过考虑第3,第4和第5张图像,在第4张图像中找到最大值。

现在在第一个ocatave中找到mixama,完成下一个八度音阶并重复这些步骤。