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

10

我正在为一个网站工作,用户可以使用rgb 0-255范围内的任何颜色来描述物理对象。我们提供了一些简化的调色板以方便点击,但完整的颜色轮是必需的。

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

我尝试的是得到一个指标来衡量两种颜色在“人类感知”的角度下有多相似。基本上,算法需要确定如果两个人选择两个不同的颜色是否可能在描述同一个物体。因此,浅红->红应该是100%,大多数灰色调之间也会是100%,等等,但是红色->绿色绝对不匹配。

为了更好地了解算法的工作原理,我将灰度和每种色调的3个强度与集合中的每个其他颜色相比,并用黑色表示不匹配(0%),用白色表示视觉上相同(100%),用灰度表示中间值。

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

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

Method 1

方法2将RGB值转换为HSV。然后我基于80%的色调和其他20%的Sat / Lum生成得分。到目前为止,这似乎是最好的方法,但仍然会出现一些奇怪的匹配。

Method 2

方法3是一个混合尝试-计算了HSL值,但最终得分基于两种颜色在HSL颜色圆柱空间中(即3D极坐标)之间的距离。

方法3

我感觉自己必须重新发明轮子,肯定有人做过这个事情吧?我在Google上找不到任何好的例子,正如你所看到的,我的方法还需要改善。

因此,我的问题是:

有没有标准的方法来做到这一点?如果有,怎么做?如果没有,有人能提出一个改进我的方法的方式吗?如果需要,我可以提供代码片段,但要注意,由于调整了3天,它目前非常混乱。

解决方案(Delta E 2000):根据下面提供的建议,我已经实现了一个 Delta E 2000 比较器。我不得不调整权重值相当大 - 我不是在寻找颜色在视觉上几乎没有区别的东西,而是那些不太相似的颜色。如果有人感兴趣,下面是结果图...

DeltaE2000


你正在比较的颜色 - 它们来自图像吗?还是用户查看图像并选择代表性颜色?我不清楚您是否正在比较数千/数百万个像素值,还是少数用户选择的颜色... - YXD
我正在比较两个用户选择的颜色,以代表他们都看到过的物理对象(其中一个人在他们面前有这个物体,另一个人之前看到过它)。上面的图表是为了让我能够对算法输出有一点了解,所以我选取了一系列颜色,并将每种颜色与范围内的每个其他值进行比较并绘制结果。 - Basic
澄清一下:实际上,该系统允许每个用户选择多种颜色,如果他们认为需要的话。但是,在计算最终得分时,所有颜色组合都使用相同的算法进行比较,并且选择最佳的互斥匹配组合。我相信这是一个超出理解问题所需的复杂级别,但可能会很有趣 :) - Basic
1
这个有点复杂!http://en.wikipedia.org/wiki/Matching_(graph_theory)#Maximum_matchings_in_bipartite_graphs - YXD
1
非常有用的帖子!感谢您提供的解决方案 - 代码是否有 Github 存储库? - Hendekagon
抱歉,不行。这是为了某些专有内容而设计的。话虽如此,接受答案中链接的网站提供了示例代码,转换很容易,所以不应该需要太多工作。只需确保选择 Delta E 2000 页面即可。至于绘制图像,则只需选择一系列颜色进行测试,并将相似度作为灰度绘制在图像上。 - Basic
3个回答

4
有大约六种可能性。EasyRGB 有一个专门的页面介绍它们。在列出的选项中,DeltaE 2000 可能与人类感知最相关,并且计算也非常复杂。对于像一半的代码这样的东西,Delta CMC 几乎同样好(尽管计算仍然不完全简单)。

谢谢你的回答,看起来非常有前途。由于我在这方面处理颜色非常新手,你能解释一下比较中的Delta字母(E、C、H、CMC)的含义吗?这些是行业标准吗? - Basic
@Basiclife:是的,它们相当标准和著名--如果您记录(例如)您正在使用Delta E 2000,大多数人不会知道计算的细节,但他们会知道它的用途。 - Jerry Coffin
谢谢。我会考虑实现它并回复您。 - Basic
我已经实现了 Delta E 2K,并且它看起来正好符合我的需求。感谢您的帮助。如果您有兴趣,我已经在问题中附上了结果图。 - Basic
1
@Basiclife:很酷——看起来相当不错——情节也很好。 - Jerry Coffin

1

谢谢,我会阅读的,但是为了澄清:2个用户从色轮中选择一种颜色来描述现实生活中的物体。我需要决定这2种不同的颜色是否应该被认为是“足够接近完全匹配”,“不匹配”或“不足以被认为是完全匹配但至少有些相似”(最好作为一个百分比)。这样清楚吗? - Basic
好的,恩,可能没有“标准”解决方案,可能只是需要尝试不同的颜色空间。还要考虑加入训练数据并学习可接受的距离是多少。 - YXD
我得出了类似的结论 - 最理想的方法是使用数百个由人生成的比较数据点来训练系统。不幸的是,在这种情况下,我没有足够的时间/资源进行足够的训练以获得合适的数据集。 - Basic

1

如果你正在尝试实验,这听起来像是一个神经网络方法的典型例子,因为它涉及到创建一个决策规则,模拟人类感知。一个具有六个输入(r、r'、g、g'、b、b')和一个输出(is_similar)的神经网络可以很容易地通过使用自己对相似性的感知作为训练源进行训练!


有趣的方法 - 我以前尝试过使用神经网络进行一些图像匹配(找到与此相似的n张图像...),取得了一些成功。我之前没有考虑在这种情况下使用神经网络,但它可能会是一个赢家。我将找出旧代码,清理一下,并尝试一下 - 感谢您提供的好建议。 - Basic
还有现成的多层感知器,例如http://neuroph.sourceforge.net/。 - Antti Huima
最后,按照Jerry的建议实施Delta E 2000更快,但我打算在有机会时尝试使用神经网络进行比较。再次感谢你的帮助。 - Basic

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