Color and Perception 颜色
🥌

Color and Perception 颜色

Tags
GAMES101
Published
May 11, 2022
Author
notion image
  • Newton showed sunlight can be subdivided into a rainbow with a prism
    • 以前牛顿做过一个实验,一束白光穿过棱镜会分成不同的颜色。
    • 实验的后续,把不同的颜色合到一块去又能得到白色的光。也就是说颜色其实是混合出来的结果。
  • Resulting light cannot be further subdivided with a second prism

The Visible Spectrum(光谱) of Light

💡
为什么光线会被折射成不同的颜色? 是因为不同的波长对应有不同的折射率,而给我们一种光,一定对应某一种光谱。
光谱就是光线的能量在不同波长上的分布。
光谱是很长的范围,但平常关心的是可见光的光谱,分布在大概 400 纳米~700 纳米之间。这个波长我们是可以看到的,但其他的例如红外线、紫外线就看不到。
notion image

Spectral Power Distribution (SPD)(谱功率密度)

光谱还有更准确的定义,就是谱功率密度。其实就是光线在不同波长的强度是多少。
Salient property in measuring light
  • The amount of light present at each wavelength
  • Units:
    • radiometric units / nanometer (e.g. watts / nm)
    • Can also be unit-less
  • Often use “relative units” scaled to maximum wavelength for comparison across wavelengths when absolute units are not important
之前辐射度量学没提波长,但其实不同的波长表现是不一样的。我们用谱功率密度就可以描述光在任何一个波长的分布是多少。

Daylight Spectral Power Distributions Vary

notion image
在蓝天(上图左下)的某个地方可以看到,更多的能量集中在高频(小波长对应高频)的地方,会看出来蓝颜色。
对于阳光对应的又是另外一种 SPD(谱功率密度)。

Spectral Power Distribution of Light Sources

notion image
不同的光对应不同的 SPD。例如日光和 LED 就不一样。
为了描述一个光线强度在各个不同波长,我们就需要引入这样的曲线。

Linearity of Spectral Power Distributions

SPD 有一个线性的性质。
notion image
如果我有一种能记录光强度的东西(Spectral radiometer),用某一种光去照亮它,得到这光的分布。另外一种光也能得到一个分布,那么两种光同时照亮它,就能得到两个对应的 SPD 之和。

What is Color?

  • Color is a phenomenon of human perception; it is not a universal property of light
    • 颜色其实是人的感知
  • Different wavelengths of light are not “colors”
    • 颜色跟人有关,跟光的分布不一样。

Biological Basis of Color

Anatomy of The Human Eye

notion image
人的眼睛就是摄像机,瞳孔可调节大小,就是光圈。晶状体就是透镜,通过肌肉来拽它变成不同形状来调节焦距。人眼的感知的地方在视网膜,视网膜可以理解为图像,成像的地方在视网膜上。
📖
最后,大脑会负责处理所有的数据信号,例如:实际视网膜上的成像是上下颠倒的,大脑会把它正过来。所以,我们“看到的”并不是真正打到人眼上的光线,而是我们大脑根据人眼提供的信号所重建出来的效果。 来自《CAMERAS VS. THE HUMAN EYE》

Retinal Photoreceptor Cells(感光细胞): Rods and Cones

为什么光线到了视网膜就能看到东西了?因为视网膜上有感光细胞。
Rods (棒状细胞) are primary receptors in very low light (“scotopic” conditions), e.g. dim moonlight 感知光强度,不感知颜色
  • ~120 million rods in eye
  • Perceive only shades of gray, no color
    • 得到的是灰度的图
Cones (视锥细胞)are primary receptors in typical light levels (“photopic”)
  • ~6-7 million cones in eye
    • 少了很多,但能感知颜色
  • Three types of cones, each with different spectral sensitivity
    • 内部分成三种视锥细胞
  • Provide sensation of color
notion image

Spectral Response of Human Cone Cells

Three types of cone cells: S, M, and L (corresponding to peak response at short, medium, and long wavelengths)
视锥细胞分成三种:S、M 和 L。 三种细胞对三种类型的波长的响应各不相同。
  • S 能更灵敏地感知小波长(高频率)光线的强度。
  • M 能感知中间波长的光
  • L 能感知长波长的光
notion image
这些曲线就是响应(response)的曲线:如果给不同的光,它会有多强烈的反应,表示的是感知的能力。

Fraction of Three Cone Cell Types Varies Widely

