在 Lab、Hcl 或任何感知均匀的颜色系统中改变色调和亮度

Posted

技术标签:

【中文标题】在 Lab、Hcl 或任何感知均匀的颜色系统中改变色调和亮度【英文标题】:Changing hue and lightness in Lab, Hcl or any perceptually uniform color system 【发布时间】:2013-01-30 12:56:27 【问题描述】:

在 HSL 颜色空间中更改色调、饱和度和亮度非常容易。 见this javascript implementation for example。

生成配色方案也很容易,例如:类比色、单色、三色、四色等。 见this javascript implementation。

问题在于 HSL 颜色系统在感知上并不统一。 实际上这是一个真正的问题。

如果你不知道我在说什么,没关系。 阅读:here 和 here。 (这两篇文章很短但很有价值,你真的应该阅读它们。

解决方案是使用感知一致的色彩空间,例如:CieLab、CieLuv 或 Hcl。

问题是这些色彩空间也有超出色域的颜色(无法显示的颜色)。

要在 javascript 中使用不同的颜色空间,请查看 chroma.js 或 chromatist。

在这个小小的介绍之后,这里是我的实际问题:

我想生成感知上一致的配色方案(类似的、三色的、四色的、互补色等)。正如我在 Hsl 中提到的,它很简单:例如,要生成一个三元组方案,我只需将 HUE 旋转 120,然后使用 240,我就有一个三元组方案。

嗯,在 CieLab、Hcl 或 CieLuv 中,这并不是那么简单。在 Hcl(色调、色度、亮度)中,如果我将色调旋转 120 级而不改变色度和亮度,则生成的颜色可能无法显示(将在 RGB 空间之外)。

让我们总结一下问题:

如何在感知一致的颜色系统(如 CieLab、Hcl、CieLuv 或任何其他感知一致的颜色空间)中生成配色方案?

我想在javascript中实现这个,但基本上我想找到方法,所以问题与语言无关。

我希望我们能一起找到一个聪明的方法:)

【问题讨论】:

这里不合适。而是问一群色彩科学家。您说它与语言无关的事实意味着它在这里是 OT。 与其称它们为黑洞,我建议使用常见的短语来解决这个问题,即这些颜色超出了给定集合的范围。 最后,你需要更清楚地定义你的目标是什么,在像实验室这样的空间中的配色方案。一旦你这样做了,解决方案通常会很明显。但是如果没有这个定义,这个问题显然是不可能的,帮助你定义这个定义的人肯定是色彩科学家。再说一遍,这里是 OT。 木片,我明白了!冷静下来。您在四个 cmet 中解释说这是题外话,您投了反对票,并投票结束。感谢您表达您的观点,现在让社区来决定我的问题是否会被关闭。是的,这不是一个“严格编程”的问题,但也许程序员可以帮我找到一个“算法”。我明白你的意思,你不需要再写十几个 cmets。做得更好:今天是情人节! 仇恨是怎么回事?这是一个很好的问题,有很好的参考。甚至是解决方案 【参考方案1】:

最后我基于 HUSL(Human Friendly HSL)色彩空间解决了这个问题。这个色彩空间在感知上并不完全一致,但非常接近。

您可以在这里了解更多信息:

http://boronine.com/husl/

【讨论】:

以上是关于在 Lab、Hcl 或任何感知均匀的颜色系统中改变色调和亮度的主要内容,如果未能解决你的问题,请参考以下文章

PS 怎么把这图的颜色变均匀

怎样用C语言实现图片的RGB颜色空间向Lab颜色空间的转化??

Qt QScrollBar 改变背景颜色

HLS、CIEL*a*b*色彩空间

H3C Cloud Lab 安装与调试

HCL安装和使用模拟器中遇到的问题