关于HSL和HSV颜色空间的详细论述
2016-09-12 14:19
176 查看
目前在计算机视觉领域存在着较多类型的颜色空间(color space)。HSL和HSV是两种最常见的圆柱坐标表示的颜色模型,它重新影射了RGB模型,从而能够视觉上比RGB模型更具有视觉直观性。
HSL代表色调(Hue),饱和度(Saturation)和亮度(Lightness),通常也称为HLS。HSV代表色调,饱和度和值(Value)。注意HSL 和HSV的两个H的含义是相同的,而饱和度的定义是不同的,虽然都叫饱和度,从后面的定义可以看出二者的不同。
HSL 和 HSV 二者都把颜色描述在圆柱体内的点,这个圆柱的中心轴取值为自底部的黑色到顶部的白色而在它们中间是的灰色,绕这个轴的角度对应于“色相”,到这个轴的距离对应于“饱和度”,而沿着这个轴的距离对应于“亮度”,“色调”或“明度”。 HSV 以人类更熟悉的方式封装了关于颜色的信息:“这是什么颜色?深浅如何?明暗如何?”。HSL 颜色空间类似于 HSV,在某些方面甚至比它还好。HSL的模型为双圆锥形状。
这两种表示在用目的上类似,但在方法上有区别。二者在数学上都是圆柱,但 HSV(色相,饱和度,明度)在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心),HSL 在概念上表示了一个双圆锥体和圆球体(白色在上顶点,黑色在下顶点,最大横切面的圆心是半程灰色)。HSV 模型在 1978 年由埃尔维•雷•史密斯创立。下图给出了HSL和HSV的圆柱模型。
![](http://www.polycv.com/images/stories/files/colorspaces/fig1.bmp)
用圆锥模型如图:
![](http://www.polycv.com/images/stories/files/colorspaces/hsl_color_solid_dblcone_chroma_gray.png)
![](http://www.polycv.com/images/stories/files/colorspaces/800px-hsv_color_solid_cone_chroma_gray.png)
在圆锥上,角度代表色调H,饱和度S表示为点到中心竖线的距离,而亮度或者值V用中心竖线表示。红色的角度为0度,依次为黄色、绿色、青色、蓝色、橙色。连续两种颜色的角度相差60度。
![](http://www.polycv.com/images/stories/files/colorspaces/740px-hsv-hexagons-to-circles_svg.png)
下图给出了一个RGB到HS平面的影射例子。
![](http://www.polycv.com/images/stories/files/colorspaces/rgb2hsl_sample.bmp)
下表给出了RGB到HSL和HSV的影射样例。
![](http://www.polycv.com/images/stories/files/colorspaces/sample_hsl_hsv.bmp)
那么如何从RGB到HSL和HSV的转换呢?利用下面的步骤就可以实现从RGB到HSL和HSV的转换。
已知一点的R、G、B,计算最大值和最小值
![](http://www.polycv.com/images/stories/files/colorspaces/mmc_hsl.png)
计算H:
![](http://www.polycv.com/images/stories/files/colorspaces/h_hsl.png)
计算L和V:
![](http://www.polycv.com/images/stories/files/colorspaces/l_hsl.png)
![](http://www.polycv.com/images/stories/files/colorspaces/v_hsv.png)
计算S:
![](http://www.polycv.com/images/stories/files/colorspaces/s_hsv_hsl.png)
上面的公式实现了从RGB到HSL和HSV的转换。那么当采用Opencv的彩色空间转化函数cvCvtColor(orgFrame,destFrame, CV_BGR2HSV),如果图像的数据类型为8位字符型时,则H、S、V都量化到整数{0~255},可以看出H的精度不是很高。
当在HSL和HSV空间进行处理后,需要转换到RGB,可以采用下面的公式计算RGB。
先讨论HSV到RGB的转换,这里H ∈ [0°, 360°], S ∈ [0, 1], V ∈ [0, 1]。转换公式如下:
计算C
![](http://www.polycv.com/images/stories/files/colorspaces/c_hsv2rgb.png)
![](http://www.polycv.com/images/stories/files/colorspaces/x_hsv2rgb.png)
![](http://www.polycv.com/images/stories/files/colorspaces/rgb1_hsv2rgb.png)
最后得到:
![](http://www.polycv.com/images/stories/files/colorspaces/rgb_hsv2rgb.png)
从HSL到RGB的转换。这里H ∈ [0°, 360°], S ∈ [0, 1], V ∈ [0, 1]。转换公式如下:
![](http://www.polycv.com/images/stories/files/colorspaces/c_hsl2rgb.png)
然后:
![](http://www.polycv.com/images/stories/files/colorspaces/x_hsl2rgb.png)
![](http://www.polycv.com/images/stories/files/colorspaces/rgb1_hsl2rgb.png)
最后得到:
![](http://www.polycv.com/images/stories/files/colorspaces/rgb_hsl2rgb.png)
展示的 RGB 值的范围是 0.0 到 1.0。
HSL代表色调(Hue),饱和度(Saturation)和亮度(Lightness),通常也称为HLS。HSV代表色调,饱和度和值(Value)。注意HSL 和HSV的两个H的含义是相同的,而饱和度的定义是不同的,虽然都叫饱和度,从后面的定义可以看出二者的不同。
HSL 和 HSV 二者都把颜色描述在圆柱体内的点,这个圆柱的中心轴取值为自底部的黑色到顶部的白色而在它们中间是的灰色,绕这个轴的角度对应于“色相”,到这个轴的距离对应于“饱和度”,而沿着这个轴的距离对应于“亮度”,“色调”或“明度”。 HSV 以人类更熟悉的方式封装了关于颜色的信息:“这是什么颜色?深浅如何?明暗如何?”。HSL 颜色空间类似于 HSV,在某些方面甚至比它还好。HSL的模型为双圆锥形状。
这两种表示在用目的上类似,但在方法上有区别。二者在数学上都是圆柱,但 HSV(色相,饱和度,明度)在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心),HSL 在概念上表示了一个双圆锥体和圆球体(白色在上顶点,黑色在下顶点,最大横切面的圆心是半程灰色)。HSV 模型在 1978 年由埃尔维•雷•史密斯创立。下图给出了HSL和HSV的圆柱模型。
![](http://www.polycv.com/images/stories/files/colorspaces/fig1.bmp)
用圆锥模型如图:
![](http://www.polycv.com/images/stories/files/colorspaces/hsl_color_solid_dblcone_chroma_gray.png)
![](http://www.polycv.com/images/stories/files/colorspaces/800px-hsv_color_solid_cone_chroma_gray.png)
在圆锥上,角度代表色调H,饱和度S表示为点到中心竖线的距离,而亮度或者值V用中心竖线表示。红色的角度为0度,依次为黄色、绿色、青色、蓝色、橙色。连续两种颜色的角度相差60度。
![](http://www.polycv.com/images/stories/files/colorspaces/740px-hsv-hexagons-to-circles_svg.png)
下图给出了一个RGB到HS平面的影射例子。
![](http://www.polycv.com/images/stories/files/colorspaces/rgb2hsl_sample.bmp)
下表给出了RGB到HSL和HSV的影射样例。
![](http://www.polycv.com/images/stories/files/colorspaces/sample_hsl_hsv.bmp)
那么如何从RGB到HSL和HSV的转换呢?利用下面的步骤就可以实现从RGB到HSL和HSV的转换。
已知一点的R、G、B,计算最大值和最小值
![](http://www.polycv.com/images/stories/files/colorspaces/mmc_hsl.png)
计算H:
![](http://www.polycv.com/images/stories/files/colorspaces/h_hsl.png)
计算L和V:
![](http://www.polycv.com/images/stories/files/colorspaces/l_hsl.png)
![](http://www.polycv.com/images/stories/files/colorspaces/v_hsv.png)
计算S:
![](http://www.polycv.com/images/stories/files/colorspaces/s_hsv_hsl.png)
上面的公式实现了从RGB到HSL和HSV的转换。那么当采用Opencv的彩色空间转化函数cvCvtColor(orgFrame,destFrame, CV_BGR2HSV),如果图像的数据类型为8位字符型时,则H、S、V都量化到整数{0~255},可以看出H的精度不是很高。
当在HSL和HSV空间进行处理后,需要转换到RGB,可以采用下面的公式计算RGB。
先讨论HSV到RGB的转换,这里H ∈ [0°, 360°], S ∈ [0, 1], V ∈ [0, 1]。转换公式如下:
计算C
![](http://www.polycv.com/images/stories/files/colorspaces/c_hsv2rgb.png)
![](http://www.polycv.com/images/stories/files/colorspaces/x_hsv2rgb.png)
![](http://www.polycv.com/images/stories/files/colorspaces/rgb1_hsv2rgb.png)
最后得到:
![](http://www.polycv.com/images/stories/files/colorspaces/rgb_hsv2rgb.png)
从HSL到RGB的转换。这里H ∈ [0°, 360°], S ∈ [0, 1], V ∈ [0, 1]。转换公式如下:
![](http://www.polycv.com/images/stories/files/colorspaces/c_hsl2rgb.png)
然后:
![](http://www.polycv.com/images/stories/files/colorspaces/x_hsl2rgb.png)
![](http://www.polycv.com/images/stories/files/colorspaces/rgb1_hsl2rgb.png)
最后得到:
![](http://www.polycv.com/images/stories/files/colorspaces/rgb_hsl2rgb.png)
展示的 RGB 值的范围是 0.0 到 1.0。
相关文章推荐
- 关于HSL和HSV颜色空间的详细论述
- 关于HSL和HSV颜色空间的详细论述
- 关于取消左转可缓解交通拥堵问题的详细论述
- 关于绘制文本详细论述
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
- 一篇关于web.xml配置的详细说明
- [分享]介绍一篇关于session的好文章,写的很详细
- 一个东方人关于东西方科学的论述
- .NET 框架中的字符串(转自MSDN,关于字符串的详细解说!)
- 关于奥黛丽赫本一生的详细介绍
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
- 关于session的详细解释
- 目前关于.net 2.0下设计器最为详细的资料
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
- 关于存储网络技术比较详细的介绍
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
- 关于session的详细解释