4

我想将一些颜色值从众所周知的 HSL 转换为鲜为人知的 HSLum 怎么做?

hsl(0, 1.0, 0.5) - rgb red  is hslum(0, 1.0., 0.54)
hsl(120, 1.0, 0.5 - rgb green is hslum(0, 1.0, 0.80)
hsl(240, 1.0, 0.5) - rgb blue is hslum(0, 1.0, 0.44)

据我所知,亮度(不是亮度)是这样计算的:

Y = 0.2126 * R + 0.7152 * G + 0.0722 * B

我读了一些文章:Luminance (relative) , 21296247 , HSL and HSV , luma , Lightness , Munsell但没有找到解决方案?

据我所知,CIELab 1976 公式在Munsell附近:

1.16*(Y/Ymax)^1.16*(Y/Ymax)^(1.0/3.0)-0.16 where Y/Ymax > 0.01

或更好的插值/

1.16*(Y/Ymax)^(1.0/3.0)-0.16 where Y/Ymax > (6/29)^3
1.16*(841.0/108.0)*(Y/Ymax)+(4.0/29.0)-0.16 where Y/Ymax <= (6/29)^3

如何进行这样的转换?

  1. HSL -> HSLum
  2. HSLum -> HSL
  3. HSLum -> RGB

欢迎任何提示 - 算法建议。

这是一些做HSLum的工具。

4

2 回答 2

3

如果您打算生成和使用感知统一的颜色,您可以使用HSLuv,这是由Alexei Boronine创建的库,可用于多种编程语言。

它基于CIELUV 颜色空间并实现各种颜色转换例程,如rgbToHsluvhsluvToRgbhexToHsluvhsluvToHex等。

该库不支持从 HSL 直接转换为 HSLuv,但您可以按照此处所述将 HSL 转换为 RGB ,然后使用 rgbToHsluv。

于 2016-12-22T11:25:17.957 回答
1

您可能会发现来自 Charles Poynton 的 Gamma FAQ 的链接很有趣:

'22. HSI、HSB、HLS 和 HSV 中的 I、B、L 和 V 分量是什么?

为了符合亮度与物理功率成正比的定义,HSI 的 I 分量应表示线性光量。CIE 没有定义亮度的客观度量,但它显然是一个感知量。亮度是 CIE 非常精确地定义的感知量。CIE没有定义Value,但是有几个不同的定义在使用,比如Munsell Value,都具有感知基础,可以与亮度相媲美。

在计算机图形学中使用的大多数 HSI、HSB、HLS 和 HSV 公式中,这些量是根据 R、G 和 B 主分量计算的,但没有提及主分量中的非线性,即线性光的原色。因此无法确定计算出的 HSI、HSB、HLS 或 HSV 是代表物理量还是感知量。

HSI、HSB、HLS 和 HSV 的亮度分量应基于亮度,计算为红色、绿色和蓝色的适当加权总和。但是在通常的公式中,亮度分量被计算为三个分量的最大值,或者三个分量的最小值和最大值的平均值。这种高度非线性的计算将辐条引入色调圈。

最后,由 HSI、HSB、HLS 或 HSV 转换的 RGB 三元组产生的颜色取决于 RGB 原色的色度,但 HSI、HSB、HLS 或 HSV 的常用公式都没有考虑原色。

由于这些原因,I、B、L 和 V 量在计算机图形中的任何使用都是值得怀疑的。有关详细信息,请参阅有关颜色的常见问题

我认为这意味着在所有情况下,您必须转换为 RGB 才能在这些公式中的任何一个之间进行转换,而且这些公式的定义有些不明确。

于 2014-05-16T21:12:21.573 回答