2014-10-16 1 views
2

Я работаю над проектом, совместимым с функциями, и я использую OpenCV Python в качестве инструмента для разработки приложения.Как сравнить два изображения и проверить, имеют ли оба изображения один и тот же объект или нет в OpenCV python или JavaCV

В соответствии с требованиями проекта в моей базе данных есть изображения некоторых объектов, таких как стекло, шарик и т. Д .... с их описаниями. Пользователь может отправлять изображения на задний конец приложения, а задний конец отвечает за сопоставление отправленного изображения с изображениями, которые существуют в базе данных, и отправляет описание изображения пользователю.

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

Если какое-либо тело есть такой алгоритм, пожалуйста, пришлите мне. (Я должен использовать OpenCV питона или JavaCV)

Спасибо вам

ответ

1

Я думаю, вы говорите о Content Based Retrieval Image

В Интернете есть множество исследовательских работ. Получите любую из них и воспользуйтесь Лучшим из них в соответствии с вашими потребностями. Выберите критерии в соответствии с вашим приложением, такие как поиск на основе текстуры, основанный на цвета, основанный на фигуре (это лучше всего, когда вы работают с поиском изображений на сеть для скорости).

Итак, вам нужна реализация python, я хотел бы предложить вам пройти через Глава 7, 8 книги Computer Vision Book. Она содержит рабочий пример с кодом, что вы ищете

One question you may found useful :Are there any API's that'll let me search by image?

4

Это очень распространенная проблема в Computer Vision в настоящее время. Простое решение очень просто. Но существует множество вариантов для более сложных решений.

Простое решение

  1. Функция детектора и Descriptor основе. Идея состоит в том, что вы получаете кучу ключевых точек и их дескрипторов (поиск SIFT/SURF/ORB). Затем вы можете легко найти совпадения с инструментами, предоставляемыми в OpenCV. Вы бы соответствовали ключевым точкам вашего изображения запроса по всем ключевым точкам в наборе учебных данных. Из-за типичных выбросов вы хотели бы добавить надежную технологию совпадения, такую ​​как RanSaC. Все это часть OpenCV.
  2. Модель Word-of-Word Если вы хотите, чтобы изображение было таким же, как и изображение запроса, вы можете использовать поиск Nearest-Neighbor. Имейте в виду, что OpenCV поставляется с гораздо более быстрым алгоритмом Approximated-Nearest-Neighbor (ANN). Или вы можете использовать BruteForceMatcher.

Advanced Solution

Если у вас есть много изображений (многие == 1 миллион), вы можете посмотреть на местность-Sensitive хэширования (см Dean и др 100,000 объектов категории).

Если вы используете Bag-of-Visual-Words, то вам, вероятно, следует создать Инвертированный указатель.

Посмотрите на Fisher Vectors для улучшения точности по сравнению с BOW.

Предложение

Начните с использованием Bag-Of-визуальных слов. Есть учебные пособия о том, как обучить словарь для этой модели .

Обучение:

  1. Extract Местные особенности (просто выбрать просеять, вы можете легко изменить это, как OpenCV является модульным) из подмножества ваших тренировочных образов. Сначала detect функции, а затем extract их. Об этом много книг в Интернете.
  2. Словарь поезда. Helpful documentation со ссылкой на примерную реализацию в Python (opencv_source_code/samples/python2/find_obj.py)!
  3. Вычислить гистограмму для каждый учебное изображение. (Также в документации BOW с предыдущего шага)
  4. Поместите свои дескрипторы изображения с шага выше в FLANN-Based-matcher.

Запросы:

  1. Compute функции по изображению запроса.
  2. Используйте словарь из учебного курса, чтобы построить гистограмму BOW для вашего изображения запроса.
  3. Используйте эту функцию, чтобы найти ближайшего соседа (-ов).