【问题标题】:OpenCV - Extracting SIFT/SURF descriptor from pre-cropped patchesOpenCV - 从预先裁剪的补丁中提取 SIFT/SURF 描述符
【发布时间】:2014-09-12 15:36:49
【问题描述】:

我有一组 100K 64x64 灰色补丁(已经对齐,这意味着它们都具有相同的方向),我想使用 OpenCV 从每个灰色补丁中提取一个 SIFT 描述符。

我很清楚,我需要做的就是定义一个具有一个关键点 kp 的向量,使得:kp.x=32, kp.y=32。

但是,我不知道如何设置 kp.size 参数。通过查看 SIFT 的代码,它看起来像是在使用该参数进行一些重要的计算,而不是仅仅假设它是补丁的大小。

问题一:从大小为 64x64 的块中提取 SIFT 描述符时,kp.size 参数应该是什么?

问题 2:从大小为 64x64 的块中提取 SURF 描述符时,kp.size 参数应该是什么?

【问题讨论】:

  • 看看 1. 原始 SIFT/SURF 论文如何将特征尺度和描述符大小联系起来。 2. openCV 代码它们是否使用相同的计算。或者您可以修改 openCV SIFT/SURF 代码以打印比例和描述符大小并测试一些值;)

标签: opencv sift surf


【解决方案1】:

如果您查看 sift 原始出版物,关键点的比例用于加权梯度幅度和方向的直方图(第 6 段。局部图像描述符)。因此,在您的情况下,由于灰色斑块是对齐的,因此由您决定是否要对距斑块中心更远的像素的贡献进行加权,并选择比例(即高斯加权窗口的) 相应地。

对于 SURF,它的原理基本相同,只是使用对 haar 小波的响应而不是梯度幅度,但您仍然可以使用高斯窗口对这些响应进行加权。

另外,由于您正在使用这些对齐的补丁,我建议您不要使用 OpenCV 的高级功能,而是简单地使用/重新编码描述符提取部分,并应用您想要计算补丁的任何权重表示。这样做的一个原因是,在 SIFT 示例中,SIFT 描述符的计算可能会“添加新的关键点”到您提供的那个,如果算法对关键点方向“不满意”,它会同时复制关键点位置,但方向不同。

【讨论】:

    【解决方案2】:

    好的。所以 SIFT 描述符通常使用 4x4 网格的邻域,每个网格通常是 4x4 像素。因此,以像素为单位的邻域通常为 16x16。比例/大小是确定关键点的下采样/模糊/半径量的参数。所以我认为在你的情况下,这将是 4

    您可能还知道 SIFT 关键点也适用于亚像素层。 (32,32) 不会是图像补丁的确切中心,如果您的图像尺寸 (x,y) 从 1 开始,它实际上是 (32.5, 32.5)。如果它们从 0 开始,它将是 (31.5, 31.5)- 与 opencv 一样。

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2012-10-07
      • 2012-04-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2014-05-07
      相关资源
      最近更新 更多