本文来源:MobileDeviceTalks (微博)
这次 RYYB的设计在手机上比较新,我更关注技术细节而且它又跟光有关系,所以就又忍不住写了一篇文章,抛砖引玉一下。要说清楚这次P30Pro用的RYYB和之前RGGB有什么区别,首先我们要了解CMOS是怎么工作的。
我们都知道计算机不能处理模拟信号,只能处理数字信号,所以现实世界的光影也不能直接被计算机处理,所以要记录数字影像,那么我们必须把真实的影像通过数字化转变为计算机能读取写入的格式。因此我们就需要一种东西,能够把光信号转换为电信号,这也就是 CCD和CMOS的由来,由于成本和功耗等等原因我们现在看到的数字相机和手机都是 CMOS,具体原因展开太麻烦所以也就不详细说了。
每一个 CMOS像素都包括感光二极管(Photodiode)、浮动式扩散层(Floating diffusion layer)、传输电极门 (Transfer gate)、起放大作用的MOSFET、起像素选择开关作用的M0SFET.在 CMOS的曝光阶段,感光二极管完成光电转换,产生信号电荷,曝光结束后,传输电极门打开,信号电荷被传送到浮动式扩散层,由起放大作用的MOSFET电极门来拾取,电荷信号转换为电压信号。所以这样的 CMOS也就完成了光电转换、电荷电压转换、模拟数字转换的三大作用,通过它我们就能把光信号转化为电信号,最终得到数字信号被计算机读取,这样,我们就已经拥有了记录光线明暗的能力,但这还不够,因为我们需要色彩。
现代彩色CMOS的原理也很简单,直接在黑白图像传感器的基础上增加色彩滤波阵列(CFA),从而实现从黑白到彩色的成像。很著名的一种设计就是Bayer CFA(拜耳色彩滤波阵列)。一个很有趣的事就是,我们用来记录光影的 CMOS,和我们用来输出光影的显示器,原理也刚好是向相反的,CMOS把光转化为电信号最后以数字格式记录,显示器把解码的数字格式从电信号重新转化为光。光电之间的转换也就构成了我们人类数字影像的基础。好了回到正题,为什么是 RGB三种颜色?为什么 G的占比要高于 R和 B呢?
这是因为人视网膜上的感光细胞分为两种:视锥细胞和视杆细胞,分别对应人眼的明视觉和暗视觉。视锥细胞又分三种:红色感光细胞、绿色感光细胞、蓝色感光细胞,它们对照明的明暗条件敏感度较低,只有当光照强度达到一定条件锥细胞才能够起作用。视杆细胞对光照的敏感度较高,可以在光照条件很暗的情况下对景物成像,却不能感受颜色。这也解释了为什么在晚上的时候人仍然能够看到物体,却不能有效地分辨物体的颜色的现象跟颜色有关的三种视锥细胞,每一种都对 RGB三种颜色最敏感。
注意,是最敏感,所以蓝视锥细胞不仅能感应蓝色,也可以感应到绿和一部分红色,绿视锥细胞不仅能感应绿,也可以感应一部份蓝和红,最后红视锥细胞也是如此。所以通过三种视锥细胞感应到不同波长光谱的比例,人类就能识别出视觉上除了红绿蓝之外的其他颜色。
人造的大部分显示器,也都是利用这个特性来欺骗人类看到红绿蓝之外的颜色,比如上图就是我的显示器在显示黄色时实际发出的光谱,根本就没有黄色,这就是一个骗子显示器,但是通过对人眼视觉特性的利用,我们看到的就是黄色。1931年,CIE(国际标准照明委员会)建立了一系列表示可见光谱的颜色空间标准,定义了CIE-RGB基色系统。规定了RGB系统的三原色光波长分别为700nm,546.1nm,435.8nm的红光(R)、绿光(G)、蓝光(B)。
通过混色实验可以得到上图的一组曲线,它们表示在 380nm-780nm范围内当各个光谱能量一样时,某一波长的光谱色与
混色结果一样,并称这三条曲线为 CIE1931 RGB系统光谱三刺激值曲线,这与后文中我们要提到的标定有很大关系。
这还可以延伸一下,由于计算颜色三刺激值时会出现负值,所以 CIE又设计出了一套 CIE-XYZ系统,用 X, Y, Z来代表红绿蓝三原色,上图也就是 CIE1931 XYZ系统光谱三刺激值曲线。
著名的 CIE 1931 xy色度图也就是从此而来,我们可以用它描述出任意的一种人眼可见色彩。当然后来为了更精确的修正,还有 CIE 1976 u'v色度图,我们的很多评测也都使用了这个标准。因此,在理论上只需要记录 RGB,也就能还原出我们眼睛看到的所有颜色了。
另一个事实是:皮皮虾拥有 16种视锥细胞,所以如果让它看我们的显示器,它只会觉得你给我看的这是个什么玩意???
好了我们回到滤镜颜色的问题上。对于基于 Bayer CFA的设计,当我们拍摄右侧图 1的场景时,CMOS所有像素传回来的图像直接组合的结果就是右侧图 2,当我们将滤镜颜色加到像素上会得到图 3,很明显这也不应该是我们最后看到的图像。所以由 3到 4的过程,就需要插值算法来补足,之前真假 4800万像素的争论也就是在这一步。
对于 Bayer CFA设计的 CMOS,有常用的插值算法,比如相邻像素插值、双线性插值、三次多项式插值等,它们的目的都是为了还原出全部的 RGB三个通道分量,比如双线性插值就是这么算的:对于只有红色分量的像素:例如 R32:
对于只有绿色分量的像素:例如 G33
对于只有蓝色分量的像素:例如 B43
通过还原得到完整的 RGB分量,我们就能得到一幅没有缺损的图像了,但是这就是终点了吗?并不是,我们不能直接把这样的图像存储,因为这其中有一个很重要的问题:Bayer CFA经过插值之后,CFA的色特性与人眼的视觉特性并不一定重合,所以图像中的像素颜色可能都是偏色的,这里可能是光学透镜的光谱特性导致,也可能是 Bayer CFA上的彩色滤镜光谱特性导致,跟拍摄的环境光也有很大关系。所以还有一步,那就是校正标定。校正标定之中最重要的则是伽马校正和颜色校正,先看伽马校正:在现实世界中,几乎所有的显示器、摄影胶片以及很多电子照相机的光电转换特性都是非线性的。这些非线性部件的输出与输入之间的关系通常用幂函数表示。理想状态下,色彩强度 (Intensity)与电子束的电压信号之间成线性关系,但实际情况刚好想法,色彩强度与输入的电压信号之间是非线性关系。显示器的输出强度和输出电压的响应大致成幂指数关系,下方式子表示输出的强度随着输入电压的增长成指数增长,通常我们就把这个幂指数称为伽马(Gamma):
为了使图像在显示器上的效果和实际情形更为接近,在摄像机获取图像后,必须进行伽马校正,把上边式子的非线性关系校正为线性关系:
其中,是经过校正处理后的图像的像素值;是没有经过校正的像素值;伽马值γ表示校正的程度,γ=1时,不进行校正,γ值越大,像素灰度值的校正程度越大。颜色校正:由于不同厂家在制造 CMOS时使用的彩色滤光片不同,CMOS对不同波段的光电响应度不同,都会导致相机的光谱响应曲线不同,比如这是某一个 CMOS的光谱相应曲线:
很容易的就会发现彩色相机 RGB三刺激值曲线图和之前我们提到过的 CIE 1931-RGB系统有很大差别。
想减小这种差异,就要对原始图像的像素灰度值(R,G,B)进行必要的补偿,带来和人眼感知相近的颜色,这其中的工作就是颜色标定。好了,铺垫了这么久,终于讲到那当我们把 RGGB换成 RYYB,用黄色滤镜替代绿色会怎么样了。
黄光的光谱主波是 570-590纳米,刚好被夹在红绿主波之间,所以只要彩色滤镜的光谱特性设计得足够好,那么理论上黄色也就能记录红+绿,下图就是一个我假象的光谱响应示意图:
在这种非常理想的条件下,RYYB的感光总量肯定可以超过 RGGB,不过这也给插值算法补全 RGB的那一步带来了一定困难,插值不理想的话后期色彩标定也会出现问题。
而且现实情况也是要复杂得多,我找到了一篇论文:Raj Shrestha, V. et al. Polarization-tuned Dynamic Color Filters Incorporating a Dielectric-loaded Aluminum Nanowire Array. Sci. Rep. 5, 12450; doi: 10.1038/srep12450 (2015).在这之中就有相当多的彩色滤镜,甚至有直接将黄光主波压制,保留红绿蓝光谱的彩色滤片设计。最后的最后,既然 P30系列在宣传的时候提到了 RYYB设计能带来 40%的进光量提升,这一点我觉得没什么值得怀疑,在没有真机之前,可能大众了解 RYYB设计之后的疑虑应该是色准问题。而这一切,都要靠华为自己的色彩标定,伽马标定,以及自动白平衡算法了,4月 11日国内发布会见。