1

我一直在尝试将 GIMP (GEGL) 的一些图层混合模式实现到 Python。目前,我陷入了减法混合模式。根据文档Subtract = max(Background - Foreground, 0). 然而,在 GIMP 中用Background image = (205,36,50)和做一个简单的测试Foreground image = (125,38,85),得到的合成图像/颜色(170, 234, 0)与上面的数学不太相符。

据了解,Subtract 不使用 Alpha Blending。那么,这可能是一个合成问题吗?或者减法遵循不同的数学?更多细节和背景可以在单独的SO问题中找到。

编辑 [14/10/2021]:我尝试将此图像作为我的来源。对范围内归一化的图像执行以下步骤[0, 1]

  1. 应用了颜色减淡(之前没有进行转换sRGB -> linear RGB)并从我的实现中获得了与 GIMP 结果匹配的结果
  2. sRGB -> linear RGB颜色减淡和源图像的转换。[参考]
  3. 应用减法混合Background = Colour DodgeForeground = Source Image
  4. 重新转换linear RGB-> sRGB

我从 POC获得这个。左 RGB 三元组:(69,60,34);右 RGB 三元组:(3,0,192)。和 GIMP结果。左 RGB 三元组:(69,60,35);右 RGB 三元组:(4,255,255)

4

1 回答 1

0

如果您正在查看该0 ➞ 255范围内的通道值,则它们可能经过伽马校正。操作可能是这样完成的:

  • 0.0 ➞ 1.0使用类似的东西将每一层转换为范围内的“线性光”
L = ((V/255) ** gamma) (*)
  • 应用“差异”公式
  • 将结果转换回伽马校正:
V = (255 * (Diff ** (1/gamma)))

红色通道获得gamma=2.2170,但我不明白为什么绿色通道获得 234。

(*) 对于非常低的值 IIRC,实际公式有一个特殊情况。

于 2021-10-13T09:20:00.530 回答