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

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

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

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

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

  • 1994 секунды времени расчета ключевой точки (SURF)

  • 4516 секунд времени описания (SURF)

  • 0,282 секунды времени сопоставления (SURF)

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

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

  • 0,023 секунды, время расчета ключевой точки (FAST)

  • 1,295 секунды, время описания (SURF)

  • 0,397 секунды, время сопоставления (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));
7
задан piepie 21 May 2012 в 20:06
поделиться