Press "Enter" to skip to content

【图像处理】关于颜色的万花筒(RGB–HSV)

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

一、提要

 

从模式识别的角度看,彩色的颜色绝对是一个重要模式,在色彩基础上去实现目标识别是一个好的选项。然而颜色识别也需要一个泛化过程,BGR颜色转化成HSV就是一个好的泛化过程,说白了,在HSV上识别颜色比在BGR上更有利。

 

二、RGB原理

 

RGB颜色系统是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色 通道 的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的 颜色系统 之一。

 

 

RGB是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和,越混合亮度越高,即加法混合。

 

红、绿、蓝三个 颜色通道 每种色各分为256阶亮度,在0时“灯”最弱——是关掉的,而在255时“灯”最亮。当三色灰度数值相同时,产生不同 灰度值 的灰色调,即三色灰度都为0时,是最暗的黑色调;三色灰度都为255时,是最亮的白色调。

 

三、 HSV模式

 

RGB是常用的色彩表现方式,通过原色组合来表现色彩,不适合需要进行色彩模式识别的情况。另一方面,HSV以“鲜艳”和“亮度”等直观的方式表达颜色,因此可以表达“我想让这个颜色变亮/变暗”和“我想让这个颜色变亮”等感性的颜色更轻/更深”。

 

HSB又称HSV,表示一种颜色模式:在HSB模式中,H(hues)表示 色相 ,S(saturation)表示 饱和度 ,B(brightness)表示 亮度 HSB模式对应的媒介是人眼。

 

3.1 HSV的组成

色相(H, h ue):在0~360°的标准色轮上,色相是按位置度量的。在通常的使用中,色相是由颜色名称标识的,比如红、绿或橙色。黑色和白色无色相。
饱和度(S, s aturation):表示色彩的纯度,为0时为灰色。白、黑和其他灰色色彩都没有饱和度的。在最大饱和度时,每一 色相 具有最纯的 色光 。取值范围0~100%。
亮度(B, b rightness或V, v alue):是色彩的明亮度。为0时即为黑色。最大亮度是色彩最鲜明的状态。取值范围0~100%。

3.2 色相

 

色调是定义特定颜色的元素,例如红色或绿色。由于颜色是按圆形排列的,所以通常用 0° 到 360° 范围内的值来表示。这是色调值的颜色:

 

 

将上图的柱面展开是:

 

 

色相位表:

 

色相以 RGB 表示颜色时
R:255 G:0 B:0
0~60R:255 B:固定为0,G从0增加到255
60°R:255 G:255 B:0
60~120G:255 B:固定为0,R从255减少到0
120°R:0 G:255 B:0
120~180R:0 G:固定为 255,B 从 0 增加到 255
180°R:0 G:255 B:255
180~240R:0 B:固定在255,G从255减少到0
240°R:0 G:0 B:255
240~300G:0 B:固定为 255,R 从 0 增加到 255
300°R:255 G:0 B:255
300~360R:255 G:固定为0,B从255减少到0
360°R:255 G:0 B:0

 

3.3 饱和度

 

饱和度是表示由色调定义的颜色的鲜艳度和强度的元素,通常在 0% 到 100% 的范围内表示。100% 是最亮的,随着饱和度的降低,颜色在 0% 处逐渐变为灰色。

 

 

“鲜艳”是指红、绿、蓝分量之间的差异较大,而饱和度降低意味着分量之间的差异减小。)关于它。在 HSV 颜色空间中,去饱和向最强的红色、绿色和蓝色分量收敛。

 

3.4 亮度

 

亮度是表示由色调定义的颜色的明暗程度的元素,通常在 0% 到 100% 的范围内表示。100% 是最亮的,随着亮度的降低它会变暗,0% 是完全黑色的。

 

 

亮度定义为红色、绿色和蓝色的最高值,是在 0% 饱和度处收敛的颜色值。

 

在 HSV 颜色空间的情况下,当红色、绿色和蓝色分量之一最大化时,亮度变为 100%,因此红色 RGB (255,0,0) 和白色 RGB (255,255,255) 具有相同的亮度 100 %. 增加。因此,仅靠调整亮度是无法让红色RGB(255,0,0)更亮的,需要调整饱和度。“HSL 色彩空间”改进了这一点。

 

HSL的S(saturation)分量,指的是色彩的饱和度,它用0%至100%的值描述了相同色相、明度下色彩纯度的变化。数值越大,颜色中的灰色越少,颜色越鲜艳,呈现一种从灰度到纯色的变化。

 

 

HSL的L(lightness)分量,指的是色彩的明度,作用是控制色彩的明暗变化。它同样使用了0%至100%的取值范围。数值越小,色彩越暗,越接近于黑色;数值越大,色彩越亮,越接近于白色。

 

 

四、RGB模式转化成 HSV模式

 

4.1 RGB和HSV的原理

 

首先解释最好理解的 明度(Lightness):

 

