什么是颜色

颜色是通过眼、脑和我们的生活经验所产生的对光的视觉感受,我们肉眼所见到的光线,是由波长范围很窄的电磁波产生的,不同波长的电磁波表现为不同的颜色,对色彩的辨认是肉眼受到电磁波辐射能刺激后所引起的视觉神经感觉。

颜色的数字化

在相机系统中,外部世界的光信息(光子,photon)通过透镜或其他光学器件聚焦之后达到相机的图像传感器(CCD 或者 CMOS)。

  • 图像传感器可以将一个入射光子转换为对应的一个电子(electron)。
  • 在曝光时间内,图像传感器对转换的电子进行电荷积累。
  • 然后,图像传感器会将积累的电荷信号转换成对应的电压信号。
  • 最后,利用 ADC(模数变换器,analog-to-digital converter)把电信号转换成数字信号,而转换后的数字信号则为某个范围内的整数值。

ADC 转换之后的数字信号的取值范围受限于 ADC 设备。对于 8-bit 的 ADC 而言,数字信号的取值范围为 [0, 2^8-1],因此,对于每一个像素而言,会用 [0, 255] 之间的整数来进行编码。

ADC 转换的数字信号的数值是一个线性编码的过程,这意味着如果将图像传感器上的光量增加1倍,则 ADC 转换之后对应的数值也会增加1倍。这是一个非常有用的特性:无论是增加物理世界的光量,还是增加 ADC 转换之后的数值,对图片而言,都会带来相同的效果。线性编码意味着我们所处理的数据和光发射的强度成正比关系。

实际上,研究表明,人类视觉系统是以对数函数的方式来感知光亮度。这意味着,人眼会提高暗部的敏感度,降低高光部分的敏感度。

由于人类视觉感知系统不是以线性方式工作的,因此必须使用非线性曲线来对 ADC 生成的线性数据进行变换,从而使得拍摄的图像色调与我们的视觉系统的工作方式相匹配。这个过程也就是我们所说的伽马校正。

RGB颜色空间/模型

RGB(Red, Green, Blue)颜色空间最常用的用途就是显示器系统,彩色阴极射线管,彩色光栅图形的显示器 都使用R、G、B数值来驱动R、G、B 电子枪发射电子,并分别激发荧光屏上的R、G、B三种颜色的荧光粉 发出不同亮度的光线,并通过相加混合产生各种颜色;扫描仪也是通过吸收原稿经反射或透射而发送来 的光线中的R、G、B成分,并用它来表示原稿的颜色。RGB色彩空间称为与设备相关的色彩空间,因为不同 的扫描仪扫描同一幅图像,会得到不同色彩的图像数据;不同型号的显示器显示同一幅图像,也会有不同 的色彩显示结果。显示器和扫描仪使用的RGB空间与CIE 1931 RGB真实三原色表色系统空间是不同的,后者 是与设备无关的颜色空间。btw:Photoshop的色彩选取器(Color Picker)。可以显示HSB、RGB、LAB和CMYK 色彩空间的每一种颜色的色彩值。

RGB模型表示的图像由3个分量图像组成,每种原色一幅分量图像。当送入RGB监视器时,这3幅图像在屏幕上混合生成一幅合成的彩色图像。考虑一幅RGB图像,其中每一幅图红绿蓝图像都是一幅8比特图像。在这种情况下,可以说每个RGB彩色像素有24比特的深度。在24比特RGB图像中,颜色总数是{({28})3} = 16777216。下图为分别为RGB彩色立方体示意图 和 对应的RGB24比特彩色立方体。
在这里插入图片描述
在这里插入图片描述

常用RGB/YUV格式

