Сравните дескрипторы SURF на одном изображении со списком дескрипторов на других изображениях - PullRequest
6 голосов
/ 30 ноября 2011

Я хочу сравнить дескрипторы SURF на одном изображении (A) с дескрипторами на нескольких других изображениях (B, C, D, ..), чтобы найти изображение, наиболее похожее на A. Дескрипторы имеют 64 измерения.

Используя C # и Emgu, сопоставление выполняется путем сравнения дескрипторов A с B, затем C, затем D и так далее. Это очень медленно, когда количество изображений превышает 10, потому что нужно искать многие нерелевантные дескрипторы.

Чтобы ускорить процесс, правильный путь (в соответствии со статьями) состоит в том, чтобы построить одно дерево kd для дескрипторов в (B, C, D, ..), чтобы быстро найти поиск дескриптора в A .DK-дерево разбито по размерам в соответствии с уровнем. Первое разделение определяется по 1-му измерению, второе - по 2-му измерению и т. Д. Однако при большом количестве измерений для дескрипторов (64) преимущество использования KD-дерева становится меньше.

Итак, мой вопрос: какой опыт или знания у вас есть при использовании дерева KD / другого метода для сопоставления дескрипторов SURF от одного изображения (A) до нескольких изображений (B, C, D ..). Что работает хорошо и не очень хорошо, и вы сделали что-нибудь подобное?

FLANN будет вариантом здесь, так как он используется OpenCV, но я не могу найти версию для C #. Приблизительно Nearest Neightboor также будет возможностью ускорить kd-дерево, но хорошо ли это работает с соответствующими изображениями?

С наилучшими пожеланиями Мортен

Ответы [ 2 ]

0 голосов
/ 09 декабря 2011
0 голосов
/ 01 декабря 2011

Вы можете попробовать FLANN на C или C ++. Это не слишком сложно.

Однако я тестирую FLANN на C ++, но время сопоставления (с использованием функций SURF, FLANN, запрос на 1000 изображений) очень велико, от 20 секунд до 400 секунд (в зависимости от количества векторов объектов на изображение).

...