我编写了一个计算机视觉算法来使用 HSV 检测不同光照条件下的物体。我最近阅读了 Charles Poynton 对 HSV 的令人信服的批评:
在用户必须以数字方式指定颜色的时代,HSB 和 HLS 被开发用于指定数字色调、饱和度和亮度(或色调、亮度和饱和度)。HSB 和 HLS 的常用配方在色觉特性方面存在缺陷。现在用户可以直观地选择颜色,或者选择与其他媒体相关的颜色(例如 PANTONE),或者使用 L u v* 和 L a b* 等基于感知的系统,因此应该放弃 HSB 和 HLS。
以下是 HSB 和 HLS 的一些问题。在“亮度”从 0 到 100 的颜色选择中,50 的亮度应该看起来是 100 亮度的一半。但是 HSB 和 HLS 的常用公式没有参考底层 RGB 的线性或非线性,并没有参考人类视觉的亮度感知。
HSB 和 HLS 的常用公式将所谓的“亮度”或“亮度”计算为 (R+G+B)/3。这种计算与色觉的特性有很大的冲突,因为它计算出黄色的强度大约是蓝色的六倍,具有相同的“亮度”值(比如 L=50)。
由于 360 度色相的不连续性,HSB 和 HSL 对图像计算没有用处。您不能执行以极坐标表示的颜色的算术混合。
几乎所有 HSB 和 HLS 的公式都涉及围绕色相圆的 60 度段的不同计算。这些计算在色彩空间中引入了可见的不连续性。
尽管声称 HSB 和 HLS 是“设备独立的”,但普遍存在的公式是基于未指定色度和白点的 RGB 分量。因此,HSB 和 HLS 对传递准确的颜色信息毫无用处。
如果您确实需要通过数值指定色调和饱和度,而不是 HSB 和 HSL,您应该使用 u* 和 v* 的极坐标版本:h*uv 表示色调角度,c*uv 表示色度。
我知道HSV 比 RGB 更好,并且 HSV 有一些优点,例如去除阴影:
饱和度分量在阴影中被认为是不变的(只有强度变化),因此在 HSV 空间中处理图像更适合阴影去除。
计算简单:
经常使用 HSV 只是因为用于在 RGB 和 HSV 之间转换的代码广泛可用并且也可以轻松实现。
与标准 CIE 颜色模型(如 CIELAB、CIELuv 等)相比,使用根据 Poynton 不准确的 HSB 和 HSV 的权衡是什么?