constexpr int32_t COLOR_Format12bitRGB444
constexpr int32_t COLOR_Format16bitARGB1555 
constexpr int32_t COLOR_Format16bitARGB4444
constexpr int32_t COLOR_Format16bitBGR565
constexpr int32_t COLOR_Format16bitRGB565
constexpr int32_t COLOR_Format18bitARGB1665
constexpr int32_t COLOR_Format18BitBGR666
constexpr int32_t COLOR_Format18bitRGB666
constexpr int32_t COLOR_Format19bitARGB1666
constexpr int32_t COLOR_Format24BitABGR6666
constexpr int32_t COLOR_Format24bitARGB1887
constexpr int32_t COLOR_Format24BitARGB6666
constexpr int32_t COLOR_Format24bitBGR888
constexpr int32_t COLOR_Format24bitRGB888
constexpr int32_t COLOR_Format25bitARGB1888
constexpr int32_t COLOR_Format32bitABGR8888
constexpr int32_t COLOR_Format32bitARGB8888
constexpr int32_t COLOR_Format32bitBGRA8888
constexpr int32_t COLOR_Format8bitRGB332
constexpr int32_t COLOR_FormatL16
constexpr int32_t COLOR_FormatL2
constexpr int32_t COLOR_FormatL24
constexpr int32_t COLOR_FormatL32
constexpr int32_t COLOR_FormatL4 
constexpr int32_t COLOR_FormatL8 

YUV颜色空间/模型

YUV,是一种颜色编码方法,面向存储。常使用在各个视频处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。YUV是编译true-color颜色空间(color space)的种类,Y’UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。“Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度、浓度(Chrominance、Chroma)。

在现代彩色电视系统中,通常采用三管彩色摄像机或彩色CCD(点耦合器件)摄像机,它把摄得的彩色图像 信号,经分色、分别放大校正得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y、B-Y, 最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这就是我们常用的YUV色彩空间。 采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量, 那么这样表示的图就是黑白灰度图。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机 的兼容问题,使黑白电视机也能接收彩色信号。根据美国国家电视制式委员会,NTSC制式的标准,当白光的 亮度用Y来表示时,它和红、绿、蓝三色光的关系可用如下式的方程描述:Y=0.3R+0.59G+0.11B 这就是常用 的亮度公式。色差U、V是由B-Y、R-Y按不同比例压缩而成的。如果要由YUV空间转化成RGB空间,只要进行 相反的逆运算即可。与YUV色彩空间类似的还有Lab色彩空间,它也是用亮度和色差来描述色彩分量,其中L为 亮度、a和b分别为各色差分量。

constexpr int32_t COLOR_FormatCbYCrY
constexpr int32_t COLOR_FormatCrYCbY
constexpr int32_t COLOR_FormatYCbYCr
constexpr int32_t COLOR_FormatYCrYCb
constexpr int32_t COLOR_FormatYUV411PackedPlanar
constexpr int32_t COLOR_FormatYUV411Planar
constexpr int32_t COLOR_FormatYUV420Flexible
constexpr int32_t COLOR_FormatYUV420PackedPlanar
constexpr int32_t COLOR_FormatYUV420PackedSemiPlanar
constexpr int32_t COLOR_FormatYUV420Planar
constexpr int32_t COLOR_FormatYUV420SemiPlanar
constexpr int32_t COLOR_FormatYUV422Flexible
constexpr int32_t COLOR_FormatYUV422PackedPlanar
constexpr int32_t COLOR_FormatYUV422PackedSemiPlanar
constexpr int32_t COLOR_FormatYUV422Planar
constexpr int32_t COLOR_FormatYUV422SemiPlanar
constexpr int32_t COLOR_FormatYUV444Flexible
constexpr int32_t COLOR_FormatYUV444Interleaved
constexpr int32_t COLOR_FormatYUVP010

CMY/CMYK颜色空间/模型

CMY是工业印刷采用的颜色空间。它与RGB对应。简单的类比RGB来源于是物体发光,而CMY是依据反射光得到的。具体应用如打印机:一般采用四色墨盒,即CMY加黑色墨盒

