Получите разницу между двумя изображениями как прозрачное изображение в GIMP

21

У меня есть два изображения , Aи Bкоторые похожи во многих регионах.

Я хочу создать изображение Cтак, чтобы

B = C on top of A

где Cдолжно быть как можно более прозрачным. on top ofнормальное наложение слоя.

Так Cчто какая-то разница между Aи B. Если Aи Bидентичны, то Cполностью прозрачны. Если Aи Bочень сильно отличаются, то их Cбудет почти идентично B.

cheesus ТАК перестать вредить Монике
источник
Есть отличный ответ на этот вопрос о переполнении стека, в котором используется ImageMagick: stackoverflow.com/questions/5132749/…
AB

Ответы:

23

Вы можете использовать режим «разностного» слоя, чтобы создать маску слоя, и применить его к B следующим образом:

  1. Откройте оба изображения в виде слоев, A снизу, B сверху
  2. В диалоговом окне слоя пометьте режим слоя B как «разность». Теперь вы должны увидеть изображение в основном черным, если изображения похожи, а цветные области обозначают области, которые отличаются. Эти цвета, однако, не будут соответствовать цветам B, как вы хотите
  3. Правка-> Копировать видимый, чтобы получить копию рассчитанного эффекта на B
  4. Дублируйте слой B, измените его режим на «Нормальный» (назовем этот слой C)
  5. В меню «Слои» добавьте маску слоя в C (Layer-> Mask-> Add Layer Mask).
  6. С выбранной маской вставьте содержимое, скопированное на шаге 3 (edit-> paste).
  7. Прикрепите вставленное содержимое к маске слоя (layer-> Anchor layer)

Вот и вы - сделайте слои A и B невидимыми, и вы должны быть очень близки к тому, что вы хотите. Дальнейшие операции над маской слоя (я рекомендую использовать Цвет-> Кривая) могут отрегулировать непрозрачность / прозрачность областей на слое С.

Обновление Недавно я ответил на вопрос, аналогичный этому, в Stackoverflow, где OP хотел выполнить задачу программно (используя Python + Python-imaging-library) - я опубликовал полную программу по этому вопросу, и она может быть полезна для всех заинтересован в этом ответе.

jsbueno
источник
On the layer's dialog, mark B's layer mode as "difference". Что простите? Я смотрю в окно инструмента Слои, и если щелкнуть правой кнопкой мыши на слое B, я не вижу ничего похожего на a layer mode. Ближе всего я нашел Add Layer Mask, но я не думаю, что это то, что вы имеете в виду. Использование v2.8.22.
Адриан
с выбранным слоем режим слоя можно выбрать в раскрывающемся списке в верхней части диалогового окна слоев, а не в меню, вызываемом правой кнопкой мыши.
Jsbueno
У меня небольшая путаница или проблемы с шагом 6 - кажется, что он вставляет содержимое в новый слой, даже с выбранной «маской C», создавая четвертый слой с именем «Плавающее выделение (вставленный слой)», который смещен с исходной позиции - так оно и должно выглядеть?
Код жокея
Это «плавающее выделение», пока вы не «привязаете» его к месту назначения (Ctrl-H). Убедитесь, что маска активна, когда вы вставляете (Ctrl-V), иначе привязка может пойти в другое место.
ксеноид
5

Есть простой способ сделать это:

Откройте изображения в виде двух слоев, запустите «Фильтры» - «Анимация» - «Оптимизировать» («Разница»), и вы получите то же самое результирующее изображение, которое теперь состоит из нижнего слоя и слоя сравнения поверх него.

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

  • Удалить альфа-канал на обоих слоях (действие в контекстном меню)

Изображения получат белый фон, но не волнуйтесь, мы отменим это позже.

  • Фильтры - Анимация - Оптимизация (Разница)

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

  • Layer - слой к размеру изображения
  • Редактировать - Копировать (Ctrl + C)
  • Вернуться к исходному изображению
  • Отменить, отменить, чтобы вернуть прозрачность нашим слоям
  • Редактировать - Вставить как - Новый слой
  • Alpha to Selection (в контекстном меню) на вставленном diff-слое
  • Удалить вставленный слой diff
  • Убедитесь, что выбран верхний слой и скопируйте с него (Ctrl + C)
  • Теперь у вас есть diff, просто вставьте его (Ctrl + V) и создайте из него новый слой.

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


PS Метод jsbueno не сработал для меня.

пользователь
источник
1

GIMP имеет режим кисти, который называется «Стирание цвета». Применение этой кисти, окрашенной цветом X, к определенному пикселю P1 создает пиксель P2 с пониженным альфа-каналом, в результате чего при смешивании P2 с пикселем с цветом X в обычном режиме получается пиксель P1. Тот же эффект, примененный к выбранной области или целому изображению, может быть достигнут с помощью действия «Color to Alpha» .

Режим кисти можно также применить к «Инструменту клонирования». В этом случае можно взять цвет из пикселей фонового изображения A и применить его к соответствующим пикселям результирующего изображения B. Оставленное изображение является требуемым изображением C.

В деталях создание образа C выглядит следующим образом:

  1. Поместите изображения A и B как слои (A ниже B).
  2. Дублируйте изображение B и назовите его C. Поместите его между A и B. Скрыть изображение B.
  3. Выберите «Clone Tool». На панели «Параметры инструмента» установите следующие параметры: Режим: «Стереть цвет»; Кисть: используйте острую круглую кисть («Твердость 100»). Размер: увеличьте размер кисти, чтобы легко закрасить все изображение сразу.
  4. Выберите слой и CTRL + в верхнем левом пикселе, чтобы выбрать место, из которого нужно клонировать, и запомните его положение (для увеличения 100% это будет (1,1), для 50% это будет (2,2) и т. Д.).
  5. Теперь выберите слой C и начните рисовать в левом верхнем углу и закройте все изображение, не поднимая кисть. Может показаться, что изображение не меняется. Но если вы скроете слой A, вы увидите, что слой C теперь содержит желаемое изображение.
  6. Результат проверки: покажите слой A и слой C. Переключите видимость слоя B, чтобы убедиться, что изображения выглядят одинаково. (Вы также можете выбрать режим «Разница» для слоя B, в этом случае вы должны получить абсолютно черное изображение.)

Примечание. Этот метод работает, как описано, если фоновое изображение непрозрачно. На прозрачных частях фонового изображения смешивание C в верхней части A выглядит иначе, чем на изображении B.

user2367602
источник