开坑!
第一部分 5月3日更新
俗话说,摄影是用光的艺术(这次,我们真的是在说用光)。提到用光,摄影师会想到:快门,光圈,ISO,而灯光师会想到:色温,显色指数,光质,当然,如果更细一点,也许你会想到,同色异谱,色彩适应……
想象一下,站在一片广袤的沙漠中,天空被一片橙黄色的沙尘覆盖,太阳变得朦胧,光线呈现出一种奇异的色调。这不仅仅是一个壮观的自然景象,也早是电影制作者和照明设计师试图在银幕上复现的挑战。在「遥远的宇宙」中,沙尘暴不仅是《沙丘》这样的科幻电影中的场景,它们当然是地球上「某些」地区的真实现象咯。

从科学的角度来看,沙尘暴通过散射和吸收光线,改变了天空的颜色和光线的强度。而在艺术的领域,电影制作者利用这些特性来营造氛围。但是,作为一个不能操纵天气的普通人,能用我们的影视灯(或者家里的普通LED灯泡?)来模拟这种沙尘暴的照明效果吗?聪明的你肯定注意到了,这两年LED灯技术几乎是飞速发展,各大灯厂都推出了他们的全彩灯甚至是全光谱灯,那么作为普通摄影师的我们真的有机会将科技与艺术结合起来,创造出令人惊叹的视觉效果吗?
那不就直接调成黄色就行了?
精通PS和达芬奇等一系列软件操作的你肯定想问:为什么不直接靠后期呢。毕竟这些电影中的确使用了后期艺术渲染的手段让沙尘暴的“黄”更加戏剧性。抛开艺术处理不谈,我们本期只讨论如何真正的实现暖色环境照明所带来的暖色感知。后期调色是一个常见的过程,它允许创作者改变场景的颜色,以增强情感表达或创造特定的视觉效果。然而,当你开始搓曲线,开始搓色轮,尝试复现沙尘暴场景时,仅仅通过后期调色将画面变为黄色,你很快就会发现,这画面的暖色-不对!

这些奇怪的结果似乎让你想起来了之前在学习数字后期调色时候,从各大网红教程里学到的定理:“只有RAW格式的画面才能「自然」的调整白平衡”,这似乎是个正确的说法,毕竟RAW是物理的原始信息,肯定就理所当然的能够自然的调整色彩了呗!在你的记忆中,只有RAW格式的图像在拖动白平衡滑块的时候,才会获得自然的我们印象中的“白平衡感受”,不是吗?

后期调色的局限性
首先,让我们来理解后期调色的本质。后期调色通常涉及对录制画面的RGB(红绿蓝)色彩通道进行调整,以改变整个场景的色调。虽然这种方法可以快速地给画面“染色”,但它并不模拟真实世界中光线与物体相互作用的方式。在现实世界中,不同色温的光线会影响物体表面的反射和吸收特性,而这一复杂过程是后期简单染色所无法复制的。
此外,人眼对颜色的感知是高度非线性的。这意味着,即使后期调色试图模拟特定色温下的颜色表现,最终的结果往往与我们的眼睛所习惯的自然颜色有显著差异。这种差异可能会导致画面看起来不自然,甚至让人感到不适。
人眼的色貌感知:LMS系统
为了更深入地理解这一现象,我们需要引入人眼的LMS(长波、中波、短波)色彩系统。LMS系统基于三种类型的视锥细胞,它们分别对长波长(红光)、中波长(绿光)和短波长(蓝光)敏感。与RGB系统不同,LMS系统更接近于人眼感知颜色的方式,并且能够更准确地描述在不同照明条件下物体颜色的变化。

