我正在使用openCV for android来实现徽标检测算法。我现在的目标是在我用Android相机拍摄的照片中找到预定义的徽标。
我无法获得任何正确的匹配。我认为这很奇怪,因为我几乎只使用openCV库函数。
首先,我使用FAST探测器检测关键点,我的图像尺寸为500x500 之后我使用SURF来描述这些关键点。 与knn我要求2个最佳匹配,并消除那些A比率小于0.6(first.distance / second.distance)的人。
我正在进行大约10场比赛,但是他们都错了,当我抽出每场比赛(100+)时,他们似乎都错了
我看不出我在这里做错了什么,有没有人有同样的问题,或者知道我做错了什么?
FeatureDetector FAST = FeatureDetector.create(FeatureDetector.FAST);
// extract keypoints
FAST.detect(image1, keypoints);
FAST.detect(image2, logoKeypoints);
DescriptorExtractor SurfExtractor = DescriptorExtractor
.create(DescriptorExtractor.SURF);
Mat descriptors = new Mat();
Mat logoDescriptors = new Mat();
SurfExtractor.compute(image1, keypoints, descriptors);
SurfExtractor.compute(image2, logoKeypoints, logoDescriptors);
List<DMatch> matches = new ArrayList<DMatch>();
matches = knn(descriptors, logoDescriptors);
Scalar blue = new Scalar(0, 0, 255);
Scalar red = new Scalar(255, 0, 0);
Features2d.drawMatches(image2, logoKeypoints, image1, keypoints,
matches, rgbout, blue, red);
答案 0 :(得分:3)
我认为问题是你正在使用的匹配器。对于基于浮点数的(SURF)描述符,使用FLANN作为匹配器或使用BRUTEFORCE作为匹配器。同时努力使用相同的特征描述符进行提取和匹配...即SURF关键点上的SURF特征。
在stackoverflow上阅读这篇文章,并在其中链接文章以便更好地理解。 How Does OpenCV ORB Feature Detector Work?