2

我正在使用 openCV for 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);
4

1 回答 1

3

我认为问题出在您使用的匹配器上。对于基于浮点的,例如(SURF)描述符,使用 FLANN 作为匹配器或 BRUTEFORCE 作为匹配器。还要努力使用相同的特征描述符进行提取和匹配……即 SURF 关键点上的 SURF 特征。

阅读 stackoverflow 上的这篇文章,以及其中链接的文章,以便更好地理解。 OpenCV ORB 特征检测器如何工作?

于 2012-04-24T06:53:02.320 回答