带有FREAK提取器的Bruteforcematcher提供零匹配

时间:2015-08-09 04:17:25

标签: opencv image-processing computer-vision surf freak

大家好,希望你做得好。我正在实现一个系统,可以在opencv 2.4.8中检测给定图像帧中的对象。目前我正在处理FREAK算法,因为它是免费的。正如在教程和opencv文档中提到的,我创建了fastfeaturedetector和FREAK类的对象

FastFeatureDetector detector(30);
FREAK extractor;
从这里开始

代码与opencv示例http://docs.opencv.org/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html最相似 而不是FLANN,我使用了Bruteforce

BruteForceMatcher<Hamming> matcher;

对于对象和实时图像帧我找到关键点和描述符

detector.detect(frame,keypoints_frame);
descriptors_frame.convertTo(descriptors_frame,CV_32F);
extractor.compute(frame, keypoints_frame, descriptors_frame);

然后我使用“匹配”匹配描述符 -

matcher.match( descriptors_object, descriptors_frame, matches);

当我检查匹配的大小(定义为std :: vector&lt; DMatch&gt;匹配;)对于具有对象(要检测的对象)的图像帧,它是零。因此我无法执行查找。 (但代码可以找到匹配) 但是当我运行drawmatches时,它会在给定帧上绘制检测到的对象上的点。当我使用冲浪运行相同的算法时,BRISK会给出匹配大小> 0,然后我可以用它执行查找单应性并继续。

你能否告诉我为什么我的FREAK零比赛? 我该怎么做才能避免这种情况并执行查找单应性? 该代码适用于surf和BRISK(但它们也会给出错误的结果,但我可以处理它们) 在此先感谢!!

注意: - 我认为我的问题更清楚了。请告诉我,我会根据您的需要进行编辑。

0 个答案:

没有答案