Быстрое сопоставление двоичных дескрипторов с использованием фланга

Я хочу сопоставить набор двоичных дескрипторов (данные запроса) с большим набором двоичных дескрипторов (данные поезда).

Соответствие должно быть сделано быстро. Я решил попробовать FlannBasedMatcher OpenCv. Matcher поддерживает различные Алгоритмы. Для двоичных дескрипторов реализован Multi-Probe LSH.

FlannBasedMatcher matcher (new flann::LshIndexParams(12,10,2));
std::vector<DMatch> matches;
matcher.knnMatch(query, train, matches, 2);

(Я пробовал разные настройки LshIndexParams)

Проблема в том, что сопоставление Flann с LSH очень медленное по сравнению с сопоставлением BruteForce или по сравнению с сопоставлением Flann с KDTreeIndexParams с использованием дескрипторов с плавающей точкой.

Также похоже, что некоторые другие испытали ту же проблему (см. 1, 2).
В одном из ответов предлагается попробовать иерархическую кластеризацию.
Это должно быть быстрее, чем LSH.

Я хотел бы использовать тот же интерфейс FlannBasedMatcher, что и с LSH.

FlannBasedMatcher matcher (new flann::HierarchicalClusteringIndexParams());
std::vector<DMatch> matches;
matcher.knnMatch(query, train, matches, 2);

Однако это не работает с двоичными дескрипторами (см. Сообщение об ошибке):

OpenCV Error: Unsupported format or combination of formats

Но «сырой» интерфейс иерархической кластеризации поддерживает несколько типов расстояний, и есть возможность выбрать расстояние Хемминга.

cv::flann::Index tree(train, cv::flann::HierarchicalClusteringIndexParams(), FLANN_DIST_HAMMIN‌​G);
cv::Mat indices, dists;
tree.knnSearch(query, indices, dists, 2, cv::flann::SearchParams());

Мои вопросы:

  • Можно ли установить тип расстояния для FlannBasedMatcher для работы с двоичными дескрипторами и с иерархической кластеризацией? Или я могу определить кастом flann::HierarchicalClusteringIndexParams() с расстоянием Хэмминга? Я хотел бы использовать интерфейс FlannBasedMatcher.
  • Есть ли альтернативный более быстрый метод для сопоставления двоичных дескрипторов? Лучше / быстрее, чем использовать FLANN с LSH или иерархической кластеризацией?

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]