Режим наложения вычитания
Я пытался реализовать некоторые режимы наложения слоев из 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.