大多数在纸上沉积彩色颜料的设备,如彩色打印机和复印机,要求输入CMY(Cyan, Magenta,Yellow)数据或在内部进行RGB到CMY的转换。

注意:上式表明涂有青色颜料的表面所反射的光中不包含红色(C-1-R)。类似的,纯深红色不反射绿色,纯黄色不反射蓝色。其实,RGB值可以很容易通过1减去CMY值得到。在实际图像处理中,这种彩色模型主要用于产生硬拷贝输出,依次从CMY到RGB的反向操作通常没有实际意义。在实际应用中,黑色可以直接获取,不需要从三原色合成,并且合成的黑色也不纯。所以为了生成真正的黑色,加入了黑色——CMYK模型。毕竟黑白打印较多,直接使用黑色原料不仅成本少,而且颜色比较纯。

CMYK(Cyan, Magenta,Yellow, blacK)颜色空间应用于印刷工业,印刷业通过青©、品(M)、黄(Y)三原色油墨的不同 网点面积率的叠印来表现丰富多彩的颜色和阶调,这便是三原色的CMY颜色空间。实际印刷中,一般采用青 ©、品(M)、黄(Y)、黑(BK)四色印刷,在印刷的中间调至暗调增加黑版。当红绿蓝三原色被混合时,会产生 白色,但是当混合蓝绿色、紫红色和黄色三原色时会产生黑色。既然实际用的墨水并不会产生纯正的颜色, 黑色是包括在分开的颜色,而这模型称之为CMYK。CMYK颜色空间是和设备或者是印刷过程相关的,则工艺方法、 油墨的特性、纸张的特性等,不同的条件有不同的印刷结果。所以CMYK颜色空间称为与设备有关的表色空间。 而且,CMYK具有多值性,也就是说对同一种具有相同绝对色度的颜色,在相同的印刷过程前提下,可以用分种 CMYK数字组合来表示和印刷出来。这种特性给颜色管理带来了很多麻烦,同样也给控制带来了很多的灵活性。 在印刷过程中,必然要经过一个分色的过程,所谓分色就是将计算机中使 用的RGB颜色转换成印刷使用的CMYK 颜色。在转换过程中存在着两个复杂的问题,其一是这两个颜色空间在表现颜色的范围上不完全一样,RGB的 色域较大而CMYK则较小,因此就要进行色域压缩;其二是这两个颜色都是和具体的设备相关的,颜色本身没有 绝对性。因此就需要通过一个与设备无关的颜色空间来进行转换,即可以通过以上介绍的XYZ或LAB色空间来 进行转换。

HSI颜色空间/模型 (Hue, Saturation, Intensity )

RGB系统与人眼强烈感知红绿蓝三原色的事实能很好地匹配。但RGB模型和CMY/CMYK模型不能很好地适应实际上人解释的颜色。所以引出HIS模型。
HSI (Hue, Saturation, Intensity )模型是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation)和亮度 (Intensity)来描述色彩。色调是描述纯色(纯黄色、纯橙色或纯红色)的颜色属性。饱和度是一种纯色被白光稀释的程度的度量。亮度是一个主观描述子,体现无色的强度概念。HIS模型开发基于彩色描述的图像处理算法的理想工具,这种描述对人来说是自然且直观的,毕竟人才是这些算法的开发者和使用中者,怎么舒服怎么来。

HSI色彩空间可以用一个圆锥空间模型来描述,如下图所示。色彩空间的圆锥模型相当复杂,但确能把色调、亮度和色饱和度的变化情形表现得很清楚。在HSI色彩空间可以大大简化图像分析 和处理的工作量。HSI色彩空间和RGB色彩空间只是同一物理量的不同表示法,因而它们之间存在着转换关系。
在这里插入图片描述

HSV颜色空间/模型 (Hue, Saturation, Value)

