Я думаю, что скорость не является главной проблемой здесь. Основная проблема заключается в том, как использовать функции для получения желаемых результатов.
Если вы хотите классифицировать изображения (например, человек, машина, дом, кошка), то ядро Pyramid Match определенно стоит посмотреть. На самом деле это гистограмма дескрипторов локальных объектов, поэтому нет необходимости сравнивать отдельные объекты друг с другом. Существует также класс алгоритмов, известных как «пакет слов», которые пытаются объединить локальные элементы в «визуальный словарь». Опять же, в этом случае, когда у вас есть «визуальные слова», вам не нужно вычислять расстояния между всеми парами дескрипторов SIFT, а вместо этого определять, к какому кластеру принадлежит каждый объект. С другой стороны, если вы хотите получить точечные соответствия между парами изображений, например, чтобы решить, содержится ли одно изображение в другом, или вычислить преобразование между изображениями, то вам нужно найти точных ближайших соседей.
Кроме того, существуют местные функции, отличные от SIFT. Например, SURF - это функции, аналогичные SIFT, но они быстрее извлекаются, и было показано, что они работают лучше для определенных задач.
Если все, что вам нужно, это найти дубликаты, вы можете значительно ускорить поиск, используя глобальный дескриптор изображения, такой как цветная гистограмма, для удаления изображений, которые явно отличаются. Сравнение двух цветовых гистограмм на несколько порядков быстрее, чем сравнение двух наборов, каждый из которых содержит сотни функций SIFT. Вы можете создать короткий список кандидатов, используя цветные гистограммы, а затем уточнить поиск с помощью SIFT.