我们引入一个三维直角坐标系,三个坐标轴分别代表R、G、B的数量。由于此数值有限,所以取值范围会在立体空间里形成一个 正方体 。任何一个RGB颜色制式中的色彩取值,都会对应到这个立方体内的一点。

 

 

现在我们从原点(0,0,0)到对角的顶点(255,255,255)连出一条直线,也就是一条体对角线。这条对角线就可以说是一条 明度轴 了,原点最暗,另一端最亮。而任何一个颜色对应到的一点在这条体对角线上的“投影”,就是这个颜色的 明度(Lightness) 。靠近原点就越暗,靠近(255,255,255)就越亮。

 

然后我们需要再引入一个 极坐标系 ,来解释 饱和度(Saturation) 和 色相(Hue) 。

 

 

极坐标系由角度轴和距离轴构成。把红蓝绿三个颜色分别置于角度轴的0°、120°、240°,此时色相就被角度轴来表示。从图中也可以看到,从0°到120°中间的区域就是橙色、黄色这些红色到绿色的过渡颜色,其他区域也是同理,每个色相都映射一个角度。而让原点的颜色为灰色,越往外颜色越鲜艳,则距离轴代表的就是饱和度。

 

这里我们再借助向量,把R、G、B映射到角度轴,R、G、B的数值为距离轴,绘制三个向量。假设我们现在有一个颜色,R=100,G=150,B=200,那我们就在极坐标中,画一个坐标为(100,0°)的向量,一个坐标为(150,120°)的向量,一个坐标为(200,240°)的向量。

 

 

然后把这三个向量做向量的加法,最终会落在一个点上。这个点的角度轴数值就是此颜色的色相,而距离轴数值就是它的饱和度了。蓝色箭头终点即为此色,色相210°,饱和度50%。

 

不过,这个极坐标是一个二维坐标,不能表示RGB颜色制式中的所有颜色,只能解释色相和饱和度。如何使其表示所有颜色?我们需要再添加一个纵轴,变成了这样:

 

 

这里添加的这根纵轴就是 亮度(Brightness) 。而这个模型就是HSB模型/HSV模型。此外,对于HSL模型,就是把Brightness轴替换成Lightness轴,替换后其顶层所有颜色都为白色。

 

顶层的纵坐标是255,白色是255,红色也一样是255,顶层大家的“光的量”Brightness都是最大值。底层的坐标是0,白色是0,红色也是0,所以说亮度是表示单个颜色的含量的。但是红色在上一个三维直角模型中,其投影并未到明度轴的顶点,其三数值平均值只有255/3=85,远不到最大值255,“与白色的相近程度”还明显差得很远。

 

因此也有人用下面这个色环模型来表示HLS模型:

 

 

模型确立后,就可以研究如何进行转换了。

 

4.2 HSV是什幺坐标值

 

三个指标如果综合在一起看的话,可以用下图来显示:

 

 

 

HSL 和 HSV 二者都把颜色描述在 圆柱体 内的点,这个圆柱的 中心轴 取值为自底部的 黑色 到顶部的 白色 而在它们中间是的 灰色 ,绕这个轴的角度对应于“色相”,到这个轴的距离对应于“饱和度”,而沿着这个轴的距离对应于“亮度”,“色调”或“明度”。

 

4.3  RGB到HLS的过程

 

设 (r, g, b) 分别是一个颜色的红、绿和蓝坐标,它们的值是在 0 到 1 之间的实数。设 max 等价于 r, g 和 b 中的最大者。设 min 等于这些值中的最小者。要找到在 HSL 空间中的 (h, s, l) 值,这里的 h ∈ [0, 360)是角度的 色相角 ,而 s, l ∈ [0,1] 是饱和度和亮度,计算为:

 

 

 

 

h 的值通常规范化到位于 0 到 360°之间。而 h = 0 用于 max = min 的(就是灰色)时候而不是留下 h 未定义。

 

HSL 和 HSV 有同样的 色相 定义,但是其他分量不同。HSV 颜色的 s 和 v 的值定义如下:

 

 

 

4.4 HLS到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 的时候,可以使用下列过程: [1]

 

 

 

 

 

(h 规范化到值域 [0,1)内)

 

 

 

 

 

对于每个颜色 向量 Color =

 

(ColorR, ColorG, ColorB) = (r, g, b),

 

 

 

4.5 HSB到RGB的过程

 

类似的,给定在 HSV 中

 

(h, s, v) 值定义的一个颜色,带有如上的 h,和分别表示饱和度和明度的 s和 v 变化于 0 到 1 之间,在 RGB 空间中对应的

 

(r, g, b) 三原色 可以计算为:

 

 

 

 

 

 

对于每个颜色向量 (r, g, b),

 

 

文中参考资料:

 

https://blog.csdn.net/zhangping1987/article/details/73699335

 

https://blog.csdn.net/jiangxinyu/article/details/8000999

 

https://blog.csdn.net/hw140701/article/details/53174965

 

色彩空间中的 HSL、HSV、HSB 有什幺区别? – 知乎 (zhihu.com)

 

RGBとHSLの相互変换ツールと変换计算式 – PEKO STEP

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。