【发布时间】:2012-12-21 12:55:26
【问题描述】:
我在 HSI(色相饱和度和强度)中有两个颜色值,我想要一个代表两种颜色之间视觉差异的数字。色调是介于 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%
显然,这是两种截然不同的颜色,因此我可以尝试计算颜色之间差异的一种简单方法是使用色调分量并计算色调的绝对差异,即 120 (360-240),因为 360 是色调也等于 0。
问题出现在饱和度或强度非常暗或非常亮的情况下,考虑非常深的红色和蓝色。
深红色是: hsv 0, 100%, 20%
深蓝色是: 单纯疱疹病毒 240, 100% 20%
显然,这两种颜色之间的视觉差异小于明亮的红色和蓝色,如果被要求比较差异,人类会这样说。我的意思是,问朋友“哪一对颜色最不同?”他们可能会说顶部是亮红色的蓝色。
我正在尝试计算人类会注意到的两种颜色之间的差异。如果一个人看两种颜色 a 和 b,然后看两种颜色 c 和 d,他会注意到哪些颜色最不同。首先,如果颜色很亮(但不是太亮),那么差异是基于色调的。如果颜色太亮(例如白色)或太暗(例如黑色或太灰),则差异会更小。
应该有一个函数 diff ,其中 x=diff(a,b) 和 y=diff(c,d) 产生 x 和 y,我可以使用 x 和 y 比较差异以找到最不同的颜色或至少不同的颜色。
【问题讨论】:
-
我怀疑是否有确切的答案。你可以试试RGB色彩空间,好像更容易分辨。
-
我做了一些谷歌搜索,发现了一个色差算法emanueleferonato.com/2009/09/08/…,还有一篇关于这个色差的维基百科文章en.wikipedia.org/wiki/Color_difference一定有很多方法可以解决这个问题
-
我有印刷/打样方面的专业背景,计算色差的传统方法是 Delta E。您可以在此处找到一篇维基百科文章:en.wikipedia.org/wiki/Color_difference
-
@Phil In RGB -> HSI,如果只有在 RGB 中有纯白色时才能获得 100% 强度。所以你关于红色和蓝色的例子是错误的。现在,去 CieLAB 查找颜色之间的距离通常被认为是一种更好的方法,但对于您的应用程序,在 HSI 中使用某些度量可能会受到影响。我稍后会附上一个试图证明这一点的答案。