Подтвердить что ты не робот

Обнаружение похожих изображений

Возможный дубликат:
Алгоритм сравнения изображений

Так что в основном мне нужно написать программу, которая проверяет, совпадают ли 2 изображения или нет. Рассмотрим следующие 2 изображения:

http://i221.photobucket.com/albums/dd298/ramdeen32/starry_night.jpg

http://i221.photobucket.com/albums/dd298/ramdeen32/starry_night2.jpg

Ну, это оба изображения, но как я могу проверить, одинаковы ли эти изображения. Я ограничен только функциями СМИ. Все, о чем я могу сейчас думать, это масштабирование высоты по ширине и сравнение RGB для каждого пикселя, но не будет ли цвет другим?

Im полностью потерян на этом, любая помощь приветствуется.

* Обратите внимание, что это должно быть в python и использовать (медиа-библиотеку)

4b9b3361

Ответ 1

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

Очевидно, что два опубликованных вами изображения на самом деле очень разные - так что вам нужно будет подумать о том, насколько разные разные, особенно при работе с изображениями и рассмотрении разных форматов изображений и сжатия и т.д.

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

  • Выберите два изображения.

  • Отсканируйте наибольшее изображение с той же высотой и шириной, что и первая (даже если при необходимости исказить изображение).

  • Возможно, оттенки серого, чтобы сделать следующие шаги более простыми, не теряя при этом значительного эффекта. На самом деле, возможно, обнаружение скребкового края здесь тоже может работать.

  • Пройдите через каждый пиксель в обоих изображениях и сохраните разницу в каждом из каналов RGB или просто в интенсивности оттенков серого. В итоге вы получите массив размером изображения, отмечая разницу между интенсивностями пикселей на двух изображениях.

  • Теперь я не знаю точных значений, но вы, вероятно, затем обнаружите, что если вы перебираете массив, вы можете увидеть, одинакова ли разница между каждым пикселем в двух изображениях (или почти одинаково) по всем пикселям. Возможно, повторите операцию по массиву один раз, чтобы найти среднюю разницу между интенсивностями пикселей в двух изображениях, а затем снова итерации по изображению, чтобы увидеть, попадает ли 90% различий в определенный порог (разница в 5%?).

Просто идея. Конечно, могут быть некоторые приятные функции, которые я не знаю, чтобы сделать это легко, но я бы не задерживал дыхание!

Ответ 2

ImageMagick имеет привязки Python и функцию сравнения. Он должен выполнить большую часть работы для вас, но я никогда не использовал ее в Python.

Ответ 3

Я думаю, что шаг 2 ответа Джона Вордсворта может быть одним из самых сложных - здесь вы имеете дело с растянутой копией изображения, но также можете ли вы поворачивать, обрезать или иным образом искажать изображения? Если это так, вам понадобится алгоритм соответствия функций, например, используемый в Hugin или другом программном обеспечении для создания панорам. Это найдет подходящие функции, исказится, и вы сможете выполнять другие этапы сравнения. В идеале вы хотите узнать картину Ван Гога из фотографий, даже фотографии на кружках! Легко для человека это сделать, для компьютера ему нужны более сложные математики.