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



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

  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. 是在surffaturedetector中发现的特征,只是共同点还是点的面积?

* * * * 添加 * * * *

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

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

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

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

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

看看detectAndCompute()函数:

  • surf.hpp。
  • surf.cpp

Harris角点检测有点不同,它的API也是如此:

  • corner.cpp

相关内容

  • 没有找到相关文章

最新更新