计算两个HSI颜色值之间的视觉颜色差异

6
我有两种HSI(色相、饱和度和强度)的颜色值,我想要一个数字来表示这两种颜色之间的视觉差异。色相是0到360之间的数字。饱和度为0到1,强度为0到1。
例如,我们考虑红色和蓝色,它们的饱和度为100%,强度为100%。 在这个网站上,通过输入以下文本可以显示颜色。
红色是: hsv 0, 100%, 100%
蓝色是: hsv 240, 100%, 100%
显然,这是两种非常不同的颜色,因此我可以尝试使用色相组件并计算色相的绝对差异来计算颜色之间的差异,其中色相的差值为120(360-240),因为360也等于0的色相。
问题出现在饱和度或强度非常暗或非常亮的情况下,考虑非常暗的红色和蓝色。
深红色是: hsv 0, 100%, 20%
深蓝色是: hsv 240, 100% 20%
显然,这两种颜色之间的视觉差异小于明亮的红色和蓝色,如果询问一个朋友“哪一组颜色最不同?”他们可能会说是顶部的鲜艳红蓝色。
我正在尝试计算两种颜色之间像人类注意到的那样的差异。如果一个人看着两个颜色a和b,然后看着两个颜色c和d,他会注意到哪些颜色最不同。首先,如果颜色很亮(但不要太亮),则差异基于色相。如果颜色太亮,比如白色,或者太暗,比如黑色,或者太灰,那么差异就会变小。
应该可以有一个函数diff,其中x=diff(a,b)和y=diff(c,d)产生x和y,我可以使用x和y来比较差异以找到最不同的颜色或最相似的颜色。

我怀疑这个问题没有确切的答案。你可以尝试使用RGB颜色空间,似乎更容易区分。 - xiaoyi
我进行了一些谷歌搜索,并找到了一个颜色差异算法http://www.emanueleferonato.com/2009/09/08/color-difference-algorithm-part-2/,此外还有一篇维基百科文章介绍了这种颜色差异http://en.wikipedia.org/wiki/Color_difference,肯定有很多方法可以解决这个问题。 - Phil
1
我在印刷/校对方面有专业背景,传统的计算颜色差异的方法是Delta E。您可以在这里找到维基百科文章:http://en.wikipedia.org/wiki/Color_difference - David van Driessche
@Phil 在将 RGB 转换为 HSI 时,只有当你在 RGB 中使用纯白色时才能获得100%的强度。因此,您关于红色和蓝色的示例是错误的。现在,采用 CieLAB 查找颜色之间的距离被普遍认为是更好的方法,但对于您的应用程序而言,在 HSI 中使用某些度量可能会受到影响。稍后我将提供一个回答来尝试说明这一点。 - mmgp
2个回答

2

WCAG2.0和1.0指南都提到了不同的颜色差异感知方程:

  1. 对比度比率 (http://www.w3.org/TR/2008/REC-WCAG20-20081211/Overview.html#contrast-ratiodef)

  2. 亮度差异和3. 颜色差异 (http://www.w3.org/TR/AERT#color-contrast)。

我尝试了Delta-e方法(http: //colormine.org/delta-e-calculator/),但它是准度量的,因此差异测量可能会因为您传递两种颜色的顺序而改变。如果您期望在您的示例中diff(a,b)始终等于diff(b,a),那么这不是您想要的(可能有不是准度量的不同算法,但我没有深入研究过该网站)。

我认为颜色差异度量是最接近匹配我的颜色差异度量期望的方法。对于您的示例,它将产生diff(a,b) > diff(c,d)。

你可以使用此网站上的工具自行测试:http://www.dasplankton.de/ContrastA/

1
一般的答案似乎是David van Driessche所说的,使用Delta E。我在这里找到了一些Java代码:https://github.com/kennyliou/GAI 这是对问题的回答,可能不是最好的答案。

我认为这并不是一个糟糕的答案,因为你试图计算人类感知,这也是校对工作流程中发生的事情。当你制作校样时,你试图制作出与预期最终产品相同的东西。而“相同”是由人类评判的,并且理论上使用Delta E值进行测量(或近似测量)。 - David van Driessche
根据你正在做的事情,要注意观察条件。在不同的光照条件下,人类对颜色的感知会有很大的差异(例如阳光和荧光灯)。光照条件可以显著地改变人类对颜色的认知(从而导致感知到的颜色差异)。甚至有些颜色在一种光照条件下看起来相同,在另一种光照条件下则不同(如果有兴趣,可以搜索“元色现象”)。 - David van Driessche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接