colors - 给定颜色的 RGB 分量,我如何确定它是否被人类感知为灰色?

标签 colors

一种简单的说法是,当 RGB 分量相等时,它们形成灰色。 然而,这还不是全部,因为如果它们只有细微的差别,它们看起来仍然是灰色的。

假设观看者具有健康的色彩视觉,我如何确定给定值是否会被视为灰色(大概具有可调节的“灰度”阈值级别)?

最佳答案

一个相对直接的方法是将 RGB 值转换为 HSV color space并在 saturation 上使用阈值组件,例如“如果饱和度 < 0.05,则‘几乎是灰色’,否则不是灰色”

饱和度实际上定义为“灰度/色彩”。

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

如果您需要更精确的方法,您可以使用 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)并对这个值使用阈值。

关于colors - 给定颜色的 RGB 分量,我如何确定它是否被人类感知为灰色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16209111/

相关文章:

algorithm - 色盲辅助算法

python - 增加列表理解的值(value)限制

jquery - 如何选择尚不存在的元素(jQuery)并更改其样式?

c# - 将标识符从 Color 更改为 Color C#/VS2013

java - 获取 BufferedImage 上像素的颜色

css - 仅更改页脚中的文本选择颜色

python - 如何计算 python 中图像上的红色和黄色多边形?

javascript - 根据渐变html5 Canvas 改变颜色

qt - 在Qt中显示颜色选择的结果?

opencv - 在 OpenCV 中计算图像的颜色分布