计算人类如何感知不同颜色之间的相似性

Bas*_*sic 10 algorithm comparison colors .net-4.0

我正在一个网站上,用户可以使用(在许多其他方面)rgb 0-255范围内的任何颜色来描述物理对象.我们提供一些简化的调色板,方便点击,但需要全色轮.

在幕后,其中一个过程比较对象的两个用户描述并对它们进行相似性评分.

我想要做的是得到两种颜色在人类感知方面有多相似的分数.基本上,算法需要确定挑选2种不同颜色的2个人是否可以描述同一个对象.因此,浅红色 - >红色应该是100%,大多数灰色阴影将是100%彼此等,但红色 - >绿色绝对不是匹配.

为了更好地了解算法是如何工作的,我将每个色调的灰度和3个强度与集合中的每个其他颜色进行了对比,并且表示没有匹配(0%)与黑色,视觉上相同(100%)与白色和灰度表示中间值.

我的第一个(非常简单的方法)是简单地将RGB值视为颜色立方体中的坐标,并计算它们之间的距离(矢量的大小).

这引出了一些关于黑色 - > 50%灰色比(例如)黑色 - > 50%蓝色更大的问题.经过数百次比较并要求反馈,这似乎与人类感知不相符(如下所示)

方法1

方法2将RGB值转换为HSV.然后,我在色调上产生了80%的分数,其余的20%在Sat/Lum上.这似乎是迄今为止最好的方法,但仍然会引发一些奇怪的比赛

方法2

方法3是混合的尝试 - HSL计算值但最终得分基于HSL彩色圆柱体空间中的2种颜色之间的距离(如在3D极坐标中).

方法3

我觉得我必须重新发明轮子 - 这肯定以前做过了吗?我在Google上找不到任何体面的例子,因为你可以看到我的方法还有待改进.

所以,我的问题是:

有没有标准的方法来做到这一点?如果是这样,怎么样?如果没有,有人可以建议一种方法来改善我的方法吗?如果需要,我可以提供代码片段但是由于3天的调整而被警告它目前很麻烦.

解决方案(Delta E 2000): 使用下面提供的建议,我实现了一个Delta E 2000比较器.我不得不将加权值调整得相当大 - 我不是在寻找不知不觉但却没有太大差异的颜色.如果有人感兴趣,产生的情节如下......

DeltaE2000

Jer*_*fin 4

有六种左右的可能性。EasyRGB有一个专门介绍它们的页面。在列出的这些中,DeltaE 2000 可能与人类感知的相关性最好,而且计算起来也极其复杂。Delta CMC对于一半的代码几乎同样有效(尽管计算仍然不是完全微不足道)。