4

让我们看一下这个名为 Features2D + Homography 的基本教程,以查找已知对象。它使用 SurfFeatureDetector 来检测特征:

  SurfFeatureDetector detector( minHessian );
  std::vector<KeyPoint> keypoints_object, keypoints_scene;
  detector.detect( img_object, keypoints_object );
  detector.detect( img_scene, keypoints_scene );

然后它使用SurfDescriptorExtractor检测到的特征来计算描述符(特征向量)。

我的问题是:

  1. 如果我想创建自己的特征检测器(例如使用 Trajkovic 或 Harris 算法),我应该使用哪个描述符提取器?
  2. 在 SurfFeatureDetector 中发现的特征是公共点还是点的区域?

****补充* ***

1)在这个例子中,使用了特征检测的 Surf 算法。我制作了自己的算法(Trajkovic),效果很好——找到了所有的角落(图像特征)。然后我尝试使用示例中使用的 SurfDescriptorExtractor。问题是 SurfDescriptorExtractor 不想以正确的方式使用我建立的点(结果图片出现错误的连接,这意味着提取器没有正确计算向量)。

2)我需要完全使用opencv,这就是重点;

3)“特征检测器”是一种算法,它试图在图像上找到关键点(特征或角),“描述符提取器” - 是一种算法,它计算特征向量以最好地理解关键点的位置和方向;

4) 总之,在示例中,所有关键点都连接在两个图像上(如教程的最后一张图片所示),然后用矩形突出显示。但是当我使用 Trajkovic 算法时,它们以错误的方式连接,这就是为什么没有突出显示的矩形。

4

1 回答 1

0

虽然我们无法在不查看您的实现的情况下确定问题,甚至可能进行一些调查,但我可以为您指出解决方案的方向:OpenCV 源代码,您可以与他们的实现进行比较。

看看detectAndCompute()函数:

Harris 角点检测的工作方式略有不同,它的 API 也是如此:

于 2018-11-16T06:30:12.543 回答