在沙尘暴等场景中,大气中的颗粒物会散射光线,导致蓝光的强度降低而红光相对增强,从而改变到达观察者的光线的色温。这种色温变化会影响视锥细胞的激活模式,进而影响我们对颜色的感知。而后期调色,由于没有改变图像的物理属性,无法复现这种复杂的生理反应。
那么为什么通过RAW格式调整白平衡就能获得似乎正确的反应呢?慢慢来,这个问题我们留到后面再进行讨论。
现在,让我们回到最初的问题:为什么我们不能简单地通过后期调色来复现沙尘暴场景的黄色调?答案在于沙尘暴照明下的颜色变化不仅仅涉及整体色调的偏移,还包括对场景中各个物体颜色的微妙影响。这种效果是后期调色难以实现的,因为它需要对场景中的每个物体和光源进行单独的颜色调整,以模拟它们在不同色温下的自然反应。
为什么沙尘暴环境下画面长“这样”
这个问题不如归纳为,“我们是怎么看到特定的颜色的”
这个问题的答案牵涉到复杂的生理学和物理学过程,为了开始定量研究“颜色”奥秘,当然又要引出大名鼎鼎的CIE色度系统啦。

简而言之,CIE色度系统是一个用于描述人眼可以感知的所有颜色的三维空间,通常用X、Y和Z三个坐标轴来表示。这个系统基于人眼对三种不同波长光(红、绿、蓝)的响应,通过一组颜色匹配函数来将光谱功率分布转换为X、Y、Z三刺激值。这些刺激值随后可以转换为色度坐标,如u', v'(均匀颜色空间)或我们最为所知的——x, y(CIE 1931色度图)。如果你想了解更多与之相关的前要知识,欢迎去Wiki上面自行学习。
自然物体的颜色形成过程
说了这么多,其实就是想想告诉各位我们所看到的颜色如何量化的表示。
对于一个自发光的物体,CIE三刺激值可以用以下方法计算。

P(λ)是观察源的光谱功率分布,而x_,y_,z_是CIE标准配色函数。简而言之他们一定程度考虑了人眼的刺激对等能光的的响应,并经过了优化。
而对于我们所观察到的沙暴照明下的物体颜色,我们所看到的物体其实是反射了经过沙尘滤光的太阳光又经过了物体的吸收最后反射出来的光谱能量。因此三刺激值就变成了

其中P(λ)被替换为了由S(λ)即物体反射率与我们的照明光源I(λ)积分之后的结果。因此我们所看到的物体颜色与光源+物体反射特性都有关。(划重点)
而如果想让一个颜色刺激能够在CIExy色度图上显示出来,我们还需要做一步XYZ到xyY的转换。


这样一来,我们就终于于于于……计算出一个光谱能量(或者说物体)的颜色啦!
如果你看不懂上面的公式,则只需要知道对于反射类物体(即我们大部分所看到的自然界不会自己发光的物体),它们的呈现色彩是特定光源下经过了部分吸收之后反射给我们人眼的能量刺激。并且整个过程是基于线性物理光环境(y=1.0),而不是我们在显示器下面的Gamma2.4或者sRGB进行的运算。因此下次你试图对画面进行白平衡校准的时候,别忘了检查一下自己是在什么Gamma坐标系下完成的。(虽然Camera RAW情况下这些运算已经由软件帮你自动完成了,但是对于Log素材而言你可能需要自己完成这些Technical Transform)
从晴天变成沙尘天后,这个公式中变化的量便是I(λ)——即照明环境的变化。
而沙尘暴的光谱数据和滤光系数也很好获取,只要亲自去一下沙尘暴的地方并用光谱仪采集现场光谱,然后对比在相似的时间和太阳角度测量阴天和阳光的光谱,再进行划分就可以获得沙尘的对太阳光的衰减谱了。



经过了费命的实地采集,我们……咳咳……
2024年3月27日,华北出现大面积沙尘天气, 我决定在16-17点前后亲自开着车,戴着N95口罩,冲进河北境内张家口市以北空旷地区,进行现场光谱采集。
下图,蓝色线就是实际采集的沙尘下的环境光照度数据,黄色线是阴天的天光数据,而绿色则是沙尘发生时间相近且太阳高度角相近的晴空下的太阳光谱数据。

你会注意到760nm附近有一个大坑,并且经过滤光系数计算之后,这个地方依然有个坑,是噪声吗?还是仪器坏了?都不是,这个就是大名鼎鼎的氧气O2吸收峰了,被环境监测领域称作A-band,通常用于计算与气溶胶或空气质量相关的一些系数。由于我们的这篇文章还是围绕色色的东西展开的而不是遥感环境监测,所以在此就不对太阳光谱的各种坑坑洼洼做详细的解读了。有兴趣可以自行了解这些坑的背后故事。留两张图馋馋我们的渴望知识的眼睛和大脑吧!


