仓库源文站点原文


layout: post title: 从光谱到颜色 categories:


2014-12-08 11:02:23

颜色是一种很奇妙的东西, 通常看到的颜色受多种条件影响, 计算机显示的颜色也是一样. 相关的学科是色度学, 其中的关键是确定颜色匹配函数和定义颜色空间, 有了这两种东西就可以定量地描述颜色了.

国际照明委员会简称CIE(为其法文缩写)制定了颜色匹配函数(或称标准色度观察者), 开始时直接使用了基于红蓝绿的CIE-RGB颜色空间. 但基于此空间的颜色匹配函数会出现负值, 理解使用上都不方便, 所以CIE又定义了CIE-XYZ颜色空间, 以后还定义了CIE-L'a'b', CIE-L'u'v'颜色空间. 这些颜色空间之间存在换算关系, 可互相转换, 目前使用最广的是最早定义的CIE-XYZ系统.

通常我们实验上得到的是物质的光谱, 如各种吸收光谱, 发射光谱. 如何将这些光谱转变为具体的颜色就需要色度学的知识.

设光源的相对光谱功率分布函数为 $S(\l)$, 物质的吸收函数为 $R(\l)$, 则颜色三刺激值

$$\alg X &= k \int S(\l) R(\l) \bar x(\l) d\l \ Y &= k \int S(\l) R(\l) \bar y(\l) d\l \ Z &= k \int S(\l) R(\l) \bar z(\l) d\l \ k &= {100 \over \int S(\l) R(\l) \bar y(\l) d\l} \ \ealg$$

其中 $\bar x(\l), \bar y(\l), \bar z(\l)$ 为颜色匹配函数. 注意 $Y$ 同时被定义为代表强度.

有了颜色三刺激值后, 即可得到色度坐标,

$x={X \over X+Y+Z}, y={Y \over X+Y+Z}$

从CIE标准图上即可查出具体的颜色.

利用计算机显示颜色时, 一般使用sRGB颜色空间, 从CIE-XYZ空间向sRGB空间的转换可参考sRGB的标准. 由于sRGB的色域小于CIE-XYZ, 所以在显示的时候不可能表现出所有的颜色, 这不可避免地会引起失真. 因此要想得到逼真的光谱色并不是一件容易的事情. 目前的近似解决方案很多, 最简单的是将得到的RGB值加上一个值以保证其所有值为正, 或者根据sRGB的白点将色域外的值取为边界值.

下面是各种模拟的光谱和色度图

参考资料