Фон: у меня есть изображения, которые мне нужно сравнить на предмет различий. Изображения большие (порядка 1400x9000 пикселей), сгенерированные машиной и сильно ограниченные (снимки экрана определенного фрагмента линейного пользовательского интерфейса), и, как ожидается, будут почти идентичны, с различиями, являющимися одной из следующих трех возможностей:
- В изображении 1 отсутствует изображение раздела 2
- В изображении 1 отсутствует изображение раздела 2 имеет
- Оба изображения имеют заданный раздел, но его содержание отличается
Я пытаюсь создать инструмент, который подчеркивает различия для рецензента-человека, по сути, это версия изображения линейно-ориентированного diff. С этой целью я пытаюсь сканировать изображения построчно и сравнивать их, чтобы решить, идентичны ли линии. Моей конечной целью является фактический вывод, похожий на diff, где он может обнаружить, что разделы отсутствуют / добавлены / отличаются, и синхронизировать изображения как можно скорее для оставшихся частей идентичного содержимого, но для первого среза япереходя к более простому подходу, когда два изображения накладываются друг на друга (альфа-смешивание), а линии, которые отличались друг от друга, выделяются определенным цветом (т. е. альфа-смешивается с третьей линией сплошного цвета). Сначала я попробовал использовать Python Imaging Library, но это было на несколько порядков медленнее, поэтому я решил попробовать vips
, что должно быть намного быстрее. Тем не менее, я абсолютно не знаю, как выразить то, что я после использования vips
операций. Псевдокод для более простой версии был бы по существу:
out = []
# image1 and image2 are expected, but not guaranteed to have the same height
# they are likely to have different heights if different
# most lines are entirely white pixels
for line1, line2 in zip(image1, image2):
if line1 == line2:
out.append(line1)
else:
# ALL_RED is a line composed of solid red pixels
out.append(line1.blend(line2, 0.5).blend(ALL_RED, 0.5))
Я использую pyvips
в своем проекте, но меня также интересует код, использующий обычную vips
или любые другие привязки, так какоперации передаются и легко переводятся на диалекты.
Редактировать : добавление образцов изображений по запросу
Редактировать 2 : полноразмерные изображения с отсутствующими / добавленными / измененными разделами: