2012-05-21 6 views
7

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

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

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

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

  • 1994 секунд Keypoint время вычисления (SURF)

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

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

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

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

  • 0.023 секунды Keypoint время вычисления (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)); 
+0

не могли бы вы высказать некоторые ваши вопросы? :) – Codeman

+0

некоторые из моего кода добавляются к вопросу! – piepie

ответ

7

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

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

+1

Я разработал дескриптор SIFT, но не полностью описал дескриптор SURF в своей диссертации, возможно, если бы я это сделал, я бы это знал. Ваше объяснение кажется очень разумным, и я думаю, что это может быть правильный ответ на мой вопрос! спасибо! – piepie