"Diff" изображение с помощью ImageMagick

Как я могу получить разницу между двумя изображениями? У меня есть исходное изображение. Кто-то написал точный дубликат исходного изображения. Теперь мне нужно сравнить оригинал с написанным на изображении и извлечь только текст в формате изображения.

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

Возможно ли это с помощью ImageMagick? Я знаю, что есть способы получить статистическую разницу между изображениями, но это не то, что я ищу.

Ответ 1

Моими избранными являются эти два:

 compare image1 image2 -compose src diff.png
 compare image1 image2 -compose src diff.pdf

Единственное различие между двумя приведенными выше командами: первый показывает визуальную разницу между двумя изображениями как PNG файл, второй - как PDF.

Полученный файл diff отображает все пиксели, которые отличаются красным цветом. Те, которые неизменны, выглядят белыми.

Короткий и сладкий.

Обратите внимание: ваши изображения нуждаются в не. Вы можете даже смешивать JPEG, TIFF, PNG - при одном условии: изображения должны быть одного размера (размер изображения в пикселях). Формат вывода определяется расширением выходного файла.

Если вам по какой-то причине требуется более высокое разрешение, чем стандартное (72 dpi), а затем добавьте соответствующий параметр -density:

 compare -density 300 image1 image2 -compose src diff.jpeg

Иллюстрированные примеры

Вот несколько иллюстраций результатов для вариантов указанной команды. Примечание: два сопоставленных файла были даже PDF файлы, поэтому он также работает с ними (пока они являются 1-пейджерами)!


Слева: Изображение с текстом   Центр: Исходное изображение   & strong > Вправо: Различия (= текст) в красных пикселях. Только красные разностные пиксели, идентичные пиксели белые

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
        diff-compose-default.pdf

Это та самая команда, которую я предложил ранее выше.


Слева: Изображение с текстом   Центр: Исходное изображение   Вправо: Различия в пикселях "seagreen". Только пиксели с сиреневым оттенком, идентичные пиксели белые

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
       -highlight-color seagreen \
        diff-compose-default.pdf

Эта команда добавляет параметр, чтобы сделать разницу пикселей "seagreen" вместо красного по умолчанию.


Слева: Изображение с текстом   Центр: Исходное изображение   Вправо: Синий diff (но с некоторым контекстным фоном) Только синие разностные пиксели, первая из сравниваемых изображений в качестве фона с подсветкой l

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -highlight-color blue \
        diff-compose-default.pdf

Эта команда удаляет часть -compose src - результатом является поведение по умолчанию compare, которое сохраняет в качестве освещаемого фона первое из двух разнесенных изображений. (На этот раз с добавленным параметром, чтобы пиксели diff отображались синим цветом.)

Ответ 2

В то время как compare отлично подходит для многих приложений, я обнаружил, что иногда я предпочитаю другой подход, особенно при сравнении изображений, которые в основном оттенки серого:

convert '(' file1.png -flatten -grayscale Rec709Luminance ')' \
        '(' file2.png -flatten -grayscale Rec709Luminance ')' \
        '(' -clone 0-1 -compose darken -composite ')' \
        -channel RGB -combine diff.png

Идея следующая: преобразуйте как file1.png, так и file2.png в оттенки серого. Затем trat первый как красный канал результирующего изображения, второй - зеленый. Синий канал формируется из этих двух с помощью оператора darken compose, что по существу означает принятие минимума.

Таким образом, белые изображения обоих изображений остаются белыми. Черные изображения обоих изображений остаются черными. Вещи, белые на первом изображении, но черные во втором красном цвете, а во втором - белые, а черные - зеленые.

Результат дает вам красивое цветовое изображение, в котором вы можете легко связать зеленый цвет с первым входом и красным со вторым. Вот пример, где я использую это, чтобы сравнить результат из LaTeX с тем, что из KaTeX (до того как я исправлена ​​некоторая ошибка, чтобы сделать это лучше):

enter image description here

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