三种细胞能感知不同类型的光。
但不同的人,眼睛里三种细胞的分布非常不一样。
下面 12 个图就对应着 12 个不同的人的眼睛中三种视锥细胞的分布,可以看到分布十分不一样,数量上也有严重的个体差异。例如左下角的人就有更多对绿色感光的视锥细胞,右上角有更多对红色更敏感的视锥细胞。
💡
颜色是人感知的结果。
Distribution of cone cells at edge of fovea in 12 different humans with normal color vision. Note high variability of percentage of different cone cell types. (false color image)
notion image

Tristimulus Theory of Color

Spectral Response of Human Cone Cells

Now we have three detectors (S, M, L cone cells), each with a different spectral response curve
notion image
感知的结果其实就是 这两个函数对应的位置相乘积分起来。
给定某一个波长,知道光线强度是多少,然后和相应的感知曲线的感应强度乘起来,然后把每一个波长都考虑进去,就能得到结果。也就是把响应曲线与给定光的 SPD 做积分,这就是人如何感应到不同的颜色。
三种细胞会感应出三种颜色,得到三种结果,对应 S、M、L。
给定任何一个光线,人们看到的是三个数,这才是真正感知到的颜色,而不是光线本身的 SPD。
💡
每个人三种细胞分布各不相同,因此每个人眼中的世界都不一样。
💡
常见的色盲成因是其中一组或以上的视锥细胞发育时有问题。

The Human Visual System

  • Human eye does not measure and brain does not receive information about each wavelength of light
  • Rather, the eye “sees” only three response values (S, M, L), and this is only info available to brain
notion image

Metamerism(同色异谱)

既然我们看到的不是光线的光谱,而是光线光谱和各种曲线积分出来的结果。
那么有没有可能两种光线,它们具有的光谱不相同,可是它们看到的结果却是相同的。这是有可能的,这就是同色异谱现象。
这种现象非常重要,我们利用这种现象才能给人们呈现出不同的颜色,这种过程叫做 Color Matching 颜色的匹配过程。我们想通过调和不同的光谱,得到某一种颜色,使得这种颜色和我看到的另一种颜色一样。

Metamers

Metamers are two different spectra (∞-dim) that project to the same (S,M,L) (3-dim) response.
  • These will appear to have the same color to a human The existence of metamers is critical to color reproduction
  • Don’t have to reproduce the full spectrum of a real world scene
  • Example: A metamer can reproduce the perceived color of a real-world scene on a display with pixels of only three colors

Metamerism is a Big Effect

notion image
上图就是不同的光谱,但是被人感知之后,通过三条曲线的积分之后,得到完全相同的结果,也就是说看到的是同一种颜色。

Metamerism

同色异谱现象的应用有什么呢?
notion image
例如我们拍了一个太阳,然后希望在显示器中显示出来,应该用什么颜色?我们能通过调节不同颜色,使得我们看上去是一样的颜色,但其光谱可以完全不一样。

Color Reproduction / Matching

为了得到混合的颜色,我们首先要知道颜色应该如何混合。

Additive Color

notion image
在计算机成像系统中,平常我们会认为这种成像系统叫加色系统。
什么是加色系统?我们有几种不同的颜色,以 RGB 为例。把 RGB 各自不同的颜色 乘上强度(),混合起来就能得到颜色
加色是什么意思?计算机中,如果我们将 RGB 调到 255 得到的是白色。真实世界中,如果我们将不同的光照到一起去,混合之后就会变强,就能得到白色。但这个和画画不一样,如果将不同颜色混在一起会越来越黑,这种叫减色系统。这是不同的理解。

Additive Color Matching Experiment

加色系统允许我们线性组合的基本颜色,来匹配任何给定的颜色。
notion image
给定一个颜色,我们希望用三种不同的颜色通过混合来匹配得到这个颜色,如上图。
怎么做呢?
左边颜色给定某种颜色:
notion image
右边颜色,每个颜色有一个系数(强度),我们通过调节来匹配。
调节 ing
notion image
 
调节 ing
notion image
这时候匹配了,说明我找到了不同颜色的系数
notion image
对于不同的颜色都可以通过类似的方法解决。
但有些情况很奇怪。我调了一个颜色,但右边怎么混都混不出来。
 
notion image
notion image
 
还是混不出来
notion image
notion image
我们可以把左边给定的需要混合的颜色往上加一个颜色,就好像是如果左边不加颜色,右边就要减掉颜色。但加色系统减不了。也就是说我们通过不同的系数混合得到一种颜色,系数是有可能为负的。
通过这种方式,人们发明了 CIE RGB 的系统。

