Обнаружение SURF-функций - разочаровано производительностью - PullRequest
3 голосов
/ 04 января 2012

Я искал возможности SURF (или что-то подобное) в приложении, которое получает новые изображения со скоростью 25 FPS. Я думал, что извлечение функций будет возможно, по крайней мере, близко к реальному времени. Я попробовал OpenSURF с теми же параметрами, что и в демонстрационном файле, и был очень потрясен, увидев, что при разрешении 640x480 мой 2 ГГц Core2 Duo занимает 5–8 секунд для одного изображения.

1) Это нормально?

2) Можно ли настроить параметры, чтобы получить худшие результаты, но ускорить выполнение?

3) Мне фактически не требуется инвариантность масштаба / поворота, просто хорошие функции для отслеживания между кадрами (камера находится в фиксированном положении) / между различными условиями освещения. Есть ли жизнеспособная альтернатива, которая может работать (почти) в режиме реального времени?

Ответы [ 4 ]

4 голосов
/ 04 января 2012

1) Да это нормально SURF плох по производительности :(

2) Вы должны использовать другой дескриптор и детектор, так как я проверял, что сфера является одной из лучших и самых быстрых, но, на мой взгляд, если вы хотите получить результат быстрых переходов, используйте FAST и BRIEF, он не имеет инвариантности вращения, но чрезвычайно быстр по сравнению с SURF:)

попробуйте это, я надеюсь, вы будете удовлетворены и прочитаете это

2 голосов
/ 05 января 2012

Если производительность является проблемой, вы можете попробовать версию SURF для графического процессора, реализованную в модуле графического процессора OpenCV:

OpenCV-2.3.1/modules/gpu/src/surf.cpp
1 голос
/ 05 января 2012

Одной из проблем SURF в openCV является очень большое количество преобразований типов (double <-> float, float-> int), и это требует времени из-за частого вызова этих основных функций. Вы можете попытаться заглянуть в исходный код и попытаться изменить его, чтобы повысить производительность.

0 голосов
/ 16 мая 2018

Вы можете играть с параметром hessianThreshold. Чем оно больше, тем меньше будет найдено функций и меньше времени будет потрачено на их обнаружение.

В моем случае с значением по умолчанию из 100 потребовалось ~ 10 секунд, чтобы получить все совпадения. Увеличение значения до 1000 сокращает время до 1-2 секунд без ущерба для конечного результата.

Подробнее см. Введение в SURF (Ускоренные надежные функции) .

...