总结下来,沙尘暴改变了照射到物体上的光线的光谱组成,进而影响了物体表面的反射特性。
- 光线的散射与吸收:沙尘暴中的颗粒物散射阳光,尤其是短波长的蓝光,而较长波长的红光和黄光散射较少,因此能更多地到达观察者眼中。
- 物体表面的反射:物体表面根据其自身的反射特性,反射特定波长的光。在沙尘暴照明下,由于光谱组成的变化,物体反射到观察者眼中的光波长分布也会发生变化。
- 人眼的感知:人眼中的视锥细胞对反射光响应,产生神经信号,这些信号被大脑解析为颜色感觉。
- 颜色的CIE表示:可以通过测量物体在沙尘暴照明下的反射光谱,并使用CIE颜色匹配函数,计算出相应的X、Y、Z值,进而转换为x, y色度坐标。
如果要简易的获取物体的光谱反射系数也可以非常的简单,只需要先测量一个标准的漫射板,然后用同样的角度测量样品。再进行一个积分除法,就能简易获得反射谱。

(把上面的I_dust换成样品的反射功率分布,I_ref换成漫射白板所测到的反射功率分布)。写这篇文章的时候刚好闲来无事,就去公园里面采集了一些物体的光谱反射率系数。即便如此,如果需要更精确的测量这些数据,就需要专用的一体化光谱仪和更标准的测量环境和条件去测量了,但是本研究毕竟预算有限,而且为了更接近真实世界的情况,因此用手持式光谱计就可以获得非常有说服力的数据了。

我们把这堆光谱数据输入到CIE系统的算法中,并使用默认的假想光源- E光源(即光谱功率完全等能分布)来进行照明,就可以把这些物体的理想颜色投影到xy坐标系上了。

这样一来,我们终于拥有能够用来给本研究使用的光谱和参考色彩数据了。那如果用其他的光来照射这些物体会发生什么变化呢。那就只需把假想的照明E的光谱功率换成我们所需的光源的真实照度数据。比如这就是从A照明(即摄影师眼中的钨丝灯光源)照明变成D65照明之后,一些样本发生的色彩变化。

而如果使用沙尘暴照明这些物体的颜色,那就只需把假想的照明E的光谱功率换成我们采集的沙尘暴的真实照度数据。

有了这些前提知识之后,我们就能有针对性的解决我们想做的事——我们想做什么来着?(似乎扯远了)
我们能在不前往沙尘暴现场,让演员老师吃一大口沙子的前提下,就能模拟沙尘暴的照明吗?
以及,我们能模拟到多么精确?不同的方法之间有什么区别?
So 如何精确且自然的调成暖色
灯光“变黄”
经过测量,沙尘暴现场的照明色度坐标约为[ 0.36641184 0.36478725],对应的相关色温值为4498.46372604 K。
作为一个成熟的灯光狮知道了这些数据,当然也就知道怎么用自己手中的灯光模拟沙尘暴照明了——没错!调色温,现在大部分LED灯具都允许你通过一种【更改两种色温LED发光比例】的方式来把灯光的色温从3000K不等到7000K不等进行无缝的调节。有些更高级(富贵)的全色灯还允许你直接调节灯光的xy坐标。
不过我们需要注意的是,xy值和cct值本质上都是一种「降维」的对灯光色彩的描述。因为CIE存在一个重要的概念——条件等色。如果你没有听说过这个概念,那你应该听说过【同色异谱】,换而言之就是不同光谱能量居然会让人感觉是同一种颜色,即便它们真的【不同】。而这个特点同样适合灯具。由于xy值是光谱降维计算而来,而cct值由xy值降维计算而来,因此可能存在不同的光谱分布对应同一个xy值,不同的xy值对应同一个cct值。这样就给精确模拟光源特性带来了很大困难。某些物体在这个照明下是颜色一样的,而到了另外一种照明下却出现了色差?!
那么我用我家的爱图仕LED灯模拟4498K的沙尘暴色温,会有多大色差嘞?
这应该是你想问的问题
这个问题从计算而言也比较简单,我们只要采集把灯具调整到4498K之后采集光谱数据,再输入到刚刚的计算系统中算出我们的样本在这个照明下所得到的颜色,然后与在真实沙尘暴下模拟出来的样本颜色相比,计算它们的色差,不就OK啦?
我找了我室友的一个可调色温的台灯,将它的色温调到了大约4200K,并采集了光谱数据。

