计算两个HSI颜色值之间的表观颜色差异

时间:2012-12-21 12:55:26

标签: colors rgb hsv hsl

我在HSI(色调饱和度和强度)中有两个颜色值,我想要一个代表两种颜色之间视觉差异的数字。 Hue是0到360之间的数字。饱和度为0到1,强度为0到1。

让我们考虑例如饱和度为100%的红色和蓝色以及100%的强度。 At this website is a way to display the color by entering in the following text.

红色是: hsv 0,100%,100%

蓝色是: hsv 240,100%,100%

enter image description here

显然这是两种截然不同的颜色,因此我可以尝试计算颜色之间差异的一种简单方法是使用Hue组件并计算色调的绝对差值,因为360是360(360-240)色调也等于0。

问题出现在饱和度或强度很暗或很暗的地方,考虑一个非常深的红色和蓝色。

深红色是: hsv 0,100%,20%

深蓝色是: hsv 240,100%20%

enter image description here

显然,这两种颜色之间的视觉差异小于鲜艳的红色和蓝色,正如人们要求比较这些差异一样。我在这里的意思是,问一个朋友“哪一对颜色最不同?”他们可能会说顶部鲜红的蓝色。

我正试图计算人类会注意到的两种颜色之间的差异。如果人类看到两种颜色a和b,然后是两种颜色c和d,他可以注意到哪些颜色最不同。首先,如果颜色是明亮的(但不是太亮),那么差异是基于色调的。如果颜色太亮,如白色或太暗,如黑色或太灰,则差异较小。

应该可以有一个函数diff,其中x = diff(a,b)和y = diff(c,d)产生x和y,我可以使用x和y来比较差异以找到最多不同的颜色或最不同的颜色。

2 个答案:

答案 0 :(得分:2)

WCAG2.0和1.0指南都参考了关于色差感知的不同方程:

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

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

  3. 我尝试了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 :(得分:1)

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

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