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

时间:2011-04-25 00:28:42

标签: algorithm .net-4.0 colors comparison

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

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

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

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

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

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

Method 1

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

Method 2

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

Method 3

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

所以,我的问题是:

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

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

DeltaE2000

3 个答案:

答案 0 :(得分:4)

有六种左右的可能性。 EasyRGB有专门针对他们的页面。在列出的那些中,DeltaE 2000可能与人类感知具有最佳相关性 - 并且计算起来也非常复杂。 Delta CMC 几乎对于像代码的一半这样的东西是好的(虽然计算仍然不是完全无关紧要的。)

答案 1 :(得分:1)

我不是100%清楚您的问题是如何设置的,但您可能需要阅读:Normalized Cross Correlation,以及LabCIEXYZ色彩空间。

答案 2 :(得分:1)

这听起来像是基于神经网络的方法的一个主要示例(如果您处于实验模式:),因为它是关于创建模仿人类感知的决策规则。具有六个输入(r,r',g,g',b,b')和一个输出(is_similar)的神经网络可以通过使用例如你自己对相似性的看法作为训练源!