Мне нужен простой и быстрый способ сравнить два изображения по сходству. То есть Я хочу получить высокое значение, если они содержат одно и то же, но могут иметь немного другой фон и могут быть перемещены/изменены на несколько пикселей.
(Более конкретно, если это имеет значение: одно изображение является значком, а другое - подрайоном снимка экрана, и я хочу знать, является ли этот подрайон именно значком или нет.)
У меня есть OpenCV, но я до сих пор не привык к этому.
До сих пор я думал об одной возможности: разделить обе картинки на 10 × 10 ячеек и сравнить каждую из этих 100 ячеек с цветной гистограммой. Затем я могу установить некоторые пороговые значения, и если полученное значение будет выше этого порога, я предполагаю, что они похожи.
Я еще не пробовал, насколько хорошо это работает, но я думаю, это было бы достаточно хорошо. Изображения уже очень похожи (в моем случае), поэтому я могу использовать довольно высокое пороговое значение.
Я предполагаю, что есть десятки других возможных решений для этого, которые работали бы более или менее (поскольку сама задача довольно проста, поскольку я хочу обнаружить сходство, только если они действительно очень похожи). Что бы вы предложили?
Есть несколько очень похожих/похожих вопросов о получении подписи/отпечатка пальца/хэша на изображении:
- OpenCV/SURF Как создать хеш/fingerprint/подпись изображения из дескрипторов?
- Изображение отпечатка пальца, чтобы сравнить сходство многих изображений
- Обнаружение почти дублированного изображения
- OpenCV: изображение отпечатка пальца и сравнение с базой данных.
- больше, больше, больше, больше, больше, больше, больше
Кроме того, я наткнулся на эти реализации, которые имеют такие функции для получения отпечатка пальца:
- pHash
- imgSeek (GitHub repo) (GPL) на основе статьи Быстрый многоразрешающий запрос изображений
- изображение матча. Очень похоже на то, что я искал. Аналогичен pHash, основан на подписи для любого изображения, Goldberg et al.. Использует Python и Elasticsearch.
- iqdb
- ImageHash, поддерживает pHash.
- Дедупликатор изображений (imagededup). Поддерживает CNN, PHash, DHash, WHash, AHash.
Некоторые обсуждения перцептивных хэшей изображений: здесь
Немного оффтоп: существует множество способов создания аудио-отпечатков пальцев. MusicBrainz, веб-сервис, который обеспечивает поиск песен по отпечаткам пальцев, имеет хороший обзор в своей вики. Они используют AcoustID сейчас. Это для нахождения точных (или в основном точных) совпадений. Чтобы найти похожие совпадения (или если у вас есть только фрагменты или высокий уровень шума), посмотрите Echoprint. Соответствующий вопрос SO здесь. Похоже, это решено для аудио. Все эти решения работают довольно хорошо.
Несколько более общий вопрос о нечетком поиске в общем случае здесь. Например. есть локальное хеширование и поиск ближайшего соседа.