Вопрос по android – Описание SURF быстрее с обнаружением FAST?

7

для моей магистерской работы я провожу несколько тестов на алгоритмах SIFT SURF en FAST для обнаружения логотипов на смартфонах.

Когда я просто определяю время обнаружения и описания для некоторых методов, я получаю следующие результаты.

Для детектора SURF и дескриптора SURF:

Найдено 180 ключевых точек

  • 1,994 seconds keypoint calculation time (SURF)

  • 4,516 seconds description time (SURF)

  • 0.282 seconds matching time (SURF)

когда я использую FAST-детектор вместо SURF-детектора

Найдено 319 точек

  • 0.023 seconds keypoint calculation time (FAST)

  • 1.295 seconds description time (SURF)

  • 0.397 seconds matching time (SURF)

Детектор FAST намного быстрее, чем детектор SURF, и даже обнаруживает почти вдвое больше ключевых точек в 100 раз быстрее. Эти результаты предсказуемы.

Следующий шаг, однако, не является прогнозируемым результатом. Как это возможно, что дескриптор de SURF быстрее с 319 FAST ключевыми точками, чем с 180 SURF ключевыми?

Из того, что я знаю, описание не имеет никакого отношения к алгоритму обнаружения ... но эти результаты не такие предсказанные.

Кто-нибудь знает, как это возможно?

вот код:

    FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF);
    //FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST);
    Imgproc.cvtColor(image1, image1, Imgproc.COLOR_RGBA2RGB);
    Imgproc.cvtColor(image2, image2, Imgproc.COLOR_RGBA2RGB);

    DescriptorExtractor SurfExtractor = DescriptorExtractor
    .create(DescriptorExtractor.SURF);


    //extract keypoints
    long time= System.currentTimeMillis();
    detector.detect(image1, keypoints);
    Log.d("LOG!", "number of query Keypoints= " + keypoints.size());
    detector.detect(image2, logoKeypoints);
    Log.d("LOG!", "number of logo Keypoints= " + logoKeypoints.size());
    Log.d("LOG!", "keypoint calculation time elapsed" + (System.currentTimeMillis() -time));

    //Descript keypoints
    long time2 = System.currentTimeMillis();
    Mat descriptors = new Mat();
    Mat logoDescriptors = new Mat();
    Log.d("LOG!", "logo type" + image2.type() + "  intype" + image1.type());
    SurfExtractor.compute(image1, keypoints, descriptors);
    SurfExtractor.compute(image2, logoKeypoints, logoDescriptors);
    Log.d("LOG!", "Description time elapsed" + (System.currentTimeMillis()- time2));
часть моего кода добавлена к вопросу! piepie
не могли бы вы опубликовать часть вашего кода? :) Codeman

Ваш Ответ

1   ответ
7

ельное извлечение патча, имеющего размер (2.8 * keypoint.size x 2.8 * keypoint.size) вокруг каждой ключевой точки.

Итак, вот мое предположение: ключевые точки, найденные детектором FAST, всегда имеют своиsize равно 7, но детектор SURF может найти ключевые точки гораздо большего размера. Итак, 180 "большой" ключевые точки обрабатываются дольше, чем 319 «small».

Error: User Rate Limit Exceeded piepie

Похожие вопросы