0

有人会分享他们关于 OpenCV 特征检测和基准标记提取的知识吗?

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

在此处输入图像描述

使用 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 );
4

1 回答 1

1

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

  1. 您可以在 samples/cpp/tutorial_code/features2D/AKAZE_tracking 中找到 orb 的使用示例,或在此处输入链接描述
  2. 或者有一个 python 项目可以完成与您的基准类似的任务
于 2015-02-02T06:42:47.927 回答