CIE RGB Color Matching Experiment

这里就开始有点像正常的颜色空间去表示了
CIE 组织定义 RGB 的系统,这个系统要做颜色的匹配。
给定某种单波长的颜色,其颜色的 SPD 就是单一的 delta 函数,可以理解为给的是一个单色的颜色。那我们要怎么用三种单色的光来混合出某一个波长上对应的颜色?其三种光的频谱的分布也是非常集中,RGB 的 SPD 我们不用管。
notion image
💡
如果通过混合不同的单色光来获得给定一个波长上的光线的颜色?
然后他们做了实验,得到一张颜色匹配函数图,告诉我们对于任何一个固定波长上的颜色,例如 450,就需要用下图对应箭头的部分,很多的蓝色+部分绿色+部分红色来获得。
notion image
我们也发现确实红色部分有负的。
如果给定任何一种实际光的光谱(SPD 的分布),要计算就要把每一个波长都考虑用多少红绿蓝混合。这样每一个波长都要考虑进去,就是要积分,三条曲线的积分结果就是三个数。
这就是我们 RGB 的系统。
notion image
⚠️
这里想要匹配的是任何 SPD 的光,而刚才做的实验得到三个曲线是针对每一个单个波长的光,因此这里我们要积分。

Color Spaces

Standard Color Spaces

📖
1996 年,微软和惠普一起开发了一种标准 sRGB 色彩空间。这种标准得到许多业界厂商的支持。sRGB 对应的是 Gamma0.45 所在的空间。 Gamma、Linear、sRGB 和Unity Color Space,你真懂了吗?
RGB 是一个广泛使用的标准的系统,广泛用于各种图像设备,例如显示器。
Standardized RGB (sRGB)
  • makes a particular monitor RGB standard
    • 先找某一台机器,某一台机器的 RGB 做好之后,后来制造就按照这台机器方法来制造。
  • other color devices simulate that monitor by calibration
  • widely adopted today
  • gamut (? 色域) is limited
    • RGB 形成的颜色空间所能形成的色域是有限的,后面会说。

A Universal Color Space: CIE XYZ

这个系统虽然不常用,但是科学上会更广泛应用一些。
notion image
 
这个系统也要定义颜色匹配函数。之前的系统红色有负的,但 CIE XYZ 反过来,这不是一个实验出来的系统,而是一个人造的一套颜色匹配系统。
这套系统,我们首先定义好几种不同的虚拟的曲线,这些曲线告诉我们例如 450 波长的光要用多少红绿蓝,同时因为设计的绿色的曲线的覆盖比较正常(400-700),分布比较对称。因此正常情况下,用 xyz 三种颜色匹配函数匹配出来的各种各样的颜色,得出来 Y 的数(类似于 RGB 的 G 这个数)一定程度上可以表示颜色的亮度。
设计上,红色有两个峰值,但没有负数,所有的函数都是覆盖在所有可见光的范围内, 400-700 都有。
XYZ 对应的是三种不同的结果,我们可以用这三个数来表示颜色,其中 Y 表示的是亮度。
与 RGB 的区别就是匹配函数的问题。
💡
那么能不能用 XYZ 系统能够表示的所有颜色都显示出来?

Separating Luminance, Chromaticity

notion image
XYZ 是三维的,不好可视化,我只想显示其中的两维,怎么做呢?对于任何 XYZ,先做归一化(加起来等于一)得到(小写)xyz 的值,其中 xyz 加起来等于一。只需要显示前两个维度的图能得到什么样的图即可。
为了显示其中两个维度,其实还是需要 XYZ 三个数的,既然知道 Y 表示的是亮度,我们就能将亮度 Y 固定成某一个数,让 X、Z 发生变化,而显示的图只显示小写的 x 和 y。
这个图中有颜色的区域叫做色域,表示所有颜色空间可以显示的颜色。
💡
这样显示是有道理的,因为改变 Y 改变的只不过是亮度,其实还是可以看清楚各种颜色。

CIE Chromaticity Diagram

The curved boundary
  • named spectral locus
  • corresponds to monochromatic light (each point representing a pure color of a single wavelength)
Any color inside is less pure
  • i.e. mixed
色域有中心,中心就是白色的。白色由各种颜色混合起来的,因此我们说白色都是不纯的颜色,而纯(Pure)的颜色都在边界上,算是单色。
notion image

Gamut(色域)

