Простой хеш для поиска похожих картинок

в 6:07, , рубрики: images, recognition, Алгоритмы, обработка изображений, Программирование, метки: ,

В продолжение топика

Итак, в презентации было упомянуто, что для поиска у всех изображений:

  1. Удаляется информация о цвете.
  2. Они преобразуются к квадрату.
  3. Обрезаются края у квадрата.

Что же делать с картинкой далее?

Мой вариант:

Хеш

Хеш делается независимо от разрешения.
Для каждого пикселя берем значение яркости, затем смотрим на соседний пиксель справа, если справа ярче — добавляем бит 0 к хешу, если темнее — 1.
Первый бит должен быть 0, если нет — инвертируем перед тем как считать остальные.
Для размера 7x7 получается 49 бит, для 16х16 — 1 байт.
Довольно небольшой размер для хеша.

Оптимальным путем было установлено, что размер 7х7 хорошо справляется на небольших (несколько тысяч) объемах изображений.

Чем меньше размер хеша, тем чаше встречаются неожиданные дубликаты и больше ошибок, чем больше — тем выше точность.

Пример: идентичные хеши 7х7

Простой хеш для поиска похожих картинок Простой хеш для поиска похожих картинок

Простой хеш для поиска похожих картинок Простой хеш для поиска похожих картинок

Как же повысить точность? У меня было простое решение:

Вначале ищем все изображения по максимально большому хешу, если не нашлось или нашлось мало — ищем дальше по маленьким хешам.

На создание нескольких вариантов хешей уходило не более нескольких секунд (для картинок 10000х10000), что сравнимо с временем загрузки изображения.

Что склеивать? Тут ответа у меня нет. Однозначно можно склеивать, если совпал один из больших хеши (выше 7х7). Для более сложных случаев нужна дополнительная проверка.

Спасибо за внимание

Автор: w999d

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js