hsl模型是否优于hsv模型?
这篇文章写出,是因为看到知乎的一个问题:
hsl模型是否优于hsv模型?
请大家不要在网上复制答案,因为很多我都看过了,维基百科也看了,务必用自己的话来回答。如果hsl模型优于hsv模型,那为什么不删除其中一个模型?如果否,那么两个模型的优缺点各是什么?
我们之前聊过HSV(HSB)模型的问题(右侧链接),但和HSL的对比又是另一个有意思的问题。我之前说过,二者的饱和度定义是类似的,但具体有什么联系和区别呢?到底为什么存在两个模型,又全部被沿用至今呢?为什么Office里面是HSL,Photoshop里面却是HSB呢?
HSL和HSV(或称HSB)都是RGB模式下的模型,适用的都是加色原理,也就是所谓的“发光”产生颜色。而HSL和HSV的区别就在于对不同颜色“发光”的描述方式是不同的。
铺垫
要讨论优劣的话从答主的理解,解释一下H、S、L和V的意义:
- H(HSL/HSV):色相。HSL和色相和HSV的色相是完全相同的,也不存在刻度不同的说法(软件里看到的所谓刻度,是软件对颜色精度的控制方式,其他两个参数也是一样,后面不做赘述),取值范围均是0到360°。这意味着,色相的范围是闭环的,没有扩展空间。色相的人为定义的,表现为一条可以首尾相接的色带(接起来就是色环,从红色开始对应0到360°)。
- S(HSL):饱和度其一。HSL的饱和度,指的是光的颜色,注意它是在不改变光的发出量的情况下改变光的颜色,光的发出量,我们通常就称为亮度(注意,这里的亮度不指代任何HSL、HSV模型里的定义,单纯说自然感受下的亮度),也就是改变HSL的S,我们是不改变亮度的。想象一下有这么一个神奇的透镜,拿无色(灰色)光照射它,它却可以不吸收光,而是将光的一部分转化为颜色,另一部分原样透过。
- S(HSV):饱和度其二。HSB的饱和度,指的是有色光的纯度。也就是说,比如在色相H是0,也就是红色的情况下,光的颜色恒定为红色,它本身不会变成灰色也不经过任何转换颜色的透镜。而变化的是这个光的纯度。你可以理解为“红色颜料里掺了多少白色”,虽然用减色原理(反射)去理解加色原理(发光)是错误的,但这么理解最贴近。也正是因此,HSV被称为“适合画家的颜色定义方式”。
- L(HSL):亮度。我们上面提到了灰色光,其实HSL模型里面是有“灰色光”这个伪概念的,因为这里的亮度代表“灰色的比例”。也就是HSL模型可以理解为,存在一种“在白色介质下反射灰色的光”。自然界这种光不存在,亮度不够高的时候我们在白墙上看到的仍然是白色反光,只不过因为这反光不够强,我们认为它是灰色。但HSL模型就默认了这种灰色光的存在,至少你可以这么理解。请结合在饱和度部分提到的“颜色滤镜”理解HSL的变色原理。
- V(HSV):明度。明度这个概念最符合直觉。如果你有一个台灯,可以用旋钮进行连续的(而不是分档位的)亮度调节,从开灯到关灯的过程就是明度从0到100%的过程。请结合在饱和度部分提到的“光颜色的纯度”理解HSV的变色原理。
以上是一种抽象理解,在实际操作中可以这样想象,并不是指实际定义。尤其是对于饱和度,在数学定义上其实是这样的(为了严谨放出,纯为了理解可以不深究):
优劣分析
也就是说,如果要答主形容的话,对于HSL的S,答主会说“这个颜色鲜艳不鲜艳”,而对HSV的S则会说“这个颜色纯不纯”。而对于L和B,对L的形容是“这个光白不白”,而对B的形容是“这个光亮不亮”。
换句话说,HSL的S(饱和度)定义更符合直觉,而HSV的V(明度)定义更符合直觉。这两个模型都是为了在颜色选择方面方便人机交互设计的,它们的优劣也就在于具体使用者的理解倾向,或者软件使用场景对具体参数的要求上。
- 由于HSV的V(或者HSB的B)代表颜色的纯度,在具有RGB模式,又要服务于印刷的的平面设计软件里,经常使用的HSV。因为它作为“适合画家的颜色定义方式”符合我们提到的“用颜料调色”的直觉。Adobe的Photoshop和Illustrator的默认调色参数都是HSB,就是这个道理。
- HSV的V是光实际的多少,这种定义非常适合实际计算光照射的3D软件。在3D软件里,调色工具使用HSV的占到很大比例,比如Maxon的Cinema 4D。
- 而由于HSL的S使用的是“转化颜色的滤镜”,对明亮度的影响小。因此,使用HSL可以确保调整“鲜艳度”的时候,对亮度的影响不那么大。所以照片调色软件,主用HSL的居多,比如Adobe的Lightroom。
- HSL的L,虽然讲道理不那么好理解,但平常使用起来和V并没有多大区别。又由于HSL的S调整起来感觉比较亲切,因此可以认为HSL更容易使用。提供给非设计人士的调色工具,是以HSL居多的,典型的比如微软Office系列。
- HSL的数学模型可以表示为双圆锥(两个圆锥从圆面上下合并),因此拾色器更容易设计成四边形(请注意截面)。而HSV的数学模型可以表示为圆锥,拾色器设计成三角形比较合理,四边形的也有,但容易混淆概念。而设计四边形的拾色器,拾色器可用范围更大,从UI角度来说优先支持HSL是有道理的。如果对拾色器问题有兴趣,可以看下下面这篇:
另外,二者的色彩空间和RGB都是等价的。所以,优劣是相对来说的,说是“因地制宜”地选用更加准确。
从理论上,HSL的原理更加先进,如果说HSV是“画家的颜色定义方式”,那么HSL就是“计算机的颜色定义方式”。HSL更加注重对参数作用的分离,也就是调整不同的参数,肉眼的感官变化的维度差别会更大,会更少出现“我知道你调了颜色,但不知道变的是哪个参数”的问题。
实际对于非设计相关的人来说,两个模型的使用感受并太大差距。而对于编程人员来说,两个模型之间有数学关系,可以相互转化。