色彩是什么
色彩主观来讲就是光线给人的感觉,客观的分析,就是今天要说的东西。
光
人眼的可见光范围大概在400-700nm左右,也就是有一定波长的电磁波,对于不同的波长由于人眼的构造能产生不同的神经信号,传到大脑interprete一下就是colors。这个波长范围以外的光线人类无法肉眼感知。
单色光 & 混合光
如果一束光,它所含有的光子都是同一波长的,那么就成为单色光,如果恰好波长还是visible的,那么称为光谱光。比如700nm一束光人眼看起来就是大红的光线。相对应的,不同波长的光合在一起就是混合光。人眼没有三棱镜的功能,能把混合光分开,至少在人的感知范围内是不行的,也正是因为如此才能有色彩的整套理论,即原色混合理论。
紫外光 & 红外光 & 荧光
波长低于 400nm 的紫外光UV肉眼不可见。荧光材料利用的就是紫外光:荧光材料吸收紫外光后会使紫外光波长增加(频率减少)到可见光范围内再反射出去,使物体反射的光看起来比它从光源吸收的还要多,看起来亮度增加了。纸张就常用荧光粉使其看起来更白更亮。
另外还有红外光IR,肉眼也不可见,不过咱们大多数的摄像设备有的能够包含一些IR的范围,比如有时候对着遥控器拍照能看到偏红色的光线,但是拍照红颜不是因为这个原因。
人眼原理
上图是眼睛识别光线色彩的构造图,主要分为两个阶段:通过视锥细胞的识别阶段和通过视神经的生产神经信号并传输的阶段。这两个阶段分别是三原色和四原色的生物学基础。
识别阶段
WikiPedia:Color (American English) or colour (Commonwealth English) is the characteristic of human visual perception described through color categories, with names such as red, blue, yellow, green, orange, or purple.
WikiPedia中颜色定义是:人眼的对于光的感受通过颜色分类的这些名称表达出来的特征。这里所说的感受是通过不同波长不同频率的刺激值来表示的,而不是指人主观的感受。一束光线打在视网膜上,对人眼视锥细胞、视杆细胞产生一定刺激值,转化为神经信号。视锥细胞又分为三种:S-cones, M-cones and L-cones,分别对人眼可见范围内的短波、中波、长波敏感,这是由三种不同蛋白质决定的,色盲患者正是因为缺乏合成这些精细蛋白质的基因。下图中,横轴为波长,纵轴为SML三种细胞对不同波长应激的刺激值。不过确实有人天赋异禀的,会有XS或者XL的视锥细胞,不做讨论。经过实验,可以用三种波长的光经过各种不同强度下混合刺激人眼,模拟出人眼所能感知到的其他的颜色,对人眼来讲与直接看到该中波长的光线相同,这就是三原色RGB原理的来源。比如,RGB基色全混合是白色。具体可以去看wikipedia中color vision
人眼的retina中有一大堆的Photoreceptor cell感光细胞,主要负责人眼的视觉成像,它又有三种细胞,视杆细胞,视锥细胞,神经节细胞:
更多:对于单一光线来讲,人眼能感受的波长范围大概是400-700nm之间,人眼可区分的interval在不同的范围也不同,从1nm-10nm都有,总共算下来人眼也就能看到几百种色调Hue,但是有多光线混合的时候,产生的Hue就多了。另外,实际上SML三种cone cell对不同波长的刺激峰值并不是正好的RGB原色,比如L的峰值是在570-580左右,是green-yellow区域。所以这个角度来讲,RGB三色模型,并不是完全的cone cells的表示。另外一个有意思的事情是,由于ML是区域是完全重叠的,所以不存在纯正的蓝色或者绿色(单色光)。
生产信号
如上图所示,人的视神经只有三个通道,两个色彩通道蓝-黄和绿-红和一个亮度通道,视神经的带宽是有上限的,两个色彩会争抢视神经,这是Lab色彩空间的理论依据。
颜色属性
色调Hue
又叫做色相,这是色彩的首要特征,也就是我们常说的色彩赤橙黄绿青蓝紫等,改变一个色相给人的感觉要远远大于亮度、饱和度。
饱和度Saturation
又被称为彩度、色彩浓度(Chroma),称为色彩浓度很好理解,从色彩最大浓度到无色彩(黑白或灰)的程度。
确切定义为颜色等效光谱分布集中于波峰(色相)的程度,越集中含其颜色越少,饱和度越高。再直白点理解就是,光子的纯净程度,越纯净饱和度越高,也就是越接近单色光,越分散饱和度越低,越接近黑白灰。
明度Brightness
颜色等效光谱各色相心理强度之和,比如三原色RGB转换成YUV的过程,把Y看作亮度。可以从图中看到改变一个颜色的亮度,很可能会牵连到颜色光谱分布集中程度也就是饱和度,实际上不同的色彩体系对饱和度和明度的拆分是不同的。明度看起来是最容易理解的概念,但事实上非常之混乱:Brightness、Lightness、Value、Luma。虽然概括来说就只是颜色的明亮程度,但是明亮是指光的强度,还是人对光的感受?范围是从黑到白还是从黑到颜色能维持最大饱和度的亮度?在不同的色彩体系、标准、翻译下会有不同的意义。
明度、亮度 与 辉度(Brightness, Lightness and Luma)
- 亮度:Lightness、Luminance
- 相对亮度:Relative luminance
- 明度:Brightness、Value
- 辉度:Luma
这是三个使用的相当混乱的概念,其所指本质上是相同的,但是在不同场合其含义会有些差异。
你可以在一些地方看到亮度 = Brightness,明度 = Lightness ,另一些地方可能恰好相反,而其实际上他们指的可能都是同一个概念:人对发光体或反光体光感受强度的程度,但是这个概念的定义很多,不同的定义惯用不同但又没有明确界定的称呼。实际上大部分使用亮度、明度、辉度的人根本不知道其中的差别。
以 RGB 色彩空间为标准, R(红)、G(绿)、B(蓝),max 为 RGB 中最大值,min 为RGB中最小值。其亮度/明度的定义方式常见的有:
- 平均值:取 RGB 三值的平均值, μ = (R + G + B)/3, 这最简单而又不常用的定义法,因为某些颜色人感知起来明显比另一些要更亮,所以最不准确。
- 跨度平均值:取 RGB 中最大值与最小值的平均值, μ = (max + min)/2, HSL 色彩空间的 L : Lightness/亮度 的定义就是跨度平均值。
- 最大值:取 RGB 中最大值, μ = max, HSB(也被称为 HSV)色彩空间里的 B : Brightness(HSV 的 V : Value)/明度 的定义就是 RGB 最大值
- 色觉校正值:由于人对色彩感知亮度有差异,所以除了以上比较简单的亮度定义法,还有用公式得到更接近人世界感受的定义方法。在使用色觉校正的场合,常常习惯把校正后的结果称为辉度(Luma),比如视频领域在ecoding的时候常做的gamma compression(使用encoding gamma,基本小于1,变亮)。
辉度(Luma)通常指经过色觉校正后的”亮度”,在一些日文和从日文翻译过来资料中常见这种称呼。
后面会在色彩空间部分对比HSL和HSV的LV,即亮度和明度……
CIE color spaces
加性模型
根据加性颜色模型(Additive color model),选定三种原色(primary color),一般来说是RGB,这三种原色根据一定强度IS、IM、IL进行混合,如果得到的结果和目标颜色给人的感觉相同(刺激相同),那么认为混合色与目标色是相同的。这其中的三原色如何选择,刺激值如何测量定义,国际照明委员会CIE有一套标准色度学系统。
CIE根据一大堆“人体实验”结果在1931年提出了第一个定量的将电磁学中可见光谱的“物理”颜色与人类视觉感知的颜色联系起来的标准,包含了CIE 1931 RGB color space和CIE 1931 XYZ color space。
CIE RGB color space 根据Wright和Guild对一群人(好像就是17个人,10个人train,7个人test)在1920年的颜色匹配实验结果得到的,实验中发现并不是所有的人眼可见的单色光都能通过三原色比例混合得到,这种情况下,允许将目标色添加一些强度的一种原色,然后用剩下的两种原色混合进行匹配,这里将用来“污染”目标色的原色强度计为负值。下图color mathing functions给出了对于一个单色光,即横轴波长所表示的颜色,所需要的三原色的强度(纵轴)。这里Wirght使用的三原色是700 nm (red), 546.1 nm (green), 435.8 nm (blue),在435.8nm的时候,RG是0,在546.1nm时,RB是0,在700nm时,GB是0,在三个点也就代表了恰好目标色就是三原色。那个年代里435.8nm和546.1nm很容易产生,虽然700nm的单色光很难产生,但是大家觉得在那个波长范围内人眼已经不敏感了,所以标准定出来就算大家执行的时候有些偏差也无所谓了,所以R还是选择了700nm。
可能大家都会奇怪如果用不同的三原色或者不同的三原色强度,上面的结论还成立吗,再或者目标色不是单色光的情况。这里有一个Grassmann's law,这个规则说的是,如果一个颜色3是由另外的两个颜色12混合而成的,那么用三原色来混合得到3所各需要的值就等于用三原色分别得到12所需要的RGB的和。(这个规则是基于normalized RGB color matching functions中的微积分公式的)
CIE XYZ color space,CIE委员会觉得RGB值是有负值的,这样直接数字化用起来太麻烦了,他们决定搞一个新的好用的color space出来,就是的当前我们的色彩标准XYZ色度学系统。在上面讲的RGB三原色理论中,由于有三个变量,表示一个颜色就需要画一个三维图形,太麻烦了,那么假定RGB三原色的占比和是1,那么只有两个变量是独立分布的,这里就暂时丢掉了强度信息,比如我们保留G的值,作为强度信息,这样RGB中最终只包含了rg两个变量,这样就又了rg色度图,即最原始的马蹄图。1.图例的E点就是whitepoint,对应的坐标是(1/3,1/3) 2.马蹄形的一圈就是单色光光谱轨迹 3.(0,1)blue (1,0)red表示的r+g=1也就是这条线段上b都是0。
假定人对色彩的感知是线性的,那么对rg色域图线性变换到正数第一象限内,即把包含全域color的CrCgCb三角形线性变换,而且要求white point还在(1/3, 1/3, 1/3)点。变换到正数的XYZ空间以后,根上面一样,固定Y作为亮度值(上面固定G),即得到xyY色域图。所以XYZ color space并不是真实自然界的色彩空间。xyY色域图有一些有意思的特征,比如途中两点可以混合出连线上的任意颜色,三点可以表示三角形内任意颜色,全色域是一个马蹄形,所以不存任意三点能覆盖人眼全色域,也可以理解为不存在物理设备能完全还原自然色域。
减性模型
CIE Lab 也叫做 La b* 和L10a10b10色彩空间,wikipedia中没有找到描述CIELAB的页面,这里贴了一个LAB的链接。CIE LAB是1976年CIE提出的,同CIE XYZ一样是一个设备无关的基于人生理特征的颜色系统,L是指亮度,a是绿-红的范围,b是蓝-黄的范围。这里10是指standard observer的角度。CIELAB的基础不是加性三原色原理,而是视神经的拮抗作用,它是由XYZ变换而来,但是比XYZ更加符合人的感知,亮度和色度分离的更准确。
其实CIE Lab色彩空间还涉及到一个问题,我们看到XYZ中的不同色彩的疏密程度是不同的,有些颜色占的面积很大,比如便绿色的部分,有些很小,比如蓝色。在1940年左右,David MacAdam提出每种色彩的阈值问题,即每种色彩人们能感知到的变化范围不同,画了个马克亚当椭圆示意图,根据这个马克亚当示意图让色彩更均匀一些久成了Luv(Lab类似)的色域图。
Bit Depth & HDR
一个自然界的场景,想变成数字化的图片,首先要经过的的两个步骤就是将连续的光学信号进行采样sampling和数值化,sampling决定了图片的分辨率,即单位尺度内的单位像素的个数。有了像素大小的定义以后,我们需要把这个位置的一维的连续信号根据强弱进行数值化。比如一束光线最强是红色的,那么在人眼范围内“最多”(饱和度)是纯红色,如何定义这个纯红色和一个其他的颜色的数值呢。比如我们规定红光单色光的值是255,那么随着饱和度的下降,一直到红色消失,中间的数值变化阶梯使用多少个。这就是color depth的通俗理解,在常见的YUV、RGB色彩空间下,通常情况下为8bits来表示,即[0-255]共256个阶梯。
我们常见的视频标准中,如bt601和bt709都是规定了8bits或者10bits的规则,但是我觉得实际上这两个标准中色域本来就不大,分辨率是1080p,最大频率60Hz,使用10bits前景并不好,虽然有些设备已经开始这么做了。在BT2020中规定了color depth是10bit或者12bit,分辨率是4K 8K,刷新频率到了120Hz,色域也要远远大于bt709,将来10bit的推广应该还是会随着4K而来。还是很期待10bit推广风暴的,毕竟从16.7million色数变成饿1.07billion,而且目前HEVC已经支持了10bit编码!
这里还有两个概念,一个是高动态范围HDR、宽色域WCG。
High dynamic range,顾名思义就是添加更多的动态范围到图片中,人眼在对物理场景采样的时候是有很大的“变焦”频率的,这也就是为什么在明暗对比强烈的场景下人眼一样能看到各个部分的细节,对比起来相机等在拍照的时候由于变焦是固定的(或者频率很低),导致拍出来的照片只含有一个焦距上的细节,这样的照片看起来细节缺失。通过多次曝光,得到不同亮度不同焦距内的细节组合来提高清晰度,就是HDR。具体到技术中有几个过程。这里主要针对HDR video说明。
- Capture 在同一个场景同时拍摄多个视频,用不同程度的曝光,得到的多个视频能够相互补充场景信息,这叫做HDR video。现在很多手机也都有了HDR的功能,其实从一定程度上,双摄是一种高级的HDR。
- Display 主要是显示设备上的支持,比如有些电视,还有OLED屏幕等。