2013-11-09 3 views
3

LSH используется с двоичными строками и очень эффективен при индексировании и поиске. Хотя SIFT не является двоичным дескриптором, он по-прежнему является лучшим дескриптором, доступным там. Можно ли использовать SIFT с LSH? Кроме того, существуют ли лучшие методы индексирования для функций SIFT?Как использовать дескрипторы SIFT с чувствительностью на местности?

Я попытался с помощью SIFT с FLANNBased Matcher с LSH в OpenCV, но получаю следующее сообщение об ошибке:

what(): C:\OpenCV\opencv\modules\flann\src\miniflann.cpp:315: error: (-210) type=5 in function buildIndex_

Код:

cv::Ptr<cv::FlannBasedMatcher> matcher = new cv::FlannBasedMatcher(new cv::flann::LshIndexParams(5, 24, 2)); 
     matcher->match(descriptors, descriptors1, matches); 

Примечание: Этот вопрос был более подходящим на dsp.stackexchange .com, но он находится в режиме только для чтения прямо сейчас.

+0

SIFT - действительно лучший дескриптор изменений точки зрения, но BRIEF превосходит его в фотометрических изменениях. Кроме того, я думаю, что если вы добавите механизм коррекции вращения в BRIEF, это даст хорошие результаты при изменении точки обзора. – GilLevi

ответ

2

LSH - алгоритм уменьшение размерности, который выводит двоичные строки. Он был предназначен для индексирования вещественных, высокоразмерных данных (но с внутренней более низкой размерностью, такой как многообразия) с двоичными кодами.

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

+0

спасибо. Что вы подразумеваете под случайными проекциями? – krammer

+1

«Случайная проекция в уменьшении размерности: Приложения к изображениям и текстовым данным» http://users.ics.aalto.fi/ella/publications/randproj_kdd.pdf –

+0

Знаете ли вы какой-либо образец кода, доступный для использования SIFT (или любой такой метод) с LSH – krammer

3

Два лучших метода индексации, используемых для SIFT, - это kd-tree and k-means, попробуйте их. Оба они реализованы в FLANN matcher which is part of OpenCV. Эти два документа сравнивает Flann и LSH для просеивает:

"Locality sensitive hashing: a comparison of hash function types and querying mechanisms"

"How to Use SIFT Vectors to Analyze an Image with Database Templates"

На самом деле, Александр Андони реализовали something very similar на то, что вы хотите.

+0

, но не LSH быстрее? – krammer

+0

Это, но менее точный. Современные системы поиска изображений, насколько я знаю, используют кластеризацию k-mean. –

+0

спасибо за ссылки на бумагу. Я концептуально могу теперь понять, что происходит, но действительно вслепую, как его кодировать. – krammer

Смежные вопросы