2013-08-15 3 views
2

Мне нужно найти огромную базу данных изображений, чтобы найти возможный дубликат, используя pHash, предполагая, что эти записи изображений имеют хэш-код, сгенерированный с помощью pHash.Использование pHash для поиска огромной базы данных изображений, каков наилучший подход?

Теперь мне нужно сравнить новое изображение, и я должен создать хэш для этого, используя pHash для существующих записей. Но в моем понимании есть сравнение не прямо вперед, как

hash1 - has2 < threshold 

Похоже, мне нужно, чтобы передать оба хэш-коды в pHash API, чтобы сделать matching.So я должен получить все хэш-коды из БД в партии и сравнить один за другим с помощью API pHash.

Но это выглядит не лучшим образом, если у меня есть около 1000 изображений в очереди для сравнения с миллионами уже выходящих изображений.

Мне нужно знать следующее.

  1. Мое понимание/подход при использовании pHash для сравнения с существующим изображением db является правильным?
  2. Есть ли лучший способ справиться с этим (без использования библиотек cbir, таких как lire)?
  3. Я слышал, что существует алгоритм, называемый dHash, который также может использоваться для сравнения изображений с хеш-кодами .. есть ли какие-либо java-библиотеки для этого и может ли это использоваться вместе с pHash для оптимизации этой задачи большого изображения и повторного изображения задачи обработки.

Заранее спасибо.

ответ

2

В зависимости от вашего определения «огромный», хорошим решением здесь реализовать BK-Tree хэш-дерево (human readable description).

Я работаю с аналогичным проектом, и я внедрил BK tree in cython. Он довольно эффективен (поиск с расстоянием от помех 2 занимает менее 50 мс для набора данных из 12 миллионов элементов и касается ~ 0,01-0,02% узлов дерева).

Поиск больших масштабов (расстояние редактирования 8) занимает больше времени (~ 500 мс) и касается около 5% узлов дерева.

Это с размером бита 64 бит.

+0

Спасибо, это ново для меня ... –