使用openCV for android时找不到正确的FAST-SURF匹配项

时间:2012-03-27 12:14:10

标签: android opencv sift surf knn

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

1 个答案:

答案 0 :(得分:3)

我认为问题是你正在使用的匹配器。对于基于浮点数的(SURF)描述符,使用FLANN作为匹配器或使用BRUTEFORCE作为匹配器。同时努力使用相同的特征描述符进行提取和匹配...即SURF关键点上的SURF特征。

在stackoverflow上阅读这篇文章,并在其中链接文章以便更好地理解。 How Does OpenCV ORB Feature Detector Work?