第二十章:颜色和感知
颜色和感知(Color and Perception)
本节课内容:
完成上节课的光场
颜色
- 什么是颜色
- 颜色感知
- 颜色再现/匹配
- 颜色空间
光场(Light Field/Lumigraph)
我们看到的世界,可以用眼前的一块幕布,来模拟我们在各个方向看到的光照
碟中谍 4 里全息投影
全光函数描述我们能看到的所有东西
在某个方向看到的光照
加上了波长的参数,可以看到彩色的
加上时间的参数,可以看到电影
再加上空间的参数,在不同位置看到的,可以看到全息电影
最后把函数理解成在任何位置,往任何方向看,在任何时间,看到不同的颜色。这个 7 维的函数就叫做全光函数。
可以从全光函数提取一部分信息出来,用来表示复杂的光。光场就是全光函数的一个小部分。
定义光线:
可以是起点 + 方向,或者是取光线上的任意两点
重点是需要二维的位置和二维的方向
根据光路可逆性,要描述一个物体能被看到的所有情况,即描述这个物体在包围盒上任何一个位置往各个方向过去的光线
光场即在任何一个位置往任何一个方向去的光的强度
首先三维物体的表面在一个二维的空间中,可以用(u,v)两个变量表示位置,任何一个空间中的方向都可以用(θ,φ)表示,所以光场是一个四维的函数。
可以从光场中直接提取到任意一个位置看向一个物体的光强度
可以简化一点,我们不需要知道光场表示的是什么东西,我们只需要知道盒子上表面任意一个点往任意一个方向(观测点)发出的光的强度(前提是观测点不在盒子内部)。
更进一步,可以取一个平面,平面右边是发光的物体,光线会穿过平面。我们可以忽略平面右边的东西,对平面上任意一个点,只需要知道方向就可以。
也可以用两个平面来定义光场,两个平面各取一个点确定方向:
用(u,v)和(s,t)来确定光场:
对于两个平面的参数化方法有不同的处理方式:
可以固定一个(s,t),让(u,v)变化:
上图中的上图是从(u,v)平面上找到一个点看向(s,t)平面的所有方向,得到从这个点的方向看过去的物体的全貌
下图是从(s,t)平面上找一个点,看向(u,v)平面,这里可以理解为(u,v)平面所有方向看向(s,t)同一个点得到的图像。
类似于苍蝇的复眼,光照射到一个像素点上是不同方向的光混合起来的,这里在光前面用一个透镜,就可以把光分开,把一个像素不同方向上光分别记录在不同的位置。
光场照相机
先拍照,后期再重新聚焦
光场相机就是用透镜把光分开,一个像素的 irradiance 现在分开记录到一块区域上的 radiance。
光场相机还原照片,可以选择一个方向,计算这个方向上像素点接受的光照,这样就可以模拟相机移动。
重新聚焦和移动相机位置一个道理,光场已经记录了所有方向所有位置的光照信息,只需要选取聚焦对应的方向和位置就可以计算得到。
光场照相机的缺陷:
- 分辨率不足。以前的一个像素要用很多个像素去记录,对胶片要求很高
- 高成本。透镜非常精密,实现需要巨大的成本
- 如果要记录更精密的方向信息,位置信息就会丢失的更多(复眼如果圆圈更大,那么圆圈的数量就更少)
Physical Basis of Color
颜色是很多基本颜色混合得到的结果
不同颜色的光有不同的波长,图形学关心的通常是可见光的光谱
谱功率密度就是描述光在任何一个波长的分布是多少
不同的光有不同的 SPD
SPD 有线性的性质
颜色是什么?
颜色是人的感知
人眼的构造:
肌肉会拉扯晶状体改变焦距
视网膜上有感光细胞
RodCell 棒状细胞,感知光的强度,不感知颜色。用棒状细胞可以得到一个灰度图
Cones 锥形细胞,感知颜色。锥形细胞内部又分成三种不同的锥形细胞(S,M,L),感应不同范围的波长。
曲线线叫做响应曲线,即给不同的光会有多强的反应。
不同的人这些细胞的分布非常不一样
把响应曲线和感应到的 SPD 做积分,得到三个数 S、M、L,就是人感知到的颜色,而不是光本身的 SPD。
同色异谱
光谱不一样,但是人感知到的颜色一样
通过调和光谱,使得得到的颜色和看到的另一种颜色一样,就是 color mapping 的过程
比如在显示器上显示一个太阳,混合的光谱可以和真实的完全不一样,但最后的颜色是一样的:
计算机的成像系统是加色系统
把 R、G、B 各自乘上不同的强度再混合起来(画画是减色系统,把各种颜色调和到一起最后会变成黑色)
混色实验:
但有一些颜色会怎么混两边颜色都不一样
这个时候给左边的颜色加一个颜色,相当于右边的颜色减了一个颜色(真实情况下不能减,因为是加色系统)
CIE RGB
实验测算三种波长的光混出一个波长,得到一个匹配函数:
给任何一种实际光的光谱,把每个波长需要多少 R、G、B 都算出来,然后做积分把颜色表示出来
颜色空间
sRGB(标准 RGB)
RGB 形成的颜色空间色域是有限的
A Universal Color Space: CIE XYZ
定义颜色匹配函数,和 RGB 匹配函数不一样,不是实验测出来的匹配系统
特别的 Y 本身还表示亮度
可视化 XYZ 系统得到的所有颜色,但是三维的不好显示,所以把 X、Y、Z 做归一化处理,Y 表示亮度,所以把 Y 固定成某一个数,让 X、Z 发生变化,显示的图显示小写的(x, y),看到的形状就叫做色域。
色域的中心是白色,是最不纯的颜色,最纯的颜色在边界上。
不同的颜色空间表示的色域是不一样的:
HSV Color Space
通过色调选不同的颜色,通过饱和度选偏白还是偏这个颜色,亮度决定偏黑还是偏这个颜色
CIELAB 空间
轴上任意两端端颜色都是互补色:
互补色(实验得到的,人的大脑的定义):
盯住下图的中心点十秒后切换到另一张白色的图上,会看到互补色:
颜色是感知,所以看到的颜色有多强是感觉的:
减色系统
**CMYK **
打印上混合各种颜色,所有颜色混起来变成黑色。这里面虽然黑色可以由其他颜色混合得到,但是考虑打印成本,都会带上一个黑色: