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

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

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

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

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

  • 1,994 секунд времени вычисления ключевой точки (SURF)

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

  • 0,282 секунды, соответствующее времени (SURF)

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

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

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

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

  • 0.397 секунд, соответствующее времени (SURF)

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

Следующий шаг, однако, не является прогнозируемым результатом. Как возможно, что дескриптор 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)); 

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

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