OpenCV: изображение отпечатка пальца и сравнение с базой данных - PullRequest
9 голосов
/ 26 августа 2011

У меня есть база изображений. Когда я делаю новый снимок, я хочу сравнить его с изображениями в этой базе данных и получить оценку сходства (используя OpenCV). Таким способом я хочу определить, если у меня есть изображение, похоже на свежую картинку.

Можно ли создать отпечаток / хэш изображений из моей базы данных и сопоставить новые с ним?

Я ищу фрагмент кода алгоритма или техническую демонстрацию, а не коммерческое решение.

Best

Stefan

Ответы [ 3 ]

10 голосов
/ 26 августа 2011

Как прокомментировал Pual R, этот «отпечаток пальца / хэш» обычно представляет собой набор векторов признаков или набор дескрипторов признаков. Но большинство векторов признаков, используемых в компьютерном зрении, обычно слишком вычислительно дороги для поиска в базе данных. Поэтому для выполнения этой задачи требуются особые дескрипторы функций, поскольку такие дескрипторы, как SURF и SIFT, будут требовать слишком много времени для поиска даже с различными оптимизациями.

Единственное, что есть у OpenCV для вашей задачи (категоризация объектов), это реализация Bag of visual Words (BOW).

Он может вычислять особые виды функций изображения и обучать словарный запас визуальных слов. Далее вы можете использовать этот словарь, чтобы найти похожие изображения в вашей базе данных и вычислить оценку сходства.

Вот Документация OpenCV для пакета слов. Также в OpenCV есть образец с именем bagofwords_classification.cpp. Это действительно большой, но может быть полезным.

2 голосов
/ 26 августа 2011

Контентно-ориентированные системы поиска изображений по-прежнему являются областью активного исследования: http://citeseerx.ist.psu.edu/search?q=content-based+image+retrieval

Прежде всего, вы должны понять, что схоже в вашем контексте:

  1. Похожиераспределение цвета: используйте что-то вроде дескрипторы цвета для подразделов изображения, вы должны получить довольно удовлетворительные результаты.
  2. Подобные объекты: поскольку компьютер не знает, что такое объект, выне зайдет слишком далеко, если у вас нет обширных знаний об объекте (или нескольких классов объектов).Хороший обзор о текущем состоянии исследований можно увидеть здесь ( результаты ) и вскоре здесь .

Там нет«обслуживать все потребности» - алгоритм для описанной вами проблемы.Чем больше вы сможете рассказать об особенностях вашей проблемы, тем лучше вы сможете получить ответы.Публикация некоторых репрезентативных изображений (если возможно) и описание желаемого результата также очень полезны.

Это был бы хороший вопрос для computer-vision.stackexchange.com , если он уже существовал.

0 голосов
/ 04 октября 2016

Вы можете использовать pHash Алгоритм и сохранить значение phash в базе данных, а затем использовать этот код:

double const mismatch = algo->compare(image1Hash, image2Hash);

Здесь значение «несоответствие» может легко определить коэффициент сходства между двумя изображениями.

Функция pHash:

  1. Средний хэш
  2. PHASH
  3. MarrHildrethHash
  4. RadialVarianceHash
  5. BlockMeanHash
  6. BlockMeanHash
  7. ColorMomentHash

Эти функции вполне достаточны для оценки сходства изображений во всех аспектах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...