欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

色彩空间基础

发布时间:2023/12/14 67 豆豆
生活随笔 收集整理的这篇文章主要介绍了 色彩空间基础 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

本次的文章参考知乎章佳杰的文章:
色彩空间基础
色彩空间表示与转换

基础

大部分人类的视网膜上有三种感知颜色的感光细胞,叫做锥细胞,分别对不同波长的光线敏感,称为L/M/S型细胞。
三种视锥细胞最敏感的波长分别是橙红色(长波,Long),绿色(中波,Medium),蓝色(短波,Short)。这三种视锥细胞的归一化感光曲线如下图:

大自然的这千千万万种颜色,在人类的眼里看到,最后传送到大脑里的信号,就只有这三种视锥细胞的电信号而已。根据这三种电信号的强弱,大脑解读成了不同的颜色。这就是三原色理论的生物学依据。

人类眼睛对不同颜色光线混合的反应是线性叠加的。

CIE RGB 色彩空间

使用三种颜色RGB叠加,三种颜色的强度分别为rgb,来模拟某个波长的颜色。
纯光谱色的混合叠加数据,就叫做色匹配函数。这个基准下定义的色彩空间,就是CIE RGB色彩空间。

通过色匹配函数(Color Matching Function, CMF),可以将任何一种物理上的光谱分布,转换到线性色彩空间中。

CIE XYZ 色彩空间

因为有部分出现了负数,在使用和计算上都有不方便,因此就对这个匹配函数进行了一下线性变换,变换到一个所有分量都是正的空间中。变换后的色彩空间就是 CIE XYZ 色彩空间。

从线性空间的角度理解色彩空间

人类的色视觉,是相当于在自然界所有颜色的无穷维函数空间中取了一个三维的投影。这个三维空间的基底,既可以是视锥细胞的感光特性曲线(我们的大脑就用的是这套),当然也可以是选取三种颜色的光进行组合(CIE RGB 空间),甚至还可以是用实际中不存在的「光线」进行组合 (CIE XYZ 空间)。

既然这几个空间实际上是同一个线性空间,只不过由于选择了不同的基底而有不同的表达形式,那么根据线性代数的结论,这几个空间的表述形式之间,只需要通过矩阵乘法就可以完成转换,这是完全的线性变换

设备相关的RGB色彩空间

如前文所述,色彩空间的基底的选择有一定的任意性。事实上,如果允许真正的减法存在,那么选择哪三种颜色作为基底是无关紧要的。不过由于实际中我们不能对色光采用减法,只能使用「锥组合」而非「线性组合」,这时候到底如何选取基底就显得重要了。好的基底不仅能表达的颜色更丰富,而且工程上也易于稳定地实现。

CIE XYZ空间是一个很方便的线性空间,与具体的设备无关,因此经常用来做各种颜色空间转换的中间媒介。

要想要某个颜色的光,经过色匹配函数的计算,得到了XYZ的值,如果直接将这三个值作为RGB颜色显示到屏幕上,显然是不对的。必须将XYZ的值转换到RGB空间中的值。
得到线性RGB空间的表示之后,还需要经过伽马校正,才是最终在屏幕上显示的RGB的值。

对于 RGB 色彩空间来说,关键点在于两个:1. 如何选择三个作为基底的颜色;2. 如何定义白色。一旦选好这两个关键参数,那么从 CIE XYZ 空间到设备的 RGB 空间的转换就完全确定了。我们平时常说的 sRGB 空间和 Adobe RGB 空间,他们的区别就在于这两个关键参数的定义不同。
不同的RGB色彩空间所能表示的颜色的范围是不一样的,即使是相同的RGB分量,在不同的RGB空间中所代表的颜色也是不一样的。
很多的数码相机都可以设置色彩空间,常见的有Adobe RGBsRGBsRGB是目前屏幕显示的事实标准,大多数屏幕都在sRGB内。

色彩椎体

如果把纯光谱色画在 CIE XYZ 空间中,得到下图这样的曲线。

连接原点与这条曲线得到的无数条射线,包围出来一个「锥体」,这个锥体就是人所能感知的所有色彩。

这个曲线在三维空间中是一个极度扭曲的曲线,不论是用来展示还是辅助计算都不方便。我们可以将这条曲线投影到x+y+z=1的平面(上图中的黄色平面)上,进行归一化。在这个归一化的平面上,光谱色曲线就是一条形状像是舌头的曲线。这个舌头形状的图,就叫「色品图(Chromaticity Diagram)」,所有纯光谱色,构成色品图的边界。在上面那个图中从上往下看,黄色平面上,色品图(的边界)是这个样子的:

