Режим наложения вычитания

Я пытался реализовать некоторые режимы наложения слоев из GIMP (GEGL) в Python. В настоящее время я застрял в режиме наложения с вычитанием. Согласно документации , Subtract = max(Background - Foreground, 0). Однако, выполнив простой тест в GIMP с Background image = (205,36,50) а также Foreground image = (125,38,85), результирующее составное изображение / цвет становится (170, 234, 0) что не совсем соответствует математике выше.

Согласно пониманию, Subtract не использует альфа-смешение. Итак, может ли это быть проблема композитинга? Или вычитание следует другой математике? Более подробную информацию и предысторию можно найти в отдельном вопросе SO .

1 ответ

Если вы смотрите на значения каналов в 0 ➞ 255диапазон, они, вероятно, скорректированы по гамма-характеристике. Возможно, операция выполняется так:

  • преобразовать каждый слой в "линейный свет" в 0.0 ➞ 1.0 диапазон, используя что-то вроде
      L = ((V/255) ** gamma) (*)
  • применить формулу "разницы"
  • преобразовать результат обратно в гамма-исправленный:
      V = (255 * (Diff ** (1/gamma)))

С участием gamma=2.2 вы получаете 170 для красного канала, но я не понимаю, почему вы получаете 234 на зеленом канале.

(*) Фактическая формула имеет особый случай для очень низких значений IIRC.

Другие вопросы по тегам