【问题标题】:How to combine SURF and Harris points MATLAB如何结合SURF和Harris点MATLAB
【发布时间】:2015-08-06 21:53:29
【问题描述】:

正如我们在 Matlab 中所知道的,有单独检测 Harris 或 SURF 特征的功能。然后我需要将 Harris 和 SURF 中的这两个特征列表结合起来,以提高匹配效率。

以下是我们知道的默认程序

points_image_Harris =detectHarrisFeatures(image );
[feature_image_Harris, validpoints_image_Harris] = extractFeatures(image,  points_image_Harris ); 
indexPairs_Harris = matchFeatures(feature_template_Harris,feature_image_Harris);

但我想在进行匹配之前合并两个点列表:像这样:

points_image_Harris =detectHarrisFeatures(image );
points_image_SURF =detectSURFFeatures(image );
Points = points_image_Harris  + points_image_SURF 

然后使用点列表进行特征提取和匹配。 这个怎么做?如果它们有两种不同的类型?角点和冲浪点!

我需要从 SURF 和 Harris 生成的两个特征,如下输出:

我不知道这种组合是否可能或任何想法都可以从两者中获得两个匹配的功能。

实际上我想检测这些特征,然后我想从帧中获取这些像素的位置,然后计算 X 和 Y 位置之间的差异。

我也不知道如何从 SURF & Harris 匹配中获取特征坐标位置??

【问题讨论】:

  • 如果你想组合特征点本身的物理位置,那很简单。如果您想将cornerPointsSURFPoints 容器组合在一起,则不能这样做。它们都以完全不同的方式描述特征点,所以如果你想将它们结合起来,你会将不同的东西放在一个容器中。那是不可能的。请更具体地说明您希望如何组合它们。你只想要物理点,还是想要合并描述符?
  • @rayryeng,请你再看看这个问题,我已经编辑过了。
  • 我的理解是你想找到两个方案之间最相似的特征点吗?在这种情况下,您根本不需要合并它们。此外,可以只获取两个框架的功能本身的坐标……但是,这仍然有点令人困惑。一开始你说你想组合特征……在文章的最后,你说你只想提取特征坐标。是哪一个?
  • 对不起,我想重新编辑一下,我想提取两者的特征坐标。
  • 啊 :) 这很简单。请给我一点时间。

标签: matlab image-processing computer-vision feature-extraction matlab-cvst


【解决方案1】:

使用detectHarrisFeaturesdetectSURFFeatures 实质上会返回一个结构,其中每个字段都包含有关在图像中检测到的兴趣点的相关信息。举一个可重现的例子,让我们使用图像处理工具箱中的cameraman.tif 图像。让我们也使用具有默认参数的两个特征检测框架:

>> im = imread('cameraman.tif');
>> harrisPoints = detectHarrisFeatures(im);
>> surfPoints = detectSURFFeatures(im);

当我们显示harrisPoints 时,我们得到的是:

harrisPoints = 

  184x1 cornerPoints array with properties:

    Location: [184x2 single]
      Metric: [184x1 single]
       Count: 184

当我们显示surfPoints 时,我们得到的是:

surfPoints = 

  180x1 SURFPoints array with properties:

              Scale: [180x1 single]
    SignOfLaplacian: [180x1 int8]
        Orientation: [180x1 single]
           Location: [180x2 single]
             Metric: [180x1 single]
              Count: 180

因此,harrisPointssurfPoints 都有一个名为 Location 的字段,其中包含所需要素的空间坐标。这将是一个N x 2 矩阵,其中每一行都为您提供了一个特征点的位置。第一列是x 或水平坐标,第二列是y 或垂直坐标。原点在图像的左上角,向下移动时y坐标为正。

因此,如果您想将两个特征点组合在一起,请访问两个对象的Location 字段并将它们连接在一起形成一个矩阵:

>> Points = [harrisPoints.Location; surfPoints.Location];

Points 现在应该包含一个矩阵,其中每一行都为您提供一个特征点。


我想稍微说明一下,Harris 角点检测器只是一种兴趣点检测算法。提供给您的只是图像中有趣点的位置。 SURF 既是检测又是描述框架,您不仅可以获得兴趣点,还可以获得每个兴趣点的良好健壮描述,可用于在其他兴趣点之间执行匹配图片。因此,如果您想将 Harris 和 SURF 结合在一起,这是不可能的,因为 Harris 不支持描述兴趣点。

【讨论】:

  • 谢谢,但我没有得到 1- 它们匹配功能的方式取决于位置点。 2-描述和哈里斯有什么区别?
  • @Hanaa - 我不确定在 MATLAB 的 CVST 中做了什么哈里斯匹配,但我怀疑他们会查看围绕给定兴趣点的强度补丁并找到补丁之间的距离。对于第二个问题,SURF 使用描述方向和比例的 128-bin 直方图来描述关键点。 Harris 只为您提供要素的空间位置。 SURF 不仅为您提供空间位置,而且还为您提供一个 128-bin 直方图,描述空间位置顶部的每个点。直方图用于匹配特征点。
【解决方案2】:

在匹配之前组合不同检测器返回的点并不是一个好主意。最好分别匹配从不同类型兴趣点提取的描述符,然后将匹配的点组合起来。否则你会比较苹果和橘子。

这样想:Harris 检测角落,而 SURF 检测斑点中心。一个 Harris 角点和一个 SURF 关键点不太可能对应于世界上的同一个物理点。所以将这些点分开匹配更有意义。

【讨论】:

    猜你喜欢
    • 2014-10-09
    • 2013-01-01
    • 2012-10-24
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2015-09-27
    相关资源
    最近更新 更多