图中蓝色数字标明了纯光谱色对应的波长。

XYZ空间到RGB空间的转换

之前的文章说到,定义一个 RGB 空间,关键在于两个参数:
1. RGB 三点的坐标;
2. 白色点的位置。

这里就以 sRGB 空间为例,说说如何根据这两个参数确定转换关系的。

根据定义,sRGB 的三原色以及白色点的 XYZ 坐标是:

白色点的意义在于校准三原色在向量空降中的长度,使得当 RGB = (1, 1, 1) 的时候正好对应的是白色。也就是列出这个方程:

W=wrR+wgG+wbBW=wrR+wgG+wbB

或者写成矩阵形式
W=[R,G,B]wW=[R,G,B]w
求解出 wrwr, wgwg, wbwb 各个系数。这是个三元一次方程,在计算机上非常容易求解,即使手工求解也不难。
w=[R,G,B]1Ww=[R,G,B]−1W
对于 sRGB 的情况来说,带入数字,可得
w=[R,G,B]1W=0.640.330.030.300.600.100.150.060.7910.950471.000001.08883=0.64451.19191.2029w=[R,G,B]−1W=[0.640.300.150.330.600.060.030.100.79]−1[0.950471.000001.08883]=[0.64451.19191.2029]
接下来,对于某一种颜色 C = (x, y, z),它对应的 sRGB 坐标是多少呢?也就是如果将校正长度后的 RGB 三原色作为新的基底,那么各个分量都是多少呢?我们可以写出新的方程:
C=r(wrR)+g(wgG)+b(wbB)C=r(wrR)+g(wgG)+b(wbB)
或者写成矩阵形式
CXYZ=[R,G,B]wr000wg000wbrgb=[wrR,wgG,wbB],CRGBCXYZ=[R,G,B][wr000wg000wb][rgb]=[wrR,wgG,wbB],CRGB
根据这个所以,从 sRGB 到 XYZ 的转换矩阵就是:
M=[wrR,wgG,wbB]=0.412480.212690.0193350.357570.775140.119190.180440.0721740.95029M=[wrR,wgG,wbB]=[0.412480.357570.180440.212690.775140.0721740.0193350.119190.95029]

那么从 XYZ 转到 sRGB 的矩阵就是他的逆矩阵:
M1=[wrR,wgG,wbB]1=3.240450.969270.0556431.537141.876010.204030.498530.0415561.05722M−1=[wrR,wgG,wbB]−1=[3.24045−1.53714−0.49853−0.969271.876010.0415560.055643−0.204031.05722]
注意到,这里的矩阵中出现了负数,也就是说,从 CIE XYZ 空间转换到 sRGB 空间,是有可能使得中间某个分量小于 0 的。

sRGB 空间下,所有色彩,都将位于这个三角形内部;转换到三维空间的视角来看,sRGB 空间能表达的色彩,都位于以原点为顶点,连接这个三角形,所有射线围成的锥体内部。如果某个分量小于 0,那么意味着,这个色彩,是落在了这个三角形外部,所以不能被 sRGB 空间所表示出来。

伽马校正

在转换完之后,我们只是得到了一个线性的 RGB 值,要被显示器正确显示的话,还需要进行 gamma 校正。

每个 RGB 空间对应的 gamma 校正公式不完全一致,大多数情况下都是 C=C1/γlinC=Clin1/γ,其中 γ=2.2。

少数情况,比如 Apple RGB 采用的是 γ=1.8 的情况,再比如上面作为举例的 sRGB 空间,采用了一种分段的非线性函数进行校正,在粗略的场景下,也可以直接使用 γ=2.2 的公式代替。

不同色彩空间比较的图

在很多地方,可能都会看到这样的图片,尤其是很多手机或者笔记本的屏幕标准。

Adobe RGB 与 sRGB 相比较,能表示的颜色要多很多,所以很多摄影师会在相机内设置 Adobe RGB 作为色彩空间。然而现在网络上通用的还是 sRGB,如果不做任何转换,浏览器可能将它视作 sRGB 空间进行渲染,得到的结果就会显得比较灰暗。所以在把图片上传到网络之前,一定要确认色彩空间是否匹配。而在部分专业的色彩输出场合,甚至需要用到 ProPhoto RGB 这种表达能力极强的色彩空间。

总结

以上是生活随笔为你收集整理的色彩空间基础的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。