Как сравнить два изображения для сходства (Не точные совпадения с MD5)?

Как я могу взять два изображения и сравнить их, чтобы увидеть, насколько они похожи?

Я не говорю о сравнении двух точных изображений с использованием MD5. Два изображения, которые я сравниваю, будут совершенно разными, а иногда и разными размерами.

Используя карты Pokemon в качестве примера: я собираюсь отсканировать HD-изображения каждой из карт. Я хочу, чтобы пользователь мог сфотографировать свою карточку Pokemon со своим телефоном, и я хочу иметь возможность сравнить его с моими отсканированными изображениями, а затем определить, на какой карте они сделали снимок.

Обработка не обязательно должна выполняться непосредственно на телефоне, однако разгрузка на веб-службу является вариантом, однако обратите внимание, что мои знания несколько ограничены на языках программирования (в основном, для PHP / JAVA / Android). Сервер, который я использую, является моим собственным сервером Ubuntu, поэтому у меня есть доступ к команде exec из php, если это поможет.

Сначала я подумал, что раньше кто-то сделал бы что-то подобное (сравнивая два изображения). Я попытался использовать php с imageik, используя пример, который я нашел, который утверждал, что делал то, что я пытался (используя compareImages ()), но он вообще не работал. Кажется, что не так много (если есть) документации о том, что я делаю что-то подобное, поэтому я так застрял. Все, что я ищу, – это толчок в правильном направлении.

Моя вторая мысль заключалась в том, чтобы попытаться использовать OCR, чтобы вытащить только название карты, и я просто сравню это с базой данных титров и покажу изображения, привязанные к этому названию. До сих пор я сначала пытался использовать phpocr, который вообще не работал, поскольку для моего понимания нужны монохромные изображения. Затем я попробовал tesseract непосредственно с консоли на моем сервере, и, хотя он сделал WAY лучше, чем phpocr, более 80% символов были либо неправильными, либо неверными на отсканированном изображении, поэтому изображение с более низким качеством, исходящее от смартфона, действительно есть проблемы.

Я также попробовал OpenCV для Android, но не смог получить ни один из образцов, работающих.

Кто-нибудь сделал что-нибудь подобное или, по крайней мере, использовал то, что может выполнить то, что я ищу?

Существуют две различные задачи: определить интересующую область (что может быть сделано с каскадами Хаара – так же, как распознавание лиц) и распознавание идентифицированного изображения, которое может быть
сделанные с помощью методов инвариантного момента (например, моменты Ху – это было достаточно хорошо, чтобы считать советские танки на спутниковых снимках, поэтому это будет полезно для покемонов). Хорошим свойством инвариантных моментов является мягкая деградация результатов в случае низкого качества – вы получаете список вероятности для символов – например, это 80% пикачу и 30% чего-то еще.

Мы разрабатываем библиотеку OCR на основе инвариантных моментов для использования в андроиде здесь:

https://sourceforge.net/projects/javaocr/

(чистая java и разумная скорость, а в поддиректории demos есть образцы андроида. И вот приложение, основанное на javaocr, оно распознает черный на белом номер телефона и набирает его: https://play.google.com/store/apps/ подробности? id = de.pribluda.android.ocrcall & feature = search_result #? t = W251bGwsMSwyLDEsImRlLnByaWJsdWRhLmFuZHJvaWQub2NyY2FsbCJd )

Вы также можете рассмотреть некоторую целевую помощь, чтобы символ позиции пользователя соответствовал должным образом (так что первая задача будет использовать реальный интеллект)

Вы должны решить, какое сравнение сходства вам нужно. Существуют геометрические алгоритмы. Они используют обнаружение кромок, а затем пытаются сопоставить обнаруженные ребра на обоих изображениях. Они, вероятно, полезны при работе с разными цветами объектов с одинаковой формой. И есть алгоритмы, которые в большей степени основаны на цветовой подобии. Они сравнивают, какие цвета находятся на изображении и как они распределяются.

Если вы ищете конкретный алгоритм, вы, вероятно, должны взглянуть на преобразование Хафа .