В продолжение топика
Итак, в презентации было упомянуто, что для поиска у всех изображений:
- Удаляется информация о цвете.
- Они преобразуются к квадрату.
- Обрезаются края у квадрата.
Что же делать с картинкой далее?
Мой вариант:
Хеш
Хеш делается независимо от разрешения.
Для каждого пикселя берем значение яркости, затем смотрим на соседний пиксель справа, если справа ярче — добавляем бит 0 к хешу, если темнее — 1.
Первый бит должен быть 0, если нет — инвертируем перед тем как считать остальные.
Для размера 7x7 получается 49 бит, для 16х16 — 1 байт.
Довольно небольшой размер для хеша.
Оптимальным путем было установлено, что размер 7х7 хорошо справляется на небольших (несколько тысяч) объемах изображений.
Чем меньше размер хеша, тем чаше встречаются неожиданные дубликаты и больше ошибок, чем больше — тем выше точность.
Пример: идентичные хеши 7х7
Как же повысить точность? У меня было простое решение:
Вначале ищем все изображения по максимально большому хешу, если не нашлось или нашлось мало — ищем дальше по маленьким хешам.
На создание нескольких вариантов хешей уходило не более нескольких секунд (для картинок 10000х10000), что сравнимо с временем загрузки изображения.
Что склеивать? Тут ответа у меня нет. Однозначно можно склеивать, если совпал один из больших хеши (выше 7х7). Для более сложных случаев нужна дополнительная проверка.
Спасибо за внимание
Автор: w999d