Подтвердить что ты не робот

SURF vs SIFT, SURF действительно быстрее?

Я тестирую обнаружение объектов с помощью SURF и SIFT.

SURF утверждает, что он быстрее и надежнее, чем SIFT, но я нашел в своем тесте, что это неверно. SIFT со средними изображениями (600 * 400) имеет одинаковую скорость SURF и хорошо распознает объекты (возможно, даже лучше, чем SURF).

Я что-то делаю неправильно?

[изменить]

Обратите внимание: статья, объясняющая, как SURF может быть намного быстрее с небольшим изменением кода opencv.

Если вы знаете какого-нибудь активного разработчика opencv, пусть он его видит.

4b9b3361

Ответ 1

Когда он был разработан, он должен был быть быстрее, но на самом деле, различия не имеют значения для приложений реального времени со стандартными камерами. Кстати, детектор FAST работает быстрее и достаточно надежен. Я программирую для дополненной реальности в реальном времени на телефонах, и мы используем комбинацию SIFT (инициализация) и FAST (пирамидальная FAST для обнаружения функций в реальном времени) во время выполнения приложения. FAST быстрее и реализован в OpenCV, поэтому, если вы не хотите придерживаться SURF, попробуйте. Я не видел недавних работ, в которых используется SURF для работы в режиме реального времени, но я видел модифицированные версии SIFT с меньшим количеством пикселей для дескрипторов и других видов модификаций, поэтому кажется, что SURF была своего рода отличной идеей, которая не получила насколько это было задумано. Во всяком случае, это только мое мнение.

Ответ 2

OpenCV не имеет лучшей реализации SURF для скорости или стабильности. SURF существенно быстрее, на большее количество, чем SIFT, если вы должны были подсчитать FLOPS из двух хорошо написанных реализаций. SIFT вычисляет пирамиду изображения путем свертывания изображения несколько раз с большими гауссовыми ядрами, тогда как SURF выполняет приближение к нему с использованием интегральных изображений.

Чтобы увидеть сравнение нескольких реализаций SURF, взгляните на мою страницу здесь:

http://boofcv.org/index.php?title=Performance:SURF

Несчастливо, что OpenCV отклонил исправление, связанное с округлением из-за проблем с кросс-платформой. Возможно, исправление будет изменено и повторно отправлено. В своей работе я заметил, что общий раунд round() был очень медленным и заменил его на пользовательскую функцию.

Что касается детектора FAST, упомянутого Jav_Rock, я использую это только как последнее средство. Он гораздо менее устойчив к детектору, чем что-либо еще, но он действительно быстрый.

Ответ 3

SURF должен быть быстрее, тогда как SIFT более надежный. Астор прав, говоря 600 * 400 - это небольшое изображение по сегодняшним меркам; хотя.

Тем не менее, SURF должен быть на много порядков быстрее, чем SIFT.

Ответ 4

Без каких-либо изменений, если вы применяете SIFT и SURF в OPENCV, SIFT кажется более быстрым, чем SURF, но это не так. Для доказательства того, что я проверил их на изображении размером 393 * 387 пикселей. После 100 раз выполнения извлечения одной и той же функции и получения их среднего времени, получается

SIFT: 0,0983946 (s)

SURF: 0,183372 (s)

Тем не менее, количество ключевых точек имеют большую разницу, SIFT: kpsize = 671 d-row = 671 d-col = 128

SURF: kpsize = 1156 d-row = 1156 d-col = 64

SURF возвращает почти вдвое больше ключевых точек SIFT, поэтому нечестно сказать, что SIFT быстрее SURF.

Когда мы использовали Fast в качестве детектора, примените SIFT, SURF:

SIFT: 0,199448 (s) SURF: 0,0613682 (s)

SIFT: kpsize = 2362 d-row = 2362 d-col = 64

SURF: kpsize = 2362 d-row = 2362 d-col = 64

Здесь SURF в три раза быстрее, чем SIFT.

Ответ 5

Пожалуйста, используйте исходную реализацию SURF для тестирования. Открытое резюме работает медленнее.

При сравнении исходных реализаций SIFT и SURF, вы получите намного более быстрые результаты с SURF. Вы можете получить еще быстрее, возможно, на порядок, изменив параметры. Однако надежность может пострадать. Все это зависит от вашего варианта использования.

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

Существуют также реализации графического процессора SURF, которые значительно быстрее, чем моя первоначальная реализация.

Ответ 6

Я увеличил скорость своего детектора функции Surf, не применяя его на каждом кадре, но на каждом шестом кадре, это было нормально для моего приложения. сделайте счетчик i, make if, если (i% 6 == 0), поместите ur-код в этот оператор if, скорость увеличится