2013-06-30 4 views
2

Я очень новичок в обработке изображений и сопоставлении изображений и не понимаю его очень четко. Что мне нужно сделать: a) Сделайте снимок b) Извлеките из него функции (SIFT, SURF лучше подходят для сопоставления) c) Создайте хеш (например MD5 или SHA1) d) Сохраните его в базе данных и выполните поиск разные изображения, если они похожи.OpenCV | SIFT SURF | Хэш | Поиск изображения

Bascially (А TinEye)

я говорил OpenCV/SURF How to generate a image hash/fingerprint/signature out of the descriptors?. Я также проверил pHash и попытался запустить SIFT SURF с помощью opencv simple_matcher.cpp

Прочитайте немного о геометрическом хешировании/локальном чувствительном Хешировании, но не уверен, что я иду в правильном направлении.

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

+1

Является ли ваша цель конечной целью сопоставить одно изображение с базой данных многих? – kamjagin

+0

@kamjagin Да. Я пытаюсь создать небольшое приложение, где Предположим, что мы нашли 500 изображений на одном ноутбуке и 100 изображений на другом ноутбуке. Я пытаюсь найти, если какие-либо изображения были разделены между ними. Изображения могут быть изменены. Поэтому я не могу просто MD5 Хеши их. – bitvijays

ответ

3

Хорошо, есть тонна хороших способов сопоставления изображений с различным уровнем сложности. Я дам предложение, которое, по моему мнению, достаточно хорошо для проблемы, которую вы описали и действительно просты в реализации (поскольку вы говорите, что вы сверхновой CV).

  1. Compute редкие или плотные SURF особенности на изображениях на COMPUTER1
  2. Создать словарь (для выполнения этой задачи, генерирующего случайное одно, вероятно, также достаточно хорошо)
  3. Присвоить функции к словарю (яя)
  4. построить кД-дерево (использовать для ближайшего соседа) или подучить классификатор (как сумма)
  5. Нанести классификатор изображений на КОМПЬЮТЕР2 (после того, как вычислены прибои и назначены к словарю)

Те же изображения, скорее всего, будут давать самые высокие оценки классификации.

Причина, по которой я предлагаю этот подход к более быстрым и хэширующим подходам, заключается в том, что маловероятно, что у вас будут проблемы с производительностью для нескольких изображений размером ~ 500, и поскольку в opencv есть хороший пример (bagofwords_classification.cpp), что вы можете следовать шаг за шагом, чтобы достичь того, чего вы хотите.

+0

У меня есть несколько запросов: 1) DoCompute разреженные или плотные функции SURF, такие как код в https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/matcher_simple.cpp?rev=3204 2) Я читал о сумке слов. Он использовался в основном для классов Visual Object Classes pascal. Я этого не делаю. Моя цель применения - найти образы детских злоупотреблений. 3) У меня должна быть центральная база данных, содержащая все хеши, связанные с найденными изображениями. Так что, независимо от количества ноутбуков, мы просто сканируем изображения, найденные на ноутбуке, и проверяем базу данных. 4) Изображения могут быть> 500, может быть 10000. – bitvijays

+1

1. Да - это способ для вычисления разреженных дескрипторов SIFT для двух разных изображений, что достаточно хорошо для этой проблемы. 2. BOW - это просто способ описания содержимого изображения без пространственных ограничений (хотя пространственные ограничения типа пирамиды улучшают ситуацию). Он будет делать трюк по вашей проблеме. 3) Все еще очень подходит. Каждое изображение будет описано его словами. 4) Затем вы должны посмотреть детали, чтобы сделать его более эффективным.Вы можете начать с работы http://people.rennes.inria.fr/Herve.Jegou/. На его веб-странице также есть код MATLAB – kamjagin

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