HSL 色彩模型


写下这篇短文的起因来自于 Freemind 写的 用 YUV 格式加速光照处理的初步研究

实际上, 表示颜色有两种理论模型, 除了计算机上直接使用的 RGB 外, 还有一种 HSL 模型. 如果是着重描述光线强弱关系的话, 当然应该使用 HSL 模型.

光线的颜色是由不同波长的单色光混合起来的, 如果将各种颜色的单色光线从兰色到红色排出来, 肉眼感受到的特定颜色的光, 应该是其中的一段.

Hue Stauration Lightness 模型中, Lightness 是完全控制的亮度的. 而在 RGB 模型中, 亮度实际是和 R,G,B 的最大值有关的. 采用 24bit 表示法, 就是说 FF0000 和 00FF00 0000FF FFFFFF 都是一样亮的. (想想显示器的显示 R G B 的色素的互不影响亮度, 不是吗?) 人眼觉察到的亮度实际就是 R G B 中的最大值

Stauration 纯度, 从我的理解, 当色彩纯度为0 时, 应该是白色光. 物理上看就是各种波长的光都混在一起了. 当然就非常不纯了 ;-) 如果光线非常纯, 那就是单一波长的光了. 那么 S 值是一个真分数, 在0~1 间. 由上面的定义可以得出:

    S=(max-min)/max
	其中: max 是 RGB 中最大的数值, min 是 RGB 中最小的数值.

最后来看 Hue 色度, 如果将可见光的兰色到红色排成一个色环. 实际Hue指出了某种光在环中的位置. (一种特定颜色的光应该是色环的一段弧. S 是这个弧的圆心角度) R G B 就正好处于色环的三个互成 120 度的位置. H 值应该是一个角度值, 这里我们可以看最亮的色素是哪个而得出 H 值偏向哪一段. (当 S =0 时, H 无意义) 下面给出简单的公式

   if R = max, H = (G-B)/(max-min)
   if G = max, H = 2 + (B-R)/(max-min)
   if B = max, H = 4 + (R-G)/(max-min)

   H = H*60
   if H < 0, H = H + 360

这里 L 是一个无上限的整数, H 是一个角度值, S 是一个 0~ 1 间的小数. 并不适合在计算机中处理. 我想 YUV 就是HSL 模型的一种形式吧. 按我的理解, Y 值和 U 值应该是描述上述的那段表示色彩的圆弧 在色环中的开始与终止位置吧.

hehe 如果你以前不知道这些,应该受益非浅才对^_^ 不过这里要声明: 云风从没有受过专业的美术教育. (知识来源保证也就是高中物理还学的马马乎乎吧, 大学就是一团糟了) 以上文字没有抄什么书. 全部是一时兴起胡编乱造. 有错误概不负责 ;-)

剩下的还有一些问题可以研究, 比如两束光叠加的亮度是多少? 应该是 (L1^0.5+L2^0.5)^2 吧. (因为光强和光波的振幅的平方成正比); 两个不同光的色度部分的混合呢? 估计应该是加上亮度作权, 平均吧. 等等.... 云风没有做深入研究.

今天就写到这里了, 来日作补充 ^_^