前言
如果看过之前的介绍的图像颜色迁移《color transfer between images》和颜色协调模型Color Harmoniztion就会发现,大部分图像处理算法虽然输入输出是RGB
像素值,但是中间进行算法处理时很少直接更改RGB
值,而是转换到其它空间,使得各颜色分量之间的影响越小越好,而RGB
像素值互相影响比较严重,有文章研究发现当图像蓝色通道值比较大的时候,红绿通道值也比较大,不然会出现一些诡异的颜色。
为了更好地理解各类传统的图像算法理论,我们需要对色彩空间有一个大概的认识。
国际惯例,参考博客:
维基百科: Color Space
维基百科:List of color spaces and their uses
知乎《色彩空间与色彩模型的本质区别是什么?》
简书区分色彩模型和色彩空间《Color Space (2)》
简书《UI 设计知识库 [01] 色彩 · 理论》
简书《深入理解color model(颜色模型)》
论文《Color Transfer in Correlated Color Space》
书籍《Color Space and Its Divisions:Color Order from Antiquity to the Present》
知乎《数字图像处理之6大颜色空间》
CSDN《颜色空间:RGB,CMY,HSV,HSL,Lab详解》
博客《色彩空间RGB/CMYK/HSL/HSB/HSV/Lab/YUV基础理论及转换方法:RGB与YUV》
知乎《色彩空间中的 HSL、HSV、HSB 有什么区别?》
知乎《RGB、HSV和HSL颜色空间》
GitHub文章《颜色模式—RGB、HSL、HSB、HSV、CMYK》
冈萨雷斯的《数字图像处理》
重点概念
主要介绍色彩模型、色彩空间的概念和区别,然后概览一下色彩空间大概有哪些,中间会重点描述部分色彩空间。
色彩模型和色彩空间
色彩模型Color Model
:一种抽象的数学模型,用一组数值来表示颜色,通常是一个三元组、四元组或者颜色分量。有五类最主要的色彩模型(CIE, RGB, YUV, HSL/HSV, CMYK)
色彩空间Color Space
:当色彩模型与特定的描述相关联以后,就称为色彩空间。也就是说色彩模型数组中每一个分量都具有特定的含义了,通常是任意挑选的一些颜色或者具有严谨的数学定义,比如Adobe RGB、sRGB等。通过某些变换可以将一种颜色空间变换到另一个颜色空间,比如我们经常将RGB转成HSV或者LAB处理。
色域Color gamut
:是颜色的某个完全子集。比如一个给定色彩空间或者某个输出装置的呈色范围。比如最常用的是24-位实现方法,也就是红绿蓝每个通道有8位或者256色级。基于这样的24-位RGB模型的色彩空间可以表现256×256×256 ≈ 1677万色。
(互)补色Complementary Colour
:当成对的颜色组合时,能够互相抵消。也就是组合时会产生灰阶色彩,比如白色或黑色;放在相邻位置时,会造成很强烈的对比度。下图环上相对的颜色就是补色。
绝对色彩空间Absolute Color Space
:有两个含义①颜色之间的不同就是色彩空间中表示颜色的点的距离;②颜色空间中的颜色比较模棱两可,它不受任何外部因素的影响。但是如果精确定义了各种分量,非绝对色彩空间也可以转换为绝对色彩空间。比如RGB色彩模型是通过红绿蓝三个通道混合成色,但是不同设备对这三个颜色的定义并不是精确和标准的,所以不同设备上同一副RGB图像看起来会很不一样。业界比较受欢迎的做法是通过定义一个包含RGB属性的ICC协议将RGB转换到绝对色彩空间,最为广泛的就是sRGB和Adobe RGB。
【注意】
-
色彩空间具体化了色彩模型,色彩空间要有确切的定义,比如使用 RGB 色彩模型的 sRGB 色彩空间最大红色的定义就是CIE XYZ: 0.4360657, 0.2224884, 0.013916。维基百科上列出了大部分色彩模型对应的色彩空间
-
如果色彩模型和绝对色彩空间没有映射关系,那么这个色彩模型就对应任意的颜色体系,它的颜色无法以一种容易理解的方式阐述。
-
如果色彩模型和绝对色彩空间有映射关系,那么就会在色彩空间中出现一个有限覆盖区域(依据不同的映射函数确定),这个区域就叫做色域。如Adobe RGB和sRGB都基于RGB颜色模型,但它们是两个不同绝对色彩空间。下图展示了不同的RGB绝对色彩空间的色域(在CIExy色图度中显示):
-
定义色彩空间通常用CIELAB和CIEXYZ色彩空间作为标准,因为这两个色彩空间在设计时便要求包含普通人眼可见的所有颜色。
-
在很多教程包括冈萨雷斯的《数字图像处理》中,并没有区分色彩模型和色彩空间。维基百科上也给出了解释由于“色彩空间”有着固定的色彩模型和映射函数组合,非正式场合下,这一词汇也被用来指代色彩模型。尽管固定的色彩空间有固定的色彩模型相对应,这样的用法严格意义上是错误的。
部分色彩空间列表
注意即使是不同色彩模型下的色彩空间也是可以互相转换的,比如可以查阅维基百科上面的sRGB到CIEXYZ的变换,或者看图像颜色迁移《color transfer between images》中RGB到LAB的转换。
CIE
定义色彩空间时,通常使用 CIELAB或者 CIEXYZ色彩空间作为参考标准。这两个色彩空间在设计时便要求包含普通人眼可见的所有颜色。
CIE 1931 XYZ
色彩空间是第一次基于人眼对于色彩感知度量创建色彩空间的尝试,它是几乎所有其它色彩空间的基础,CIE RGB
和 CIE XYZ
两者其实是同一个线性空间的不同表达,因此两者的转换可以通过转换矩阵实现。
[XYZ]=[2.76881.75171.13011.00004.59060.060100.05655.5942][RGB][RGB]=[0.4185−0.1587−0.0828−0.09120.25240.01570.0009−0.00250.1786][XYZ]\begin{bmatrix} X\\Y\\Z \end{bmatrix}=\begin{bmatrix} 2.7688&1.7517&1.1301\\ 1.0000&4.5906&0.0601\\ 0&0.0565&5.5942 \end{bmatrix}\begin{bmatrix} R\\G\\B \end{bmatrix}\\ \begin{bmatrix} R\\G\\B \end{bmatrix}=\begin{bmatrix} 0.4185&-0.1587&-0.0828\\ -0.0912&0.2524&0.0157\\ 0.0009&-0.0025&0.1786 \end{bmatrix}\begin{bmatrix} X\\Y\\Z \end{bmatrix} ⎣⎡XYZ⎦⎤=⎣⎡2.76881.000001.75174.59060.05651.13010.06015.5942⎦⎤⎣⎡RGB⎦⎤⎣⎡RGB⎦⎤=⎣⎡0.4185−0.09120.0009−0.15870.2524−0.0025−0.08280.01570.1786⎦⎤⎣⎡XYZ⎦⎤
CIE色彩空间的变体有:
CIELUV
色彩空间 - 修改来更加方便的显示颜色差异,替代:CIE 1964 U×V×W
×统一色彩空间CIELAB
色彩空间:是颜色-对立空间,带有维度L表示亮度(0~100),a代表绿色到红色的分量(-128~127),b代表蓝色到黄色的分量(-128~127)。基于非线性压缩的CIE XYZ色彩空间坐标变换得到,是用来描述人眼可见的所有颜色的最完备的色彩空间。优点:不像RGB和CMYK色彩空间,Lab颜色被设计来接近人类视觉。它致力于感知均匀性,它的L分量密切匹配人类亮度感知。因此可以被用来通过修改a和b分量的输出色阶来做精确的颜色平衡,或使用L分量来调整亮度对比。这些变换在RGB或CMYK中是困难或不可能的——它们建模于物理设备的输出,而不是人类的视觉感知。- CIE-Yxy:该模型由CIE-XYZ衍生得来。其中, Yxy中的Y表示光的亮度。这个模型投影到x-y平面上即上面的CIE1931-XYZ色度图。其中x、y分量的取值范围是[0,1]。有时该模型也被称作CIE-xyY。
RGB
RGB 只是色彩模型,色彩模型没有色域或者色彩范围的概念,RGB 只是规定用 RGB 来表示色彩,没规定范围。
RGB采用加法混色法,因为它是描述各种“光”通过何种比例来产生颜色。光线从暗黑开始不断叠加产生颜色。RGB描述的是红绿蓝三色光的数值。RGBA是在RGB上增加阿尔法通道实现透明效果。
基于RGB色彩模型的普通色彩空间有:
- sRGB色彩空间(standard Red Green Blue,标准红绿蓝色彩空间):是惠普与微软于1996年一起开发的用于显示器、打印机以及因特网的一种标准RGB色彩空间,主要针对显示器而设计的。
- AdobeRGB 是 1998 年 Adobe 制定的色彩空间,它设计的一个要求就是要超过 sRGB 的色域,是为了同时针对印刷和显示器(也就是数字印刷)设计的。
- Adobe Wide Gamut RGB:宽色域RGB色彩空间是1998年Adobe对sRGB色彩空间的扩充,可以存储比sRGB更广的颜色值,它包含LAB色彩空间中可视色彩的77.6%,而sRGB仅包括50.6%。
YUV
YUV,是一种颜色编码方法。常使用在各个影像处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。Y’代表明亮度,而U与V存储色度部分; 亮度记作Y,而Y’的prime符号记作伽玛校正。UV分别代表不同颜色信号,所以直接使用R与B信号表示色度的UV, 也就是说UV信号告诉了电视要偏移某象素的的颜色,而不改变其亮度,或者UV信号告诉了显示器使得某个颜色亮度依某个基准偏移, UV的值越高,代表该像素会有更饱和的颜色。
基于YUV的色彩空间有:
- YUV和Y’UV通常用来编码电视的模拟信号,通常已经在电脑系统上广泛使用。
- YCbCr则是用来描述数字的影像信号,适合视频与图片压缩以及传输。RGB诉求于人眼对色彩的感应,YUV则着重于视觉对于亮度的敏感程度,Y代表的是亮度,UV代表的是彩度(因此黑白电影可省略UV,相近于RGB),分别用Cr和Cb来表示,我们现在大多数讲的YUV,基本是指Y’CbCr。
- YIQ 是另一种视觉亮度拆分模型,与 YUV 很相似,是 NTSC 彩色电视的标准,国内不太常见,因为国内用的是 PAL 标准,PAL 标准使用的是 YUV。
CMY/CMYK
印刷四分色模式是彩色印刷时采用的一种套色模式,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。四种标准颜色是:
- C:Cyan = 青色
- M:Magenta = 洋红色,又称为“品红色”
- Y:Yellow = 黄色
- K:blacK = 黑色
CMYK印刷过程中使用减法混色法(注意与RGB的加法混色法区分),因为它描述的是需要使用何种油墨,通过光的反射显示出颜色。它是在一种白色介质(画板,页面等)上使用油墨来体现图像。CMYK描述的是青、品红、黄和黑四种油墨的数值。根据不同的油墨,介质,和印刷特性,存在多种CMYK色彩空间,具体有 Japan Color 2001 Uncoated、US web Coated 等 CMYK 色彩空间。可以通过色点扩张或者转换各种油墨数值从而得到不同的外观。CMY是减色混色模型,颜色混在一起,亮度会降低。之所以加入黑色是因为打印时由品红、黄、青构成的黑色不够纯粹。
HSV/HSL
它俩都可由sRGB变换得到,但是有区别
- HSV(色相:Hue、饱和度:Saturation、明度;Value),也称HSB(B指Brightness)是艺术家们常用的,因为与加法减法混色的术语相比,使用色相、饱和度等概念描述色彩更自然直观。HSV是RGB色彩空间的一种变形,它的内容与色彩尺度与其出处——RGB色彩空间有密切联系。
- HSL(色相:Hue、饱和度:Saturation、亮度:Lightness/Luminance),也称HLS或HSI(I指Intensity)与HSV非常相似,仅用亮度(Lightness)替代了明度(Brightness)。二者区别在于,一种纯色的明度等于白色的明度,而纯色的亮度等于中度灰的亮度。
尽管在HSL和HSV中“色相”指称相同的性质,它们的“饱和度”的定义是明显不同的。它俩的区别直接从下图自行对比即可。
后记
这篇博文只是对图像里颜色做一个简单的描述,了解就行,不是搞信号处理的没必要记得非常清楚,只需要在论文中看到相关词汇不会不认识就行了。
本博文无代码,内容已同步到微信公众号