如何在opencv中制作自己的特征检测方法?

时间:2013-01-14 16:30:38

标签: c++ opencv feature-detection keypoint

让我们看一下名为Features2D + Homography的this基本教程,找到一个已知对象。它使用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算法),我应该使用Descriptor Extractor吗?
  2. 是SurfFeatureDetector中的功能,只是公共点或点的区域?
  3. **** 除了 * ***

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

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

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

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

1 个答案:

答案 0 :(得分:0)

虽然我们不看您的实现就无法查明问题,甚至可能进行一些调查,但我可以为您指明解决方案的方向:OpenCV源代码,您可以将其与实现进行比较。

看看detectAndCompute()函数:

Harris拐角检测的工作原理有所不同,其API也是如此: