如何将HSL(色调,饱和度,亮度)转换为HSLum(色调,饱和度,亮度)和HSLum / RGB?

时间:2014-05-16 16:01:42

标签: graphics colors color-scheme luminance

我想将一些颜色值从众所周知的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)21296247HSL and HSVlumaLightnessMunsell但未找到解决方案?

据我所知,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 - &gt; HSLum
  2. HSLum - &gt; HSL
  3. HSLum - &gt; RGB
  4. 任何提示都将受到欢迎 - 算法建议。

    以下是执行HSLum的一些工具。

2 个答案:

答案 0 :(得分:2)

如果您打算生成并使用感知统一颜色,您可以使用HSLuvAlexei Boronine创建的库,可以使用多种编程语言。

它基于CIELUV colorspace并实现各种颜色转换例程,例如 rgbToHsluv hsluvToRgb hexToHsluv hsluvToHex 等。

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

答案 1 :(得分:1)

你可能会发现Charles Poynton的Gamma FAQ中的this link很有趣:

  

&#39; 22。 HSI,HSB,HLS和HSV中的I,B,L和V组件是什么?

     

为了使亮度的定义与物理功率成比例,HSI的I分量应表示线性光量。 CIE没有定义亮度的客观测量,但它显然是一个感知量。亮度是一种感知量,由CIE精确定义。 CIE尚未定义价值,但正在使用几种不同的定义,例如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数量都是可疑的。有关详细信息,请参阅Frequently Asked Questions about Color

我认为这意味着在所有情况下,您必须转换为RGB以适应这些配方中的任何一种,并且这些配方的定义稍差。