не удается найти правильные совпадения FAST-SURF при использовании openCV для Android - PullRequest
2 голосов
/ 27 марта 2012

Я использую OpenCV для Android для реализации алгоритма обнаружения логотипа.Теперь моя цель - найти предопределенный логотип на снимке, который я сделал с помощью камеры Android.

Я не могу получить ЛЮБЫЕ правильные совпадения ... Я думаю, что это очень странно, учитывая, что я почти только используюФункции библиотеки openCV.

Сначала я определяю ключевые точки с помощью детектора FAST, мои изображения имеют размер 500x500, затем я использую SURF для описания этих ключевых точек.с помощью knn я прошу 2 лучших матча и исключаю тех, у кого отношение А меньше 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 Ответ

3 голосов
/ 24 апреля 2012

Я думаю, что проблема в том, что вы используете.Для плавающих дескрипторов, таких как (SURF), используйте FLANN в качестве сопоставителя или BRUTEFORCE в качестве сопоставителя.Также старайтесь использовать один и тот же дескриптор функции как для извлечения, так и для сопоставления ... т. Е. Функции SURF для ключевых точек SURF.

Прочтите этот пост о stackoverflow и статьях, связанных с ним, для лучшего понимания. Как работает детектор функций OpenCV ORB?

...