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