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 比较差异以找到最不同的颜色或最少不同的颜色。

4

2 回答 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/

于 2015-01-25T00:07:19.687 回答
1

一般的答案似乎是 David van Driessche 所说的,使用 Delta E。我在这里找到了一些 Java 代码:https ://github.com/kennyliou/GAI

这是问题的答案,可能不是最好的答案。

于 2012-12-21T14:46:15.053 回答