让我们来看看这个名为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
计算使用检测到的特征的描述符(特征向量)。
我的问题是:
- 如果我想创建我自己的特征检测器(例如与Trajkovic或Harris算法),我应该使用哪个描述符提取器?
- 是在surffaturedetector中发现的特征,只是共同点还是点的面积?
* * * * 添加 * * * *
1)本例中使用Surf算法进行特征检测。我做了我自己的算法(Trajkovic),它工作得很好——所有的角(图像特征)都被找到了。然后我尝试使用SurfDescriptorExtractor,因为它在示例中使用。问题是SurfDescriptorExtractor不想以正确的方式使用我的立足点(结果图片出现错误的连接,这意味着,提取器没有正确计算向量)。
2)我需要使它完全使用opencv,这就是点;
3)"特征检测器"是一种算法,它试图找到图像上的关键点(特征或角),"描述符提取器"-是一种算法,它计算特征向量以最好地理解关键点的位置和方向;
4)总之,在示例中,所有的关键点都连接在两个图像上(正如你可以在教程的最后一张图片中看到的),然后用矩形突出显示。但是当我使用Trajkovic算法时,它们以错误的方式连接,这就是为什么没有突出显示矩形。
如果不查看您的实现,甚至可能进行一些调查,我们无法确定问题所在,但我可以为您指出一个解决方案的方向:OpenCV源代码,您可以与它们的实现进行比较。
看看detectAndCompute()
函数:
- surf.hpp。
- surf.cpp
Harris角点检测有点不同,它的API也是如此:
- corner.cpp