【问题标题】:Calculate how humans perceive similarity between different colours计算人类如何感知不同颜色之间的相似性
【发布时间】:2011-04-25 00:28:41
【问题描述】:

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

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

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

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

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

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

方法 2 将 RGB 值转换为HSV。然后,我生成了一个基于色调的 80% 的分数,另外 20% 的 Sat/Lum。这似乎是迄今为止最好的方法,但仍然会引发一些奇怪的匹配

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

我觉得我必须重新发明轮子——这肯定以前做过吗?我在谷歌上找不到任何像样的例子,你可以看到我的方法还有一些不足之处。

所以,我的问题是:

有没有标准的方法来做到这一点?如果是这样,怎么做?如果没有,任何人都可以提出一种改进我的方法的方法吗?如果需要,我可以提供代码 sn-ps,但请注意,由于 3 天的调整,它目前非常混乱。

解决方案(Delta E 2000): 使用下面提供的建议,我实现了一个Delta E 2000 比较器。我不得不将权重值调整得相当大——我不是在寻找难以察觉但差别不大的颜色。如果有人感兴趣,结果图如下...

【问题讨论】:

  • 您正在比较的颜色 - 它们来自图像,还是用户查看图像并选择具有代表性的颜色?我不清楚您是在比较数千/数百万像素值,还是少数用户选择的颜色......
  • 我正在比较 2 位用户选择的颜色来表示他们都见过的物理对象(其中一个人面前有这个对象,其中一个人以前见过它)。上面的图表是为了让我对算法输出有一点了解,所以我选取了一系列颜色,并将每种颜色与该范围内的所有其他值进行比较并绘制结果。
  • 澄清一下:实际上,系统允许每个用户在需要时选择多种颜色,但是使用相同的算法来比较所有颜色组合,并在计算时采用最佳的唯一匹配集最终分数 - 我认为这是一个超出理解问题所需的复杂程度,但可能很有趣:)
  • 是的,那个有点复杂! en.wikipedia.org/wiki/…
  • 非常有用的帖子!感谢您的解决方案 - 是否有代码的 github 存储库?

标签: algorithm .net-4.0 colors comparison


【解决方案1】:

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

【讨论】:

  • 感谢您的回答,这看起来很有希望。由于我对以这种方式处理颜色非常陌生,您能解释一下用于比较(E、C、H、CMC)的增量字母的含义这些是行业标准吗?
  • @Basiclife:是的,它们相当标准且众所周知——如果您记录(例如)您正在使用 Delta E 2000,大多数人不会知道计算的细节,但他们会知道它的用途。
  • 谢谢。我会看看实现它并回复你
  • 我实现了 Delta E 2K,它似乎在做我需要的事情。感谢您的帮助。如果您有兴趣,我已将结果图附加到问题中
  • @Basiclife:酷——看起来不错——情节也不错。
【解决方案2】:

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

【讨论】:

  • 谢谢,我会继续阅读,但要澄清一下:2 个用户从色轮中选择一种颜色来描述现实生活中的物体。我需要决定是否应将 2 种不同的颜色视为“足够接近以完全匹配”、“不匹配”或“不够接近以被视为完全匹配但至少模糊相似”(理想情况下为% 年龄)。是不是更清楚了?
  • 是的,可能没有“标准”解决方案,它可能只是归结为尝试不同的色彩空间。还可以考虑合并训练数据并了解可接受的距离。
  • 我会得出类似的结论 - 理想的方法是使用数百个人工生成的比较数据点来训练系统。不幸的是,在这种情况下,我没有时间/资源来做足够的训练来获得一个像样的数据集。
【解决方案3】:

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

【讨论】:

  • 有趣的方法——我之前在尝试做一些图像匹配时使用过神经网络(给我找一个看起来与此相似的图像......)并且取得了一定的成功。我没有考虑在这种情况下使用 NN,但它很可能是赢家。我会挖掘出旧代码,把它掸掉然后试一试 - 感谢您的好建议
  • 还有现成的多层感知器,例如neuroph.sourceforge.net
  • 最后,实施 Jerry 提出的 Delta E 2000 建议更快,但我打算在有机会进行比较时尝试 NN。再次感谢您的帮助
猜你喜欢
  • 2010-11-13
  • 1970-01-01
  • 2021-05-07
  • 2022-01-08
  • 2012-12-15
  • 2011-07-20
  • 2020-02-11
  • 2015-10-30
相关资源
最近更新 更多