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