接下来,把这个光谱数据输入到我们的颜色计算函数中,并与理想情况下进行对比。

后期“调黄”
如果我们【真的】没办法在前期通过灯光达到我们所需的暖调,那也只剩下更改相机白平衡和后期调色两种手段。你应该还记得我们在最开始展示的后期调色所达到的【糟糕的结果】,但实际上,使用正确的的手段,是可以最大程度还原暖色温照明下的结果的。
在这里我们假定你使用一台正常的数字相机,你的屏幕经过了正确的校准,并工作在sRGB色彩空间下,屏幕白点校准为D65。
虽然直接更改RGB的方式显得非常愚蠢并且不符合人眼的“线性”感知,但本身这操作没错,实际上它是相对于当前的工作Gamma下的线性处理,也就是显示层面的处理,显示器的目标是为了让真实场景光与显示光成线性关系,即OOTF=1,这样我们才能看到和现场看到一样的好看的画面。反过来讲,只要让我们的RGB相关计算从符合显示的“线性”回到符合物理层面的线性关系,不就能模拟相机白平衡乃至是物理场层面下的色彩反应了?!
那如何让相机的RGB值回到“更物理”的状态呢?如果相机的OETF和色域已知,那么对于类似Log素材这样的非RAW素材,我们就可以通过逆向OETF和色彩转换矩阵,把Camera Gamut+Camera Log素材重新转换到CIE XYZ+Linear空间进行更自由的运算。
相机白平衡的核心原理是RGB拜耳阵列的三增益关系的线性改变,而人眼判断一个白色物体发生的变化也是通过LMS视觉特征的刺激值线性改变得到的,虽然人眼本身是个非线性系统,但在物理环境下模拟人眼感知的变化通常可以用线性的方式来达到目的。通过这个特性,我们就可以利用在XYZ+线性Gamma系统下的一些小Trick来获得“照明变化”。这个Trick早已由成熟的名字,被称作:
Chromatic Adaptation Transform
色度适应性转换
色度适应性广泛的被描述为人类视觉系统的动态机制,用来弥补不同观察光源下的白色变化(即色温)。如果在不同光源条件下观察白色物体(如冷日光和白炽灯照明),只要观察者“适应”观察光源,那么白色物体会保持他的白色外观属性
听起来很高级且玄乎的一个词,简单来说,就是人们试图找到一种方法能够量化的体现人眼对照明变化后的物体颜色变化感知。
摄影机白平衡就是一种最简单的色度适应转换,它是基于摄影机的RGB的光谱响应的三通道增益,用这种方法能够很好的控制传感器对“白色”的认知。但这样进行白平衡操作有个缺点,由于它是基于传感器自己的色彩矢量,而不是人眼的对不同光谱功率形成的颜色感受(即CIE 1931中的配色函数),而不同的相机感光系统的感光特性也不一样(如下图),因此直接在摄影机RGB下做线性增益,有可能导致色彩本身发生不利的偏移。(形象的打个比方:你把白平衡滑块往暖色方向拖拽,画面的确变暖了,但是也莫名其妙变绿了,其中有些蓝色的衣服还变成了紫色)

因此厂商在定义白平衡的时候,都有自己的优化方式,而不一定就是简单粗暴的调整RGB信号的线性增益,有些厂商可能会使用特定的颜色转换矩阵,把相机的三刺激矢量拟合到更接近符合人眼特性的配色函数上(例如CIE 标准观察者配色函数),或者就是进入到XYZ空间进行增益变换。

左上角的图经过一种【神奇的变换】之后,就会变成下方图中的虚线的状态,怎么样,是不是更加接近CIE XYZ的配色函数(右上图和下图实线)了呢

