【问题标题】:SIFT feature matching through Euclidean distance通过欧几里得距离进行 SIFT 特征匹配
【发布时间】:2011-07-30 17:30:55
【问题描述】:

SIFT 特征匹配是通过基于欧几里得距离的最近邻方法完成的。有人可以解释一下吗?有计算吗?如果那么有人可以帮我计算我的 SIFT 特征向量的欧几里得距离吗?我想保存计算出的欧几里得距离,以便为神经网络提供更多特征,如图像的圆度和颜色。

【问题讨论】:

  • 我不清楚您是否需要帮助理解 SIFT 算法,或者结果的某些特定用法。
  • @belisarius 不是 SIFT 算法。我需要使用结果。我的问题是这个特征向量是一个 其中 n 是特征描述符的数量。我需要这个向量中的一个值。我可以使用欧几里得距离来获取该向量的距离并获得最大距离值吗?因为我为神经网络提供的其他特征只有一个值。
  • 对不起,我不明白你的问题。也许这可以帮助你vlfeat.org/api/sift_8h.html#sift-tech-descriptor

标签: matlab sift euclidean-distance


【解决方案1】:

通过欧几里得距离进行SIFT特征匹配并不是一件难事。该过程可以解释如下:

  1. 提取两个图像的 SIFT 关键点描述符。

  2. 从一张图像中获取一个关键点描述符(参考描述符)。

    2.1 现在,求参考描述符与另一张图像的所有关键点描述符之间的欧几里得距离。

    2.2 因此,您有从参考描述符到 image2 中所有关键点描述符的欧几里得距离。按升序排列。(表示image1中的关键点到image2中的关键点的最近距离)

    2.3 现在,设置一些阈值 T(主要在 0.3 到 0.7 的范围内)。

    2.4 取第一个最近距离与第二个最近距离的比率,如果它低于阈值 T,那么它是匹配的,因此,您保存该索引。否则,不匹配。

  3. 对 image1 中的所有关键点描述符重复此操作。

  4. 现在你有了火柴。您可以通过附加两个图像然后基于关键点位置来绘制匹配。

【讨论】:

    【解决方案2】:

    我认为你的疑问是欧几里得距离是什么。欧几里得距离是在欧几里得(或二维)平面中看到的两点之间的距离。 它在二维平面上非常直观,但是由于 SIFT 描述符是 128 维的向量,所以它变得很棘手。你只需要坚持公式 (https://en.wikipedia.org/wiki/Euclidean_distance)

    这是我计算欧式距离的代码:

      for j = 1 : length(SIFT2)
    
            euclideanDist(j) = sqrt(sum((SIFT1{i} - SIFT2{j}).^2));
    
      end
    

    代码将查找从第一张图像上的点“i”到第二张图像中所有遇到的点的距离,在本例中为“j”。我将此距离存储在向量 euclideanDist 中。

    单元阵列 SIFT1 和 SIFT2 包含每个图像的描述符。

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 2012-12-05
      • 2013-03-02
      • 2013-12-08
      • 2021-04-03
      • 2015-07-15
      • 2014-02-04
      相关资源
      最近更新 更多