2012-10-03 3 views
3

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

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

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

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

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

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

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

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

+0

http://www.google.com/#q=opencv+image+comparison у вас будет много работы, даже с готовой к использованию библиотекой, такой как OpenCV , нет простого способа для того, что вы хотите сделать, а также математика для этого может быть очень сложной. – axis

+0

Это может быть связано: http://stackoverflow.com/questions/843972/image-comparison-fast-algorithm – alfasin

ответ

1

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

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

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

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

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

+0

Можете ли вы указать мне в сторону образцов андроида? После прочтения это звучит так, что это может сделать то, что мне нужно. – Badams

+0

добавленные ссылки в ответе. это может быть для вас решением, но OCR не является тривиальным, и есть не так много готовых рецептов, которые будут работать всегда. –

0

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

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

Смежные вопросы