Gamut is the set of chromaticities generated by a set of color primaries
色域就是一个颜色空间所有显示的颜色。
💡
不同的颜色空间表示的颜色范围是不一样的吗? Different color spaces represent different ranges of colors So they have different gamuts, i.e. they cover different regions on the chromaticity diagram (色度图)
notion image
例如 RGB 只能显示一个很小的三角形,不同的颜色空间能表示的颜色也各不相同。

Perceptually Organized Color Spaces

HSV Color Space (Hue-Saturation-Value)

notion image
颜色拾取器可以选择色调(不同类型的颜色)、饱和度(更接近白色还是更接近颜色本身的纯色)、Lightness(亮度)。HSV 就是给艺术家定义的。
Hue(色调)
  • the “kind” of color, regardless of attributes
  • colorimetric correlate: dominant wavelength
  • artist’s correlate: the chosen pigment color
Saturation(饱和度)
  • the “colorfulness”
  • colorimetric correlate: purity
  • artist’s correlate: fraction of paint from the colored tube
Lightness (or value)
  • the overall amount of light
  • colorimetric correlate: luminance
  • artist’s correlate: tints are lighter, shades are darker

CIELAB Space (AKA L*a*b*)

跟感知有关的颜色空间。
A commonly used color space that strives for perceptual uniformity
三个轴
  • L* is lightness (brightness)
    • 0 黑 100 白
  • a* and b* are color-opponent pairs
    • a* is red-green
      • a 轴表示红和绿
    • b* is blue-yellow
      • b 轴表示蓝色和黄色
notion image
LAB 空间认为任何轴表示的颜色,极限(两端)都是互补色。例如白和黑互补,但红为什么和绿互补?这是根据实验得到的。

Opponent Color Theory(互补色)

There’s a good neurological basis for the color space dimensions in CIE LAB
  • the brain seems to encode color early on using three axes:
  • white — black, red — green, yellow — blue
  • the white — black axis is lightness; the others determine hue and saturation
 
 
  • one piece of evidence: you can have a light green, a dark green, a yellow-green, or a blue-green, but you can’t have a reddish green (just doesn’t make sense)
    • thus red is the opponent to green
    • 我们绝对不会想到偏红的绿色,因为红色和绿色差的太远,成为了互补色。
    • 这跟人脑有关系。
  • another piece of evidence: afterimages (following slides)
    • 通过人眼的视觉暂留来验证互补色。
    • 视觉暂留是指,看一张图看的长了,忽然切到另外一张图,我们会看到图片的互补色。
notion image
图中心有个点,盯着看十秒钟,切到白色背景的一瞬间能看到互补色。
notion image
notion image
盯着看第一张忍者神龟的图十秒钟再切换到下一张灰度图,就能看到互补色加灰度图,偏红的颜色过来之后就会偏绿。
notion image
颜色本身是感知,看到的颜色有多强是个人觉得,实际上可能有相悖的效果。
A 和 B 哪个更亮哪个更暗?其实两个颜色一样。
 
notion image
notion image
两个叉哪个更亮?一样。

CMYK: A Subtractive Color Space 减色系统

给不同的颜色混合到一块,会越来越黑。
一个典型的减色系统,是 CMYK 系统。
Subtractive color model
  • The more you mix, the darker it will be
Cyan(蓝绿色), Magenta(品红色), Yellow(黄色), and Key(黑色)
Widely used in printing
CMY 可以通过混合来得到各种不同的颜色,打印上也可以混合各种墨水,越混越黑,调出不同的颜色。
notion image
Question:
  • If mixing C, M and Y gives K, why do you need K?
    • 如果混合 CMY 就能得到黑色,那为什么还要黑色?
    • 因为印刷要考虑成本,用黑色居多,黑色墨水好造、便宜,其他的 CMY 不容易造,混合出来黑色就很亏。
 
notion image

最后

本节内容没有提 HDR、Gamma 矫正。
💡
前面做 Path tracing 时问过,算出来的是 Pixel radiance,radiance 最后要变成颜色,是不是简单做线性变换就能得到? 并不是,因为本身颜色的显示在显示器上是非线性的,必须将其矫正过来,使得两部分非线性抵消了还是线性。这部分叫 Gamma 矫正。
💡
怎么造一个颜色空间? 造了得有人用,它要有自己独特的性质。例如 XYZ 就有非常好的理论性质,非常大的色域;RGB 好用,红绿蓝很直观;HSV 颜色好调,选颜色容易。有很多要考虑,不过也可以造个虚拟的,像 XYZ 一样。

其他参考