减去混合模式
Subtract Blending Mode
我一直在尝试将 GIMP (GEGL) 的一些图层混合模式实现到 Python。目前,我停留在减法混合模式。根据 documentation、Subtract = max(Background - Foreground, 0)
。但是,在 GIMP 中使用 Background image = (205,36,50)
和 Foreground image = (125,38,85)
进行简单测试,得到的复合 image/colour 变为 (170, 234, 0)
,这与上面的数学不完全一致。
据了解,Subtract 不使用 Alpha Blending。那么,这可能是一个合成问题吗?或者减法遵循不同的数学?更多详细信息和背景可以在单独的 SO 问题中找到。
编辑 [14/10/2021]:
我尝试使用 this 图像作为我的来源。对 [0, 1]
:
范围内归一化的图像执行以下步骤
- 应用颜色减淡(之前没有从
sRGB -> linear RGB
进行转换)并从我的实现中获得 this 与 GIMP 结果相匹配。
sRGB -> linear RGB
对颜色减淡和源图像进行转换。 [Reference]
- 应用减法与
Background = Colour Dodge
和 Foreground = Source Image
混合
- 重新转换
linear RGB-> sRGB
我得到this from POC. Left RGB triplet: (69,60,34); Right RGB triplet: (3,0,192). And the GIMP result。左 RGB 三元组:(69,60,35);右 RGB 三元组:(4,255,255)
如果您正在查看 0 ➞ 255
范围内的通道值,则它们可能经过了伽玛校正。操作可能是这样的:
- 使用
之类的方法将每一层转换为 0.0 ➞ 1.0
范围内的“线性光”
L = ((V/255) ** gamma) (*)
- 应用“差异”公式
- 将结果转换回伽马校正后的结果:
V = (255 * (Diff ** (1/gamma)))
使用 gamma=2.2
,您在红色通道上获得 170,但我不明白为什么您在绿色通道上获得 234。
(*) 对于非常低的值 IIRC,实际公式有一个特例。
我一直在尝试将 GIMP (GEGL) 的一些图层混合模式实现到 Python。目前,我停留在减法混合模式。根据 documentation、Subtract = max(Background - Foreground, 0)
。但是,在 GIMP 中使用 Background image = (205,36,50)
和 Foreground image = (125,38,85)
进行简单测试,得到的复合 image/colour 变为 (170, 234, 0)
,这与上面的数学不完全一致。
据了解,Subtract 不使用 Alpha Blending。那么,这可能是一个合成问题吗?或者减法遵循不同的数学?更多详细信息和背景可以在单独的 SO 问题中找到。
编辑 [14/10/2021]:
我尝试使用 this 图像作为我的来源。对 [0, 1]
:
- 应用颜色减淡(之前没有从
sRGB -> linear RGB
进行转换)并从我的实现中获得 this 与 GIMP 结果相匹配。 sRGB -> linear RGB
对颜色减淡和源图像进行转换。 [Reference]- 应用减法与
Background = Colour Dodge
和Foreground = Source Image
混合
- 重新转换
linear RGB-> sRGB
我得到this from POC. Left RGB triplet: (69,60,34); Right RGB triplet: (3,0,192). And the GIMP result。左 RGB 三元组:(69,60,35);右 RGB 三元组:(4,255,255)
如果您正在查看 0 ➞ 255
范围内的通道值,则它们可能经过了伽玛校正。操作可能是这样的:
- 使用 之类的方法将每一层转换为
0.0 ➞ 1.0
范围内的“线性光”
L = ((V/255) ** gamma) (*)
- 应用“差异”公式
- 将结果转换回伽马校正后的结果:
V = (255 * (Diff ** (1/gamma)))
使用 gamma=2.2
,您在红色通道上获得 170,但我不明白为什么您在绿色通道上获得 234。
(*) 对于非常低的值 IIRC,实际公式有一个特例。