矩阵变换除了让摄影机的光谱特性模拟了人眼的光谱响应,实现了颜色正常化之外,还有个重要功能——在这种运算空间下,我们能更自然地进行画面的白点转换。
完整的色度适应性转换过程如下。首先我们要把原始的白点S转换到目标的白点D

这个过程看起来很简单,就需要使用一个转换矩阵[M]
M的计算方法如下

你会注意到有一个新的矩阵产生[MA],这个矩阵的作用就是让运算空间【更更更符合】人眼的特性,因此我们能够获得更加精确的转换结果。
最简单且原始的一种是XYZ Scaling,而Bradford和Von Kries方法则是经过许多实验之后的优化色彩转换解法。在这种矢量空间运算之后得到的结果会更接近人眼的感受。
Method | [MA] | [MA]-1 |
XYZ Scaling | 1.0000000 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 1.0000000 | 1.0000000 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 1.0000000 |
Bradford | 0.8951000 0.2664000 -0.1614000 -0.7502000 1.7135000 0.0367000 0.0389000 -0.0685000 1.0296000 | 0.9869929 -0.1470543 0.1599627 0.4323053 0.5183603 0.0492912 -0.0085287 0.0400428 0.9684867 |
Von Kries | 0.4002400 0.7076000 -0.0808100 -0.2263000 1.1653200 0.0457000 0.0000000 0.0000000 0.9182200 | 1.8599364 -1.1293816 0.2198974 0.3611914 0.6388125 -0.0000064 0.0000000 0.0000000 1.0890636 |
关于这部分内容,在两年前的一篇文章里面就已经说过噜,有兴趣可以去看看不同的色度转换算法所带来的变化。https://www.fengyu-poi.cn/?p=1744





你会注意到,XYZ Scaling对于一些极限的颜色表现是非常差的,蓝色的色块直接就飞到了紫色去了,而像Bradford这样的方法则能让颜色在白点转换过程中尽量符合我们感知的变化,而像CAT02这样基于色貌模型(CAM)的CAT变换就更为精确了(当然也更复杂,不能用一个简单的[MA]描述)
讲了这么多,你应该猜到了如何把我们的LED灯环境下的图像转换到模拟沙尘暴色温下的方法了——将整张图像扔到色度适应性转换系统中,并传入原始的照明白点和我们所希望的目标白点。经过CAT之后,再把颜色值转换回XYZ系统中用于评估,或者是转换到sRGB这样的显示器色彩空间用于给我们显示。
那么这样的方法是否准确呢,此处用Von Kries方法进行了一盏D65色温的LED照明到沙尘暴采样照明下的色度转换。样本的颜色坐标在xy图上“行走”的轨迹已经用箭头标出。箭头起始点是样品在LED照明下的色彩,而箭头末端是LED照明之后的xy色彩经过CAT变换所计算出来的目标结果,真实沙尘暴下样品的颜色用x符号标出。


你依然会注意到这个过程有少量误差的产生,但经过了前面知识的学习,你应该也会知道为什么会有这一部分误差的产生了:色度适应性也是在XYZ这样的降维空间下的一种“妥协性解决方法”,传入的所有参数都是颜色的XYZ值,而不是原始的光谱数据,因此对于一些反射特性很极限的自然界物体,这种方式依然是不能完美还原物体的固有颜色的。即便如此,CAT依然是最适合处理摄影机图像的,并广泛的应用在了白平衡调整工具中(这就是这一章并没有大篇幅提及白平衡方法的原因,因为白平衡本身就是一种CAT的应用),并且,CAT方法远比你在PS或者达芬奇中徒手拉曲线,或者搓色轮的结果要精确且自然的多!


