Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm
(四)色彩空间类型转换
RGB图像是一种比较常见的色彩空间类型,除此以外还有一些其他的色彩空间,比较常见的包括GRAY色彩空间(灰度图像)、XYZ色彩空间、YCrCb色彩空间、HSV色彩空间、HLS色彩空间、CIELab色彩空间、CIELuv色彩空间、Bayer色彩空间等。每个色彩空间都有自己擅长的处理问题的领域,因此,为了更方便地处理某个具体问题,就要用到色彩空间类型转换。
色彩空间类型转换是指,将图像从一个色彩空间转换到另外一个色彩空间。例如,在使用OpenCV处理图像时,可能会在RGB色彩空间和HSV色彩空间之间进行转换。在进行图像的特征提取、距离计算时,往往先将图像从RGB色彩空间处理为灰度色彩空间。在一些应用中,可能需要将色彩空间的图像转换为二值图像。
4.1.1 GRAY色彩空间
GRAY(灰度图像)通常指8位灰度图,其具有256个灰度级,像素值的范围是[0,255]。
当图像由RGB色彩空间转换为GRAY色彩空间时,其处理方式如下:
Gray=0.299·R+0.587·G+0.114·B
上述是标准的转换方式,也是OpenCV中使用的转换方式。
4.1.2 XYZ色彩空间
XYZ色彩空间是由CIE(International Commission on Illumination)定义的,是一种更便于计算的色彩空间,它可以与RGB色彩空间相互转换。
将RGB色彩空间转换为XYZ色彩空间,其转换形式为:
将XYZ色彩空间转换为RGB色彩空间,其转换形式为:
4.1.3 YCrCb色彩空间
人眼视觉系统(HVS, Human Visual System)对颜色的敏感度要低于对亮度的敏感度。在传统的RGB色彩空间内,RGB三原色具有相同的重要性,但是忽略了亮度信息。
在YCrCb色彩空间中,Y代表光源的亮度,色度信息保存在Cr和Cb中,其中,Cr表示红色分量信息,Cb表示蓝色分量信息。
亮度给出了颜色亮或暗的程度信息,该信息可以通过照明中强度成分的加权和来计算。在RGB光源中,绿色分量的影响最大,蓝色分量的影响最小。
从RGB色彩空间到YCrCb色彩空间的转换公式为:
Y=0.299·R+0.587·G+0.114·B
Cr=(R-Y)×0.713+delta
Cb=(B-Y)×0.564+delta
式中delta的值为:
从YCrCb色彩空间到RGB色彩空间的转换公式为:
R=Y+1.403·(Cr-delta)
G=Y-0.714·(Cr-delta)-0.344·(Cb-delta)
B=Y+1.773·(Cb-delta)
式中,delta的值与上面公式中的delta值相同。
4.1.4 HSV色彩空间
RGB是从硬件的角度提出的颜色模型,在与人眼匹配的过程中可能存在一定的差异,HSV色彩空间是一种面向视觉感陌上花开 9:19:57
知的颜色模型。HSV色彩空间从心理学和视觉的角度出发,指出人眼的色彩知觉主要包含三要素:色调(Hue,也称为色相)、饱和度(Saturation)、亮度(Value),色调指光的颜色,饱和度是指色彩的深浅程度,亮度指人眼感受到的光的明暗程度。
● 色调:色调与混合光谱中的主要光波长相关,例如“赤橙黄绿青蓝紫”分别表示不同的色调。如果从波长的角度考虑,不同波长的光表现为不同的颜色,实际上它们体现的是色调的差异。
● 饱和度:指相对纯净度,或一种颜色混合白光的数量。纯谱色是全饱和的,像深红色(红加白)和淡紫色(紫加白)这样的彩色是欠饱和的,饱和度与所加白光的数量成反比。
● 亮度:反映的是人眼感受到的光的明暗程度,该指标与物体的反射度有关。对于色彩来讲,如果在其中掺入的白色越多,则其亮度越高;如果在其中掺入的黑色越多,则其亮度越低。
在具体实现上,我们将物理空间的颜色分布在圆周上,不同的角度代表不同的颜色。因此,通过调整色调值就能选取不同的颜色,色调的取值区间为[0, 360]。色调取不同值时,所代表的颜色如下表所示,两个角度之间的角度对应两个颜色之间的过渡色。
色调值(度) | 颜色 |
---|---|
0 | 红色 |
60 | 黄色 |
120 | 绿色 |
180 | 青色 |
240 | 蓝色 |
300 | 品红色 |
饱和度为一比例值,范围是[0, 1],具体为所选颜色的纯度值和该颜色最大纯度值之间的比值。饱和度的值为0时,只有灰度。亮度表示色彩的明亮程度,取值范围也是[0, 1]。
在HSV色彩模型中,取色变得更加直观。例如,取值“色调=0,饱和度=1,亮度=1”,则当前色彩为深红色,而且颜色较亮;取值“色调=120,饱和度=0.3,亮度=0.4”,则当前色彩为浅绿色,而且颜色较暗。
在从RGB色彩空间转换到HSV色彩空间之前,需要先将RGB色彩空间的值转换到[0, 1]之间,然后再进行处理。具体处理方法为:
计算结果可能存在H<0的情况,如果出现这种情况,则需要对H进行进一步计算,如下:
由上述公式计算可知:
S∈[0,1]
V∈[0,1]
H∈[0,360]
当然,也可以通过公式完成从HSV色彩空间到RGB色彩空间的转换。
4.1.5 HLS色彩空间
HLS色彩空间包含的三要素是色调H(Hue)、光亮度/明度L(Lightness)、饱和度S(Saturation)。
与HSV色彩空间类似,只是HLS色彩空间用“光亮度/明度L(lightness)”替换了“亮度(Value)”。
● 色调:表示人眼所能感知的颜色,在HLS模型中,所有的颜色分布在一个平面的色调环上,整个色调环为360度的圆心角,不同的角度代表不同的颜色,如上表所示。
● 光亮度/明度:用来控制色彩的明暗变化,它的取值范围也是[0, 1]。我们通过光亮度/明度的大小来衡量有多少光线从物体表面反射出来。光亮度/明度对于眼睛感知颜色很重要,因为当一个具有色彩的物体处于光线太强或者光线太暗的地方时,眼睛是无法准确感知物体颜色的。
● 饱和度:使用[0, 1]的值描述相同色调、相同光亮度/明度下的色彩纯度变化。饱和度的值越大,表示颜色的纯度越高,颜色越鲜艳;反之,饱和度的值越小,色彩的纯度越低,颜色越暗沉。通常用该属性表示颜色的深浅,比如深绿色、浅绿色。