色彩发送
色彩认知
- 光源是出生点,光源发射出光线,光线通过直射反射折射等路径最终进入人眼;
- 人眼接收光线后,人眼细胞产生一系列化学反应;
- 由此把信号传入大脑,最终大脑对颜色产生认知;
光的要素
图中少了折射
光源
定义: 光源就是产生光的物体。若没有光,我们就无法在黑暗中看到色彩,光本质是一种处于特定频段的光子流,光在未进入我们眼睛前,我们对它的认知是一种波长与能量分布;
在实时渲染中,我们通常把光源当成一个没有体积的点,用l来表示它的方向;
在光学里,我们用辐照度(入射表面的辐射通量,单位:瓦特每平方米)来量化光;
波长
定义:光理论上讲无限大,只是人眼可见光是局限的。
太阳光在最亮时是白色,然后逐渐变黄色再变红色,蓝色光最亮也是白色,再逐渐变淡蓝再到深蓝色再到暗蓝色;
如果没有光,我们就无法在黑暗中看到色彩,光的本质就是一种物理现象,光在没有进入我们的眼睛前,我们对它的认知是一种波长与能量分布。
能量分布
定义:我们说光是一种处于特定频段的光子流,光子试穿波粒二象性的,而所有的波都携带能量,能量物理学单位是焦耳。
一个光可以是由多个波长组合成起来的波形。在图像处理中可以通过这种方式组成不同滤波,用来去除噪点等。
也就是说我们在阐述色彩用波长就可以,为了保证能简单描述色彩,于是有了分光光度计;
分光光度计
定义:分光光度计又称光谱仪用于将成分复杂的光,分解为光谱线,进行定性或定量分析。我们通过分光光度计对区间波长进行感应与测量,最后得知光谱分布,得知光线能量集中在 550nm 附近
获得的结果:
- 拆分光线获得单一波长光;
- 测量单一波长光的能量
光的传播
包含直射光(光源直射眼睛),折射光(光源穿过物体进入眼睛),反射光(光源经过物体表面反射进入眼睛)
光线追踪是用于根据权重计算光线,确定最后进入人眼的颜色的技术
光通过反射或折射后,部分能量会被物体吸收,在经过多次反射或折射都会或多或少对光的能量分布产生一定影响。简单根据能量分布图,可以得出结论:物体吸收光功率的大部分在 600nm 左右,即物体吸收的光是黄色与绿色的光;
光由光源发出后,会与一些物体相交,结果要么散射,要么吸收。散射只改变光线的方向但不改变光线密度和颜色,吸收只改变光线密度和颜色不改变方向。散射到物体内部叫折射或透射,散射到外部则称为反射;
色彩接收
相对亮度感知
在某些阴暗的环境下,点亮一盏灯,此时人眼会觉得很亮。同时点亮1000盏灯,感觉可能只是10倍亮,亮度的认知从 0 到 1 再从 1 到 10。
人眼HDR
人眼可以分辨出高亮度的云彩不同层次,也可以分辨阴影中不同物体异同。但人眼无法保证两功能同时生效。
以摄影为例,通过调整光圈来调整曝光度,而人眼是自动曝光。人眼不能同时分辨最亮和最暗地方的细节。
摄影相关补充:光圈调整的是单位时间内的进光量,快门控制每一张拍摄底片的感光时间,感光度ISO是传统相机底片对光线反应的敏感程度测量值,三者都会影响曝光值)
人眼明暗:在明亮环境下由锥状细胞工作,阴暗环境下由杆状细胞工作,由亮到暗需要时间久,由暗到亮适应时间较短
人眼视觉特性:
- 视觉的空间特性:人眼的空间分别能力为 1 分,灰度分辨能力大约 64 级;
- 视觉的时间特征,>15 帧/s,连贯的感觉
- 亮度适应能力
- 亮度适应现象:人眼通过改变其整个灵敏度来适应非常大的光强变动范围的现象。
- 主观亮度:人的视觉系统感到的亮度,是进入眼内的光强度的对数函数。
- 马赫带效应:人类视觉系统有趋向于过高或过低估计不同亮度区域边界值的现象。
- 同时对比度:人眼睛无法判断出视场中目标物的绝对亮度。因为人类视觉对亮度的主观响应与目标的背景亮度有着密切的关系。
- 空间错觉与假轮廓:人对物体形状的感知中的另外一个重要现象是错觉。
人眼感光细胞分布
人眼简单可以把感知色彩细胞分为两类:杆状和锥状细胞。杆状负责感知亮度,锥状负责感知色彩只要有5~14 个光子打到杆状细胞会产生神经信号;
锥状细胞
专门用于感知颜色,被区分为L, M, S细胞。
三种细胞负责感知波长不一,L 红色区间,M 绿色区间,S 蓝色区间。
人眼是光源接收者,作用是接收外部光线输入,输出神经电信号进入大脑。
完整公式
C=\int\limits^{max}_{min}S(\lambda)\cdot I(\lambda)\cdot R(\lambda)\ \text{d}\lambda
- $C$ 指的是“人眼函数”输出的神经电信号;
- $S(λ)$ 表示 LMS 三个感官细胞的感知分布;
- $l(λ)$ 表示光源功率谱分布;
- $R(λ)$ 表示反射物体的吸收功率分布;
色彩空间
历史
19 世纪色彩猜想
- 人们有100多种感受颜色的细胞
- 人们有三种,分别是RGB三种感色细胞
- 人们有三种,分别是黑白,红绿,黄蓝感色细胞
现在这么多年过去了,其中的2和3这两种猜想都成为了我们当下的色彩视觉模型,也称之为色彩模型
1905 Munsell 色彩系统
美国艺术家 Albert Henry Munsell 利用自己的艺术 特长,最早提出了一个色彩系统,后来在1930年被 优化改良。
Munsell 通过很多色卡来描述色彩,下面旋转角度的是色相,Munsell 垂直的是亮度,从圆心到外部是 Munsell 饱和度。人们凭借自我主观意识认知与区 分色彩就是 HSL(色相饱和亮度),这套系统没有过多的物理科学在其中,更多的是一种艺术家的理解与归纳总结规范
1931年CIE的RGB Color Specification System
科学家们觉得上述的色彩系统还可以,但是不够科学,于是为了以一种科学的方式阐述色彩,于是一个叫 CIE 的机构在 1931 年建立了一套色彩系统, 希望完全客观完全物理的量化色彩。
根据测试光,不断调整 RGB 直到观察者认为两者一样后再记录
CIE 把所有可视波长的光线作为测试光挨个测试了 一个遍,最终的到了三条曲线
我们发现 435.8~546.1 nm 这段波长中的红色基色强度是负数。这虽然物理正确,但是一点也没有科学的美感,于是进行了归一化,保证色彩在 -1~1 之间。
最终通过计算出 rgb 的基色的强度在当前混色强度 的所占比例
这样计算后,r’g’b’ 都是在 -1~1 之间, 那么我们发 现 r’+g’+b’=1,那么就可以通过其中两个已知数计算出另一个的强度
在对数值归一化之后,两个变量就可以代表色彩了,于是我们就通过 r’ g’ 这两个参数画图
于是画出了一个二维空间,x 轴是 r’,y 轴是 g’ 那 么我们就可以成功的在色彩科学上真正科学的描述一个颜色
我们可以把任何可见光通过图标的一个点的坐标来表示说明。
1931XYZ Color Specification System
上文的 CIE1931RGB 色彩系统已经不错了,但是存在负数,这在计算上非常的麻烦,比如写个乘法,得先计算是正数还是负数。
于是人们就用数学的方式做了一个新的色彩空间 。所以 XYZ 色彩空间就是一个中转站,主要目的
就是简化计算。
这里简单描述下如何转换的,因为是空间转换所 以我们用矩阵的方式进行
这里的 RGB 是 CIE 1931RGB 不是 sRGB 中的 RGB 数值。
\begin{bmatrix}x \\y \\ z\end{bmatrix}=\begin{bmatrix}2.7689&1.7517&1.1302 \\1.0000&4.5907&0.0601 \\ 0.0000&0.0565&5.5943\end{bmatrix}\cdot \begin{bmatrix}R \\G \\ B\end{bmatrix}
这个 xyz 矩阵也不太美,于是人们为了计算方便又把 xyz 矩阵进行了 归一化
x =& \dfrac{X}{X+Y+Z}\\
y = &\dfrac{Y}{X+Y+Z}\\
z = &\dfrac{Z}{X+Y+Z}\\=&1-x-y
最终效果就是这张色域马蹄图
也就是人眼可见范围表示, 但是我们发现图像上面好像没有亮度于是我们就在归一化的基础上,把 XYZ 中的 Y 单独拿出来与 xy 一起组成了 Yxy 色彩 空间
其中的 Y 表示亮度 xy 表示色度。
这里提一下 这里是 Yxy 色彩空间 Yxy 是由 XYZ 色彩空间衍生
存在的问题和不足:色彩分布不均匀
色彩空间的定义
定义一个色彩空间至少满足三项重要指标
- 色域(三个基色的坐标,由此形成三角形)
- Gamma(如何对三角形内进行切分)
- 白点(色域三角形中心)
详解
- GAMMA并不是色彩空间,而是定义如何对色彩进行采样的一种方式
- GAMMA = 1,指均匀切分(线性)
- GAMMA ≠ 1,就是非均匀切分
- 人眼对暗部的观察比较多,对亮部观察比较少(人眼对暗部更敏感)
- 早期计算机的硬件问题
sRGB色彩空间
- 色域:sRGB 首先设定了 RGB 三个基色的坐标;
- 白点:sRGB 也规定了白点位置;
- gamma:SRGB 的 gamma 设定为≈ 2.2,即从外而向内切,先切细,再切粗。
关于 gamma
原因:
- 人眼在计算机上对于暗部细节观察多,而亮部细节观察少;
- 计算机问题,早期性能不行,gamma≈2.2 情况下,可以节约资源存储亮部,更多资源存储暗部;
现在PC上大部分游戏推荐线性空间原因在于
- 混合方式
- 计算方式合适
色彩空间如上面所言是根据三个指标定义的,并非定死的,所以可以自定义色彩空间(几乎没人干);
任何色彩空间都可以是Linear线性,也可非线性;
补充:
- 色域:一个颜色空间所有可能表示的颜色
- RBG只是中间的三角形
自定义色彩空间
- 换一个色域、白点位置、gamma值,其实就是一个新的色彩空间。
- linear 本身并不是一个色彩空间,它只是指 gamma 是不是线性的
常用的色彩空间、色彩模型
色彩模型
使用一定规则描述(排列)颜色的方法。
例如:RGB、CMYK、LAB
RGB
一类面向诸如视频监视器,彩色摄像机或打印机之类的硬件设备。面向硬件设备最常用;RGB模型用三维空间中的一个点来表示一种颜色,如下图所示。每个点有三个分量,分别代表该点颜色的红、绿、蓝亮度值,亮度值限定在 [0,1]
HSI
以彩色处理为目的的应用,如动画中彩色图形,面向彩色处理最常用;H 表示色调,S 表示饱和度,I 表示亮度。
CMYK
印刷工业和电视信号传输,CMYK模式的原色为青色(Cyan)、品红色(Magenta)、黄色(Yellow)和黑色(Black)。
\begin{bmatrix}C \\M \\ Y\end{bmatrix}=\begin{bmatrix}1\\1 \\ 1\end{bmatrix}-\begin{bmatrix}R \\G \\ B\end{bmatrix}
用 K 来代替等量的 C, M, Y,成为 undercolor remove,更黑,更省墨
K=\min(C,M,Y)\\
C’=C-K\\
M’=M-K\\
Y’=Y-K
常用色彩空间
色彩空间:至少满足三个指标:色域、白点、gamma
色彩空间转换
RGB2HSV
V\gets \max(R,G,B)\\
S\gets \begin{cases}
\dfrac{V-\min(R,G,B)}{V}& \text{ if } V \not= 0\\
0&\text{otherwise}
\end{cases}\\
H\gets \begin{cases}
\dfrac{60(G-B)}{V-\min(R,G,B)}& \text{ if } V = R\\
\dfrac{120+60(B-R)}{V-\min(R,G,B)} &\text{ if } V = G\\
\dfrac{240+60(R-G)}{V-\min(R,G,B)} &\text{ if } V = B
\end{cases}\\
\text{If}\ H<0\ \text{then}\ H \gets H+360\\
\text{On output } 0 \le V \le 1,0\le S\le 1, 0\le H\le 360
HSV2RGB
h_i \equiv \left \lfloor \dfrac{h}{60} \right \rfloor \mod 6\\
f = \dfrac{h}{60}-h_i\\
p=v\times (1-s)\\
q=v\times (1-f\times s)\\
t=v\times (1-(1-f)\times s)\\
(R,G,B)=\begin{cases}
(V,t,p)& h_i 为\ 0\\
(q,V,p)& h_i 为\ 1\\
(p,V,t)& h_i 为\ 2\\
(p,q,V)& h_i 为\ 3\\
(t,p,V)& h_i 为\ 4\\
(V,p,q)& h_i 为\ 5\\
\end{cases}\\