Сравнение изображений и поиск схожих?

Доброго утра.

Есть сайт с возможностью пользователя загружать изображения в общую галлерею. Изображений довольно много и есть необходимость проверки на наличие таких изображений в каталоге.

Как я планирую это делать: пи сохранении изображения вычислять его хеш, затем искать похожие хеши в бд. Если таковых нет - сохранять изображение и его хеш.

Тут возникает ряд вопросов:
1. Какие есть готовые решения для расчета подобных хешей, которые работают на Linux.
2. Достаточно ли сравнения по одному алгоритму, или будет целесообразно хранить и сравнивать несколько хешей?
3. Для поиска похожих изображений необходим поиск не по полному соответствию, а по "отклонению" хешей друг от друга. Возможно ли организовать такой поиск при помощи БД (POSTGRESQL) что бы не вытаскивать каждый раз все запись и не обрабатывать из на ЯП?
  • Вопрос задан
  • 10608 просмотров
Пригласить эксперта
Ответы на вопрос 3
Алгоритм правильный, но его можно ускорить в несколько раз - анализируйте не всё изображение, а его центральную часть. Размеры части должны зависеть от размеров изображения, чтобы исключить повторяющиеся изображения разного разрешения
Ответ написан
Комментировать
@Seed122
Писал на эту тему диплом. Ознакомьтесь в первую очередь вот с этим постом:
habrahabr.ru/post/120562
Для Вашей задачи описанный алгоритм подойдёт лучше всего. Но он определяет схожесть только по форме изображения и не берёт в расчёт цвет. Если Вам нужно учитывать цвет, попробуйте вычленять доминирующие цвета (habrahabr.ru/post/136530) и придумать алгоритм вычисления хэшей и определения схожести по этим цветам.
Ответ написан
@YoungSkipper
Если готовое решение - то www.phash.org/, на osx ставится через brew install phash под linux думаю аналогично. Собственно плюс данного решения, что разница между хашами и есть, разница между изображениями по данному алгоритму. Если постгрес понимает запросы типа - выдай мне все записи где вот это поле отличается от этого числа не более чем на такую константу - то сможете получать на посгресе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы