Сравнение (похожих) изображений с Python / PIL - PullRequest
8 голосов
/ 09 апреля 2010

Я пытаюсь вычислить сходство (читай: расстояние Левенштейна ) двух изображений, используя Python 2.6 и PIL.

я планирую нам библиотека python-levenshtein для быстрого сравнения.

Основной вопрос:

Что такое хорошая стратегия для сравнения изображений? Моя идея что-то вроде:

  • Преобразовать в RGB (прозрачный -> белый) (или, возможно, преобразовать в монохромный?)
  • Увеличьте размер меньшего до размера большего
  • Преобразовать каждый канал (= единственный канал, если он преобразован в монохромный) в последовательность (значение элемента = значение цвета пикселя)
  • Рассчитать расстояние Левенштейна между двумя последовательностями

Конечно, это не будет обрабатывать такие случаи, как зеркальные изображения, обрезанные изображения и т. Д. Но для базового сравнения это должно быть полезно.

Где-нибудь задокументирована лучшая стратегия?

РЕДАКТИРОВАТЬ: Аарон H прав насчет скорости вопроса. Вычисление Levelshtein занимает около вечности для изображений, размер которых превышает несколько сотен на несколько сотен пикселей. Однако разница между результатами после уменьшения до 100x100 и 200x200 в моем примере составляет менее 1%, поэтому может быть целесообразно установить максимальный размер изображения ~ 100px или около того ...

РЕДАКТИРОВАТЬ: Спасибо PreludeAndFugue, этот вопрос, что я искал.

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

EIDT: Среднеквадратичное отклонение и пиковое соотношение сигнал / шум, по-видимому, являются еще двумя вариантами, которые не очень сложны в реализации и, по-видимому, не слишком дороги ЦП. Однако, похоже, мне понадобится какой-то контекстный анализ для распознавания фигур и т. Д.

В любом случае, спасибо за все ссылки, а также за указание направления в сторону NumPy / SciPy.

Ответы [ 2 ]

5 голосов
/ 27 октября 2011

Выезд imgSeek :

imgSeek - это коллекция бесплатных изображений с открытым исходным кодом. проекты. Запрос (изображение, которое вы ищете) может быть выражен либо как набросок, нарисованный пользователем, либо как другое изображение, которое вы поставка (или изображение в вашей коллекции). Алгоритм поиска составляет использование многократного вейвлет-разложения запроса и базы данных изображения.

2 голосов
/ 09 апреля 2010

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

Если вы хотите сохранить простоту, вы можете сначала уменьшить количество цветов и разрешение, а затем рассчитать расстояние.

...