SURF и SIFT Альтернативный алгоритм отслеживания объектов для расширенной реальности
После запроса здесь и попыток как SURF, так и SIFT, ни один из них не будет достаточно эффективным, чтобы создавать точки интереса достаточно быстро, чтобы отслеживать поток с камеры.
SURF, например, занимает около 3 секунд, чтобы создавать точки интереса для изображения, что слишком медленно отслеживает видео, поступающее с веб-камеры, и будет еще хуже при использовании его на мобильном телефоне.
Мне нужен только алгоритм, который отслеживает определенную область, ее масштаб, наклон и т.д., и я могу основываться на этом.
Спасибо
Ответы
Ответ 1
Я подозреваю, что для вашего использования SURF могут потребоваться некоторые изменения?
Вот ссылка на бумагу MIT по использованию SURF для приложений с расширенной реальностью на мобильных устройствах.
Выдержки:
В этом разделе мы представляем нашу реализация алгоритма SURF и его адаптация к мобильному Телефон. Затем мы обсудим влияние что точность имеет скорость поиск ближайших соседей и показать, что мы можем достичь порядка величины ускорение с минимальным воздействием на точность совпадения. Наконец, мы рассказывать подробности телефона реализация сопоставления изображений трубопровод. Мы изучаем производительность, использование памяти и потребление полосы пропускания на телефоне.
Возможно, вы также захотите изучить алгоритмы OpenCV, потому что они опробованы и протестированы.
В зависимости от ограничений вашего приложения вы можете уменьшить общий характер этих алгоритмов для поиска известных POI и маркеров в изображении.
Часть отслеживания POI оценивает свой вектор от одной точки в 2D-изображении к другому, а затем опционально подтверждает, что он все еще существует (через характеристики пикселя). Такой же подход можно использовать для отслеживания (не повторного сканирования всего изображения) для целей POI и POI-групп/объектов и изменений вращения.
В Интернете есть много документов для отслеживания объектов на 2D-проекции (во многих случаях до перекоса сервера).
Удачи!
Ответ 2
Вам следует попробовать детектор FAST
http://svr-www.eng.cam.ac.uk/~er258/work/fast.html
Ответ 3
Мы используем SURF для проекта, и мы обнаружили OpenSURF для outmatch реализации OpenCV SURF с необработанной скоростью и производительностью. Мы все еще не проверяли повторяемость и точность, но это быстрее.
Обновление:
Я просто хотел указать, что вам не нужно выполнять шаг SURF match в каждом фрейме, вы можете просто сделать это каждый другой фрейм и интерполировать позицию объекта в кадре, в котором вы не выполняете SURF.
Ответ 4
Вы можете использовать более простой алгоритм, если вы будете устанавливать более строгие ограничения в области, которую вы хотите отслеживать. Как вы точно знаете, ARToolKit довольно быстро, но только отслеживает черно-белые маркеры с очень четкой рамкой.
Если вам нужен (несколько) трекер общего назначения, вы можете проверить PTAM. Сайт (http://www.robots.ox.ac.uk/~gk/PTAM/) в настоящее время недоступен, но здесь потрясающее видео об этом работает на iPhone (http://www.youtube.com/watch?v=pBI5HwitBX4)
Ответ 5
Как уже упоминалось, три секунды кажутся необычно длинными. Проверяя реализацию SURF в библиотеке Mahotas, я обнаружил, что она занимала в среднем 0,36 секунды даже при довольно больших изображениях (например, 1024x768). И это с комбинацией Python и C, поэтому я бы предположил, что некоторые другие реализации pure-C будут еще быстрее.
Ответ 6
Я нашел это хорошее сравнение алгоритмов обнаружения всех функций http://computer-vision-talks.com/2011/01/comparison-of-the-opencvs-feature-detection-algorithms-2/
Посмотрите. Это может быть полезно!
В соответствии с этим сравнением, и, как также предлагает mirror2image, FAST - лучший выбор. Но это зависит от того, чего вы действительно хотите достичь.
Ответ 7
Один из вариантов, который я использовал в ограниченных встроенных системах, - использовать более простой детектор процентных точек: например, FAST или Shi-Tomasi. Я использовал Shi-Tomasi, поскольку я настраивал FPGA и мог легко запускать его со скоростью пикселя без существенной буферизации.
Затем используйте SURF, чтобы сгенерировать дескрипторы для патча изображения вокруг идентифицированных функций и использовать их для соответствия и отслеживания.