常见的 RGB 颜色混合与绘画颜色的混合有很大不同,
它是光的混合而不是颜料的混合。
例如:
Blue (0,0,255) + Yellow (255,255,0) = Grey (128,128,128)
(应该是蓝色+黄色=绿色)
是否有任何已知的颜色混合算法可以像混合真实颜色一样工作?
我的方法
我已经尝试过以下操作:
将两种颜色转换为 HSV和混合色调(乘以根据饱和度计算的系数),
以及饱和度和价值通道的简单平均值。然后我计算了两者的平均亮度
颜色并调整生成的颜色以匹配此亮度。
这工作得很好,但色调混合有时是错误的,例如。 G。:
Red (Hue 0°) + Blue (Hue 240°) = Green (Hue 120°)
我发现有时我需要将色调值移动 360°(当
色调大于180°)。
Red (Hue 360°) + Blue (Hue 240°) = Magenta/fuchsia (Hue 300°)
但这种转变也不是很好,例如:
Cyan (Hue 179°) + Red (Hue 0°) = Hue 89.5°
Cyan (Hue 181°) + Red (Hue 0°) --> shifting is performed (the difference is greater than 180°)
Cyan (Hue 181°) + Red (Hue 360°) = Hue 270.5°
(色调 179 + 红色)和(色调 181 + 红色)会产生两种完全不同的颜色。
Then 我尝试了 CIE Lab 色彩空间(如在 Photoshop 中),其设计更接近人类感知颜色的方式。
我只对相应的两个通道使用了简单的平均值,但结果并不令人满意,
例如,我从蓝色 (98, -16, 93) 和黄色 (30, 68, -112) 中得到粉色 (64, 26, -9.5)。这些系数
取自 Photoshop。
也许如果我使用一些与平均不同的操作,它可以工作,但是
我不知道是什么。
CMYK 也不起作用,结果与 RGB 或 LAB 中的结果一样。
看起来既不是微不足道的加法,也不是微不足道的减法在任何这些颜色空间中进行颜色混合都会产生自然的结果。
工作实施
Krita – 绘画混音器
光栅图形编辑器 Krita 在某些时候实现了更真实的颜色混合:http://commit-digest.org/issues/2007-08-12/(绘画混音器插件)
他们表示,这是第一个使用库贝尔卡和芒克方程描述颜料行为的特殊技术的公共应用程序。
这是 Krita 混色的视频:https://www.youtube.com/watch?v=lyLPZDVdQiQ
五十三的论文
还有有关 iOS 版 Paper 应用程序中的颜色混合的文章由开发五十三。他们描述了他们如何在该领域进行创新和实验,并提供了混合蓝色和黄色产生绿色的样本。然而,那里并没有真正描述实际的过程或算法。
Quoting:
“在寻找良好的混合算法时,我们最初尝试在各种颜色空间之间进行插值:RGB、HSV 和 HSL,然后是 CieLAB 和 CieLUV。结果令人失望,”Chen 说道。 “我们知道红色和黄色应该产生橙色,或者红色和蓝色应该产生紫色 - 但无论您使用什么颜色空间,都没有任何方法可以得到这些颜色。有一条工程公理:做最简单的事情可能可行。好吧,我们现在已经尝试了最简单的方法,但他们感觉不太对。”
看起来和 Krita 一样,Paper 实现了 Kubelka-Munk 模型:
[...] Kubelka-Munk 模型的每种颜色至少有 6 个值,包括每种 RGB 颜色的反射和吸收值。 “虽然屏幕上颜色的外观可以在三维空间中描述,但颜色的混合实际上是在六维空间中发生的,”FiftyThree 联合创始人兼首席执行官 Georg Petschnigg 解释道。库贝尔卡-蒙克的论文使团队能够将美学问题转化为数学框架。 [...]
从所有这些信息来看,似乎基于 Kubelka-Munk 模型的实现可能是前进的方向,并提供更接近现实的结果。
尽管它看起来像一个复杂的过程,但我还没有看到太多关于如何实现这样的事情的好信息。
相关问题
这些问题是在此问题之后发布的,都与同一件事有关。
他们都没有真正的答案。
- RGB 混合颜色的计算
- 在绘制颜色的颜色空间中查找其他两个颜色之间的算法
- 像 Krita 一样实现 Kubelka-Munk 来像油漆一样混合颜色
其他相关链接和资源
- 库贝尔卡-蒙克在 Twitter 上的搜索
- Mixing paints (!!Con 2016) by Diana Liao
- 受绘画启发的可视化颜色混合和合成(N. Gossett、B. Chen)