到此,我们可以认为,在一定范围内,通过CAT的手段在后期给画面进行“白点偏移”是最为明智的解法,再配合一些调色师特定的艺术创意工具,我们可以做到:既能模拟自然物体在特定照明下所出现的微妙颜色变化,也能为我们的画面染上一层特定的创意风格!而由于CAT是参数化的,因此在不考虑匀软件运算精度的情况下,在CAT做的操作完全可逆!也就是说你可以随时由暖变冷,也可以由冷变暖。
更重要的启发是,除了可以用CAT模拟我们想要的照明,CAT还能以更加基于物理的方式,或者就是摄影师们口口相传的“原生”的方式来调整画面的白平衡,而完全无关于这张图片是否是RAW文件。(当然大前提是画面的Gamut和Gamma已知的情况下)。所以熟悉的伙伴会想起来每次我做调色的时候都会问这个素材的色域和曲线是什么,其实就是为了给CAT这样的Scene Refered工具提供一个更精确的工作环境。
例如对于银翼杀手的封面图,我们就可以利用CAT逆向反推在正常白平衡下的图像外观表现,是不是很像你在操作一张RAW图像所获得的自然白平衡控制结果了。反过来,我们可以用同样的手段把一副图像经过CAT赋予沙尘照明的观感,而这个过程不需要复杂的色轮和曲线来回搓,只需要给CAT输入你想要的目标白平衡值就可以了。


如果把两种手段结合起来呢?
也许你已经想到了,如果我们先用一个光谱分布“比较接近”沙尘暴照明的灯具,或者说,色温接近的灯具也行,先大概给画面做一个基调,最后再通过CAT进行微调,能否让结果更好呢。
拿回这张图,使用家用LED台灯的光谱模拟出来的颜色和真实沙尘暴环境下的沙尘颜色对比,我们能够明显注意到,目标颜色的色温偏移并不多,有也主要是在色品方向上的偏移,那么如果把这两个照明的xy坐标输入到CAT系统中进行补偿,能让结果比现在更好吗?

可以看出误差已经变得非常小,并且大部分都小于人眼可感知的范围,何况这是一个光谱功率“看上去”完全不符合沙尘下阳光的特性的LED灯。


如果你想更加量化的研究,你还可以使用deltaE公式,对比LED在沙尘色温下与实际沙尘照明下,样品颜色误差的欧式距离,这就跟研究发烧友们研究屏幕色差是一个道理。
dE1976公式非常简单,只需要计算颜色在Lab空间中的距离即可

而dE2000公式则有了不少改良,用于更加“感知恒定”的评估色差。
那什么灯具最适合模拟沙尘暴嘞?只要找出dE最小的那个灯了!
这可能是一个富贵的问题,因为需要采集大量的不同的灯具光谱功率分布了
笔者给出了就地采集的几种光源,关于它们模拟性能的差异,只需要看最后两行:DeltaE平均值和标准差就可以得到结果了。
Color | dE_sun_light | dE_dys_B7c_adj2800 | dE_cuc_3607_mixed | dE_dys_yjsfled_adj4300k | dE_dys_deskled_adj2700 | dE_dys_deskled_adj4200k | dE_dys_B7c_adj4400 | dE_dys_B7c_adj10000 |
test.npy | 0.09 | 0.72 | 0.60 | 0.78 | 0.64 | 0.73 | 0.75 | 0.78 |
skin_face.npy | 0.53 | 1.61 | 2.33 | 0.66 | 0.27 | 0.81 | 0.25 | 1.43 |
cc_skin7i.npy | 0.30 | 0.28 | 2.74 | 0.61 | 2.92 | 1.96 | 1.04 | 0.45 |
skin_handc.npy | 0.61 | 1.78 | 2.27 | 0.74 | 0.53 | 0.75 | 0.18 | 1.64 |
cc_black.npy | 0.33 | 2.05 | 0.65 | 1.31 | 1.39 | 1.13 | 1.24 | 0.72 |
cc_red3l.npy | 0.31 | 0.75 | 3.96 | 0.86 | 3.23 | 2.84 | 0.60 | 0.82 |
veg_4.npy | 1.06 | 2.77 | 1.05 | 1.41 | 2.33 | 0.68 | 0.31 | 2.29 |
cc_yel4h.npy | 0.17 | 1.28 | 2.92 | 0.37 | 1.32 | 1.30 | 0.42 | 0.70 |
veg_1.npy | 0.27 | 0.80 | 1.37 | 0.32 | 0.90 | 0.60 | 0.28 | 0.57 |
cc_blue5b.npy | 0.74 | 1.18 | 7.91 | 2.33 | 5.63 | 5.30 | 0.69 | 1.49 |
cc_green9i.npy | 1.51 | 5.22 | 2.91 | 3.16 | 2.25 | 0.83 | 1.16 | 2.77 |
veg_2.npy | 0.27 | 0.94 | 1.63 | 0.27 | 0.98 | 0.66 | 0.38 | 0.57 |
veg_3.npy | 0.13 | 0.60 | 1.42 | 0.22 | 0.64 | 0.57 | 0.21 | 0.39 |
skin_handnearblood.npy | 0.44 | 1.51 | 2.18 | 0.55 | 0.39 | 0.72 | 0.22 | 1.23 |
cc_skin7d.npy | 0.24 | 0.47 | 2.41 | 0.76 | 2.27 | 1.68 | 0.79 | 0.02 |
cc_skin7e.npy | 0.21 | 0.53 | 1.81 | 0.65 | 1.59 | 1.26 | 0.54 | 0.15 |
concrete1.npy | 0.07 | 0.47 | 1.25 | 0.17 | 0.40 | 0.51 | 0.18 | 0.34 |
skin_recoveringred.npy | 0.87 | 2.21 | 3.51 | 1.08 | 0.13 | 1.44 | 0.33 | 2.35 |
skin_mouth.npy | 0.13 | 0.37 | 0.46 | 0.18 | 0.07 | 0.19 | 0.06 | 0.31 |
avgDE | 0.44 | 1.34 | 2.28 | 0.86 | 1.47 | 1.26 | 0.51 | 1.00 |
stdDE | 0.37 | 1.14 | 1.63 | 0.74 | 1.36 | 1.13 | 0.34 | 0.77 |
Ra | 98.70 | 95.21 | 82.71 | 88.17 | 84.66 | 90.21 | 94.07 | 95.14 |

