基准标记 - OpenCV - 特征检测&匹配

时间:2015-02-02 04:16:27

标签: c++ opencv computer-vision sift flann

有人会分享他们对OpenCV特征检测和基准标记提取的了解吗?

我正试图在场景中找到一个基准标记(见下图)(使用MS Paint自行创建的ARTag样式)。

enter image description here

使用Harris角点检测,我可以充分定位标记图像的角落。同样,使用Harris角点检测,我可以在场景中找到标记的大部分角落。然后我使用SIFT提取标记图像和场景图像的描述符。然后我尝试了BF和FLANN进行功能匹配。但是,两种匹配算法都会将错误的角点匹配在一起。

我能做些什么来提高准确性吗?或者是否有其他检测方法更适合此应用?

部分代码:

GoodFeaturesToTrackDetector harris_detector(6, 0.15, 10, 3, true);
vector<KeyPoint> keypoints1, keypoints2; 

harris_detector.detect(im1, keypoints1);
harris_detector.detect(im2, keypoints2);

SiftDescriptorExtractor extractor;

Mat descriptors1, descriptors2;

extractor.compute( im1, keypoints1, descriptors1 );
extractor.compute( im2, keypoints2, descriptors2 );

BFMatcher matcher;
//FlannBasedMatcher matcher;
std::vector< DMatch > matches;
matcher.match( descriptors1, descriptors2, matches );

1 个答案:

答案 0 :(得分:1)

您可以尝试使用ORB检测器,它是FAST关键点检测器和Brief描述符的融合。它比Brief描述符更快更好,因为后者不计算方向。

  1. 您可以在samples / cpp / tutorial_code / features2D / AKAZE_tracking或enter link description here
  2. 中找到orb用法的示例
  3. 或者有一个python项目,它执行与您fiducial
  4. 类似的任务