鉴于颜色的RGB成分,我如何判断它是否被人类视为灰色?

时间:2013-04-25 07:47:04

标签: colors

一种简单的方法是,当RGB分量相等时,它们会形成灰色。 然而,这不是整个故事,因为如果它们只有微小的差别,它们仍然会显得灰暗。

假设观众有一个健康的色彩视觉,我如何判断给定的值是否会被视为灰色(可能是“灰度”的可调阈值水平)?

2 个答案:

答案 0 :(得分:4)

一种相对简单的方法是将RGB值转换为HSV color space并在saturation组件上使用阈值,例如“如果饱和度<0.05,那么'几乎是灰色',否则不是灰色的”

根据定义,

饱和度 实际上是“灰度/色彩”。

这种方法比使用R,G和B通道之间的差异准确得多(因为人眼在浅色和深色上感知饱和度不同)。另一方面,将RGB转换为HSV是计算密集型的。由您决定什么是更有价值的 - 精确答案(灰色/非灰色)或性能。

如果您需要更精确的方法,可以使用L*a*b* color space并将色度计算为sqrt(a*a + b*b)(请参阅here),然后将阈值应用于此值。但是,这将是甚至更多计算密集型。

您还可以合并多种方法

  • 计算R,G,B组件之间的简单差异。如果颜色可以被识别为绝对去饱和(例如max(abs(R-G), abs(R-B), abs(G-B)) <= 5)或肯定饱和(例如max(abs(R-G), abs(R-B), abs(G-B)) > 100),那么停止。

  • 否则,转换为L * a * b *,将色度计算为sqrt(a*a + b*b)并对此值使用阈值。

答案 1 :(得分:0)

r = 160;   g = 179;   b = 151;

公差= 20;

if(Math.abs(r-g)&lt; 20&amp;&amp; Math.abs(r-b)&lt; 20){     #then被认为是灰色的   }