在图像处理中使用较多的是 HSV 颜色空间,它比 RGB 更接近人们对彩色的感知经验。非常直观地表达颜色的色调、鲜艳程度和明暗程度,方便进行颜色的对比。在 HSV 颜色空间下,比 BGR 更容易跟踪某种颜色的物体,常用于分割指定颜色的物体。

HSV 表达彩色图像的方式由三个部分组成:

  • Hue(色调、色相)
  • Saturation(饱和度、色彩纯净度)
  • Value(明度)

用下面这个圆柱体来表示 HSV 颜色空间,圆柱体的横截面可以看做是一个极坐标系 ,H 用极坐标的极角表示,S 用极坐标的极轴长度表示,V 用圆柱中轴的高度表示。
在这里插入图片描述

HSB 模型(Hue, Saturation, Brightness)

HSB(Hue, Saturation, Brightness)模型的基础是对立色理论,对立色理论源于人们对对立色调(红和绿、黄和蓝)的观察事实(对立色调的颜色叠加,它们会相互抵消)。HSB模型是普及型设计软件中常见的色彩模式,其中H代表色相;S代表饱和度;B代表亮度。
在这里插入图片描述
色调H(Hue):在0~360°的标准色环上,按照角度值标识。比如红是0°、橙色是30°等。

饱和度S( Saturation ):是指颜色的强度或纯度。饱和度表示色相中彩色成分所占的比例,用从0%(灰色)~100%(完全饱和)的百分比来度量。在色立面上饱和度是从左向右逐渐增加的,左边线为0%,右边线为100%。

亮度B( Brightness ):是颜色的明暗程度,通常是从0(黑)~100%(白)的百分比来度量的,在色立面中从上至下逐渐递减,上边线为100%,下边线为0% 。

HSL色彩模型 (Hue, Saturation, Lightness)

类似于人眼对颜色的感知方式。HSL将RGB色彩模型中的点在圆柱坐标系中表示,H-色相,如红色、黄色等;S-饱和度,取0-100%;L-亮度,取0-100%
在这里插入图片描述

CIEXYZ色彩模型

为人眼实际感知的物体色彩响应值,是一种设备无关的颜色系统,可以由反射率、CIE XYZ人眼颜色匹配函数、光源SPD (Spectral Power Distribution)量化,是一种非均匀的颜色空间。各颜色空间各自独立,但可以通过XYZ作为媒介,变换至其他的颜色空间 。

CIELAB色彩模型

是一种设备无关的颜色系统,基于一种颜色不能同时既是蓝又是黄这个理论而建立。同一个椭圆内的颜色人眼观察起来是相同的,可见CIELAB的椭圆大小和形状优于CIELUV,是一种相对均匀的颜色空间。
在这里插入图片描述

同RGB颜色空间相比,Lab(Commission International EclairageLab)是一种不常用的色彩空间。它是在1931年国际照明委员会(Commission International Eclairage, CIE)制定的颜色度量国际标准的基础上建立起来的。1976年,经修改后被正式命名为CIELab。它是一种设备无关的颜色系统,也是一种基于生理特征的颜色系统。这也就意味着,它是用数字化的方法来描述人的视觉感应。Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。下图所示为Lab颜色空间的图示:
在这里插入图片描述
Lab颜色空间比计算机显示器、打印机甚至比人类视觉的色域都要大,表示为 Lab 的位图比 RGB 或 CMYK 位图获得同样的精度要求更多的每像素数据。虽然我们在生活中使用RGB颜色空间更多一些,但也并非Lab颜色空间真的一无所有。例如,在 Adobe Photoshop图像处理软件中,TIFF格式文件中,PDF文档中,都可以见到Lab颜色空间的身影。而在计算机视觉中,尤其是颜色识别相关的算法设计中,rgb,hsv,lab颜色空间混用更是常用的方法。

CIELCH色彩模型

采用了同CIELAB一样的颜色空间,但它采用L表示明度值,C表示饱和度以及H表示色调角度值的柱形坐标
在这里插入图片描述

参考文档

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