我们在测试中留意到,当CRI高于90之后,更高的CRI与模拟精度的相关性会变得更弱,有些“没那么优秀”的LED光源似乎反而更适合模拟沙尘暴照明,但无论如何这些光源都已经非常接近。(至少比那种显色只有70的烂光源好太多了)
到此,我们的结论逐渐开始浮出水面!从目前的实验数据来看,前期选择光谱特性更加接近黑体(或者显色更高)的灯具,并预先进行光源技术指标的模拟(色温,色度坐标),并结合CAT或者其他技术变换,修正最终的色彩误差,尤其是色品层面的偏移,就可以有效的让我们的画面无限接近于真实沙尘暴环境下的拍摄结果。我们可以注意到B7c灯具调节到4400K之后再结合后期手段,可以让平均delta E 1,这已经是人眼几乎无法分辨的颜色误差了!在这个层面之上,创造者再加入自己的对画面的理解,进行适当的风格化调色,就能创造出富有质感和特色的画面了!
也许在不久的将来,卑微的笔者有机会尝试测量目前市面上所有不同光谱特性的灯具,然后对它们进行模拟了_(:3」∠)_。
遗留问题和展望:摄影机参考Or人眼参考
虽然已经验证了通过灯光模拟或者是后期通过类似白平衡控制的方式来模拟特定光源的可行性,此处依然可以留下不少的问题。
你会注意到刚刚我们所有的颜色评估都是基于人眼完成的,在计算方式中体现为我们采用了CIE1931配色函数,这份函数会把光谱转换为人眼所看到的颜色。但是实际上在工作中,我们使用的并不是人眼,而是摄影机和屏幕,也就是说,如果要评价对于【通过LED变色温从而模拟沙尘】在特定摄影机的色彩一致性,我们可能要把CIE 标准观察者的配色函数更换为摄影机的光谱响应对应的配色函数,因此这里就存在色彩系统本身自身的计算缺陷。
对于一个摄影机-显示器-人眼系统,我们当然需要用摄影机的配色函数来计算它所看到的颜色,然后再把它所看到的颜色输入到色彩空间转换矩阵中,计算出这个颜色最终到达显示终端(比如sRGB)的色彩值。这样才能评估一个颜色在整个图像处理Pipline中走完全程的变化。
所以就当作自己挖了个坑,期待未来能够填上了!
第二部分 5月15日更新
为了更有信服力的完成本研究,这两天抽空做了以下更新或升级。
光谱数据集V2.0
我们用更严苛的方法采集了自然界大量物体的反射率数据,并使用了标准漫射球在每次测量前对光谱仪进行100%反射率的定标,因此现在380nm-780nm的光谱资料比以往具备更高的信服力(还记得第一版光谱数据居然出现了超过1的反射率吗?牛顿的棺材压不住了)。
同时,我们采集了更多的植物,花朵,肤色,和奇怪的一些颜色。(现在走在路上已经没法正常走路了,看到朵花都想测一下)
Veg-植物类
Sfc-各种表面,人造涂料,有机材质
Skin-皮肤上的各种特性区域
Solid-岩造物



