HSV(HSL)颜色空间及其应用

来源:互联网 发布:专业音频编辑软件 编辑:程序博客网 时间:2024/04/27 19:00
from:http://nkwavelet.blog.163.com/blog/static/22775603820147851726816/
【摘要】
本文首先阐述HSV 和 HSL颜色模式的基本特性,然后介绍RGB和HSV / HSL颜色空间互相转换的算法,并给出算法核心代码和效果图,最后将HSV颜色空间应用到图像增强,得到几个增强之后的效果图。
【参考资料】 
1. 颜色空间RGB与HSV(HSL)的转换
2. 维基百科:HSL和HSV色彩空间
3. HSV颜色空间

1. HSV和HSL颜色空间简介
    HSV(也叫做 HSB)和 HSL 是对RGB 色彩空间中点的两种有关系的表示,它们尝试描述比 RGB 更准确的感知颜色联系,并仍保持在计算上简单。HSL 表示 hue(色相)、saturation(饱和度)、lightness(亮度),HSV 表示 hue、saturation、value(色调) 而 HSB 表示 hue、saturation、brightness(明度)。

    HSV和HSL颜色模式特点 :
    a)  HSV颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1。它包含RGB模型中的 R=1,G=1,B=1三个面,所代表的颜色较亮。色彩H由绕V轴的旋转角给定。红色对应于角度0°,绿色对应于角度120°,蓝色对应于角度240°。在HSV颜色模型中,每一种颜色和它的补色相差180°。
    b)  饱和度S取值从0到1,所以圆锥顶面的半径为1。HSV颜色模型所代表的颜色域是CIE色度图的一个子集,这个模型中饱和度为百分之百的颜色,其纯度一般小于百分之百。
    c)  在圆锥的顶点(即原点)处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处 S=0,V=1,H无定义,代表白色。从该点到原点代表亮度渐暗的灰色,即具有不同灰度的灰色。对于这些点,S=0,H的值无定义。可以说,HSV模型中的V轴对应于RGB颜色空间中的主对角线。在圆锥顶面的圆周上的颜色,V=1,S=1,这种颜色是纯色。

    HSV 颜色空间可以用一个圆锥空间模型来描述 。
     HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界

  2.  RGB 到 HSL 或 HSV 的转换
       设 (r, g, b) 分别是一个颜色的红、绿和蓝坐标,它们的值是在 0 到 1 之间的实数。设 max 等价于 r, g 和 b 中的最大者。设 min 等于这些值中的最小者。要找到在 HSL 空间中的 (h, s, l) 值,这里的 h ∈ [0, 360)是角度的色相角,而 s, l ∈ [0,1] 是饱和度和亮度,计算为:
HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界
 h 的值通常规范化到位于 0 到 360°之间。而 h = 0 用于 max = min 的(就是灰色)时候而不是留下 h 未定义。
 HSL 和 HSV 有同样的色相定义,但是其他分量不同。HSV 颜色的 s 和 v 的值定义如下:
HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界
3. HSL 到 RGB 的转换
     给定 HSL 空间中的 (h, s, l) 值定义的一个颜色,带有 h 在指示色相角度的值域 [0, 360)中,分别表示饱和度和亮度的s 和 l 在值域 [0, 1] 中,相应在 RGB 空间中的 (r, g, b) 三原色,带有分别对应于红色、绿色和蓝色的 r, g 和 b 也在值域 [0, 1] 中,它们可计算为:
       如果 s = 0,则此时颜色是非彩色的、或灰色的。在这种情况下,r, g 和 b 都等于 l。注意 此时h 的值是未定义的。
       如果 s ≠ 0 ,则可以使用下列过程:
HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界

4.  HSV 到 RGB 的转换
     类似的,给定在 HSV 中 (h, s, v) 值定义的一个颜色,带有如上的 h,和分别表示饱和度和明度的 s 和 v 变化于 0 到 1 之间,在 RGB 空间中对应的 (r, g, b) 三原色可以计算为:
    HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界
对于每个颜色向量 (r, g, b),
HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界
 
5. HSL和HSV比较
    HSL类似于HSV。对于一些人,HSL更好的反映了“饱和度”和“亮度”作为两个独立参数的直觉观念,但是对于另一些人,它的饱和度定义是错误的,因为非常柔和的几乎白色的颜色在HSL可以被定义为是完全饱和的。对于HSV还是HSL更适合于人类用户界面是有争议的。
    W3C的CSS3规定声称“HSL的优点是它对称于亮与暗(HSV就不是这样)…”,这意味着:
    a)  在HSL中,饱和度分量总是从完全饱和色变化到等价的灰色(在HSV中,在极大值V的时候,饱和度从全饱和色变化到白色,这可以被认为是反直觉的)。
    b)  在HSL中,亮度跨越从黑色过选择的色相到白色的完整范围(在HSV中,V分量只走一半行程,从黑到选择的色相)。
HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界
 
HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界
 
6.  RGB与HSV互转代码
     此处我们用C语言实现RGB与HSV之间的互相转换并给出效果图。

7. HSV颜色空间小应用
     将RGB转换到HSV空间,通过V变量可以调整图像的亮度和对比度,以下是几个效果图:
         
                            HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界                     HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界
                                             (原始图片)                                                                (亮度V + 0.1) 
                           HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界                     HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界
                                           (亮度V - 0.1)                                                                    (对比度1.2)  
  
                          HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界                     HSV(HSL)颜色空间及其应用 - nkwavelet - 小波的世界
                                              对比度1.5)                                                          (对比度1.5 + V0.2)
0 0