для своей магистерской диссертации я провожу тест на алгоритмах 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));