第二套数据集能够反应生活中一些常见的引人注意的自然物体颜色,其中大部分颜色都在sRGB内,这样说明了sRGB本身设计的合理性。
基于xyY的亮度匹配
之前我们注意到,理想色彩(Target Look)和模拟光源色彩(Sim Look)以及色度匹配之后的色彩(Adapted Look)并不具备同样的Y能量分布,这可能导致在进行CIE dE2000色差对比和主观对比的过程中出现不需要的影响。考虑到人眼存在的Steven Hunt效应,即便对于xyY色彩空间来说两个样品颜色是一致的(即它们的xy坐标一致),dE2000在算法中考虑了这个问题,但主观上由于Y不同,人眼对两者的差距在主观层面上会失去平衡。
因此我们在照明光谱数据中先预计算了两个照明的Y值,并利用Y值反向对光谱sd做了均衡处理,因此能弥补亮度不同导致后续模拟出现的潜在问题。
主观模拟色卡
我们将目标的颜色和模拟的色彩对应到sRGB显示色彩空间中进行显示,现在你可以更加容易的用肉眼看出目标颜色与色度匹配后的模拟颜色的差异。显然,高显色的灯具经过色度匹配之后在差异上会更小。
对于每一个色条,左半部分是目标颜色,而右半部分是模拟照明之后经过CAT得到的颜色。如果你意识到有一根色条被拆成了两半,那么说明该照明环境下,这两个样品的颜色出现了可感知的差异。


而相比而言,爱图仕B7C这样的高质量灯具就能让CAT的作用最大程度的发挥,经过匹配之后,2800K色温工作的B7C能够完美匹配4300K沙尘照明日光的颜色。至少,你不会在色条上看到每一根被拆成了两半


因此在此我们又要点出一个众所周知的重要理念:高显色的灯具不仅是为了让物体颜色好,而是让物体颜色在各种色温与白平衡组合的设置下都能以更加自然的方式表现。举个极端例子就是你可以让10000K色温照明的照片经过CAT变成2800K的钨丝灯照明照片,而物体固有色看上去会跟真的2800K照明下拍出的照片一个样!
如果你想具体知道CAT到底干了什么,现在就很好办了!图左是当物体被10000K的LED照明所照射,与我们所需的沙尘暴照明之间的差异,而图右则是有CAT之后的色彩表现。


而从10000K到4000K这么大幅度的过程,显然误差一不小。虽然你从上图不一定能看到匹配之后的误差,但是数据上的误差依然存在,除了像之前那样用白色箭头指示模拟光源颜色-色度转换后的颜色,我们还使用了深蓝色的直线表示转换后的颜色与最终目标颜色的最后一点偏差。(但真的已经很难看出来这点误差了)

总结
至此,这个项目就告一段落咯,未来如果有空,也许会用“感知均匀色彩空间”(UCS)来进行评估,也就是我们所有的单位不再使用xy这样的非感知均匀方式,而是使用类似Luv,Lab这样的更加符合人眼的评估方法。如果你有兴趣,下面提供了关键的数据集供各位下载。
数据下载
沙尘照明数据
光谱反射率数据
额外备忘
一些转换公式






https://www.waveformlighting.com/color-matching/what-is-d65-and-what-is-it-used-for