正如我们在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
然后使用“点”列表进行特征提取并进行匹配。 这该怎么做?如果他们有两种不同的类型? cornerPoints和SURFPoints!
我需要从SURF和Harris生成的两个特征,如下面的输出:
我不知道这种组合是否可行,或者是否想要从两者中获得两种匹配功能。
实际上我想检测这些功能,然后我想从帧中获取这些像素的位置,然后计算X和Y位置之间的差异。
我也不知道如何从SURF&获取功能坐标位置。哈里斯匹配??
答案 0 :(得分:3)
使用detectHarrisFeatures
和detectSURFFeatures
基本上会返回结构,其中每个字段都包含有关图像中检测到的兴趣点的相关信息。为了给出可重现的示例,让我们使用属于图像处理工具箱的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
因此,harrisPoints
和surfPoints
都有一个名为Location
的字段,其中包含所需要素的空间坐标。这将是N x 2
矩阵,其中每行为您提供特征点的位置。第一列是x
或水平坐标,第二列是y
或垂直坐标。原点位于图像的左上角,向下移动时y
坐标为正。
因此,如果要将两个要素点组合在一起,请访问两个对象的Location
字段并将它们连接成一个矩阵:
>> Points = [harrisPoints.Location; surfPoints.Location];
Points
现在应该包含一个矩阵,每行都会为您提供一个特征点。
我想小心一点,Harris角点检测器只是一种兴趣点检测算法。所有给你的是图像中有趣点的位置。 SURF是一个检测和描述框架,您不仅可以获得兴趣点,而且还可以获得对每个兴趣点的良好稳健描述,您可以使用这些兴趣点来执行其他兴趣点之间的匹配。图片。因此,如果你想将Harris和SURF结合在一起,那是不可能的,因为Harris不支持描述兴趣点。
答案 1 :(得分:1)
在匹配之前组合不同探测器返回的点并不是一个好主意。最好分别匹配从不同类型的兴趣点提取的描述符,然后组合匹配的点。否则你会比较苹果和橘子。
以这种方式思考:Harris检测角落,而SURF检测斑点中心。 Harris角和SURF关键点不太可能对应于世界上相同的物理点。因此,分别匹配这些点更有意义。