ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Vλ曲线与CMOS光谱匹配:成像系统颜色还原的工程密码

Vλ曲线与CMOS光谱匹配:成像系统颜色还原的工程密码 1. Vλ曲线人眼亮度标尺是怎么被定义的1.1 从一张总拍不准的照片说起如果你做过成像系统或者相机调试大概率遇到过这类问题明明肉眼看到的是金黄灿烂的夕阳手机拍出来却偏红或者发灰晚上看路灯人眼感觉是暖白色传感器捕捉到的主基调却是刺眼的橙色。很多人第一反应是白平衡没调好但白平衡只是表象。真正的问题出在一个更底层的匹配关系上——传感器的光谱响应和人眼的光谱响应根本不是一回事。这里就引出了本文的核心概念视见函数也叫光谱光视效率国际上通常记作V(λ)或Vλ。它本质上是一条曲线刻画的是人眼对不同波长光线的敏感程度。任何以给人看为目的的成像系统从手机摄像头到安防监控再到工业相机都在用各种手段向这条曲线靠拢。你拍的照片颜色对不对、亮度感受准不准最终的裁判不是传感器而是这条曲线背后的人眼感知。Vλ曲线看着只是一个简单的钟形但它牵扯出来的东西极多光度学的单位定义、CMOS像素的量子效率设计、红外截止滤光片的选型、彩色滤光片的透过率设计、颜色校正矩阵的计算全都要围绕它来展开。理解这条曲线才算真正理解了颜色从光子到数字这件事。1.2 明视觉与暗视觉同一双眼睛两套标尺先纠正一个常见误区人眼的光谱敏感度并不是固定不变的而是随着环境亮度变化的。在明亮环境下白天、正常室内照明人眼主要由视锥细胞负责感光此时的敏感度峰值大约在555nm附近正好是黄绿色区域。这就是明视觉的光谱光视效率函数标准记法是V(λ)峰值处的光视效能约为683 lm/W。也就是说在555nm这个波长上1瓦的光辐射功率对应683流明的光通量这是光度学的一个关键基准常数。而在暗环境下夜晚、星空、月光视杆细胞接管了主要感光工作。视杆细胞的敏感度曲线整体向短波方向移动峰值跑到507nm附近也就是蓝绿色区域。这条曲线记作V(λ)对应的峰值光视效能约为1699 lm/W。这意味着同样功率的蓝绿光在暗环境下看起来比明视觉条件下更亮。这个移动在视觉领域有个专有名词浦肯野效应。你肯定经历过——白天看一朵红色的花很鲜艳到了傍晚光线暗下来红花的颜色变得暗淡反而蓝色、绿色的物体显得更亮一些。这不是错觉而是你的视觉系统从明视觉切换到了暗视觉工作模式。对于CMOS成像系统而言绝大多数使用场景是明视觉范围所以设计时主要匹配V(λ)曲线。但监控场景、天文摄影这类低照度应用就不得不考虑暗视觉的影响。有些高端安防摄像机会推出星光级产品本质上是让传感器在低照度下的响应更接近V(λ)曲线偏向蓝绿波段而不是简单地提高增益。这个细节如果设计时没注意做出来的低照度成像画面会很怪——亮度够了但颜色感受不对。1.3 从实验到标准CIE 1924 V(λ)是怎么测出来的V(λ)不是某个人拍脑袋定的而是通过大量心理物理学实验测量得到的。最早的系统性测量可以追溯到1924年国际照明委员会CIE发布了标准化的明视觉光谱光视效率函数这就是著名的CIE 1924 V(λ)。当年做实验的方法大体上是这样的让观察者用一只眼睛看一个半圆视场半圆的一侧是参考光另一侧是待测波长的单色光。通过调节待测光的辐射功率让观察者主观判断两侧亮度相等记录下功率值。对每个波长重复这个过程最后把一系列波长下的阈值功率取倒数归一化后就得到V(λ)曲线。不过这个实验有一个前提条件——观察视场不能太大。1924年的标准使用的是2度视场对应人眼黄斑区的锥细胞响应所以也叫2度视场标准观察者。后来研究者在更大视场10度下重新测量发现结果略有差异于是CIE又在1964年补充定义了10度视场标准观察者。在实际工程中显示系统和相机设计大多沿用2度视场标准因为观看照片时的视觉角度与之更接近。需要多说一句的是V(λ)描述的是亮度感受的敏感度而不是颜色的敏感度。颜色感知需要三个通道也就是CIE RGB或者CIE XYZ色度系统中的三刺激值而视见函数只对应其中Y通道的亮度贡献。可以说V(λ)是整个现代色度学的地基之一——没有它流明、勒克斯、尼特这些光度学单位全都无从谈起传感器的灵敏度标定也没了参照物。1.4 为什么Vλ曲线对成像系统如此重要用一个类比来理解人眼是一台经过亿万年进化的生物相机它的光谱响应曲线就是这台相机的出厂标定。任何人工成像系统只要最终使用者是人就必须尽可能让自己的光谱响应与人眼一致。这背后有几个很实际的工程诉求。第一是亮度的准确感知。传感器的光谱灵敏度如果和人眼不一致那么同样强度的红光和绿光照到传感器上产生电荷的比例与人眼感知到的亮度比例就会不同。结果是画面里红色的物体比眼睛看到的更亮或更暗整个画面的明暗层次都偏了。第二是颜色还原。CMOS图像传感器的每个像素只能输出一个灰度值颜色是通过红绿蓝三色滤光片分光后重建的。如果传感器的本征响应不匹配人眼彩色滤光片设计得再好最终算出来的颜色也会失真。第三是不同设备之间的一致性。一台标称800万像素的手机和一台标称4800万像素的手机拍同一场景应该得到接近的画面。但如果各自传感器的Vλ匹配程度不同拍出来的亮度和颜色就会差很多。这也是为什么行业里会有色彩一致性这个专门的调试方向。理解了Vλ曲线的地位接下来就可以看CMOS是怎么一步步实现这种匹配的。2. 硅基像素怎么感知光从光子到数字信号的物理过程2.1 光电效应与量子效率像素并不是均匀感光的CMOS图像传感器工作的物理基础是光电效应。光子入射到硅材料中如果能量足够就能把硅价带中的电子激发到导带产生电子-空穴对。光子能量和波长的关系是E hc/λ波长越短能量越高波长越长能量越低。硅的带隙约为1.12eV换算一下能激发电子-空穴对的最大波长大约是1100nm。这意味着硅不仅能响应可见光380nm-780nm还能响应一部分近红外波段。这个特性后面会引出大麻烦先按下不表。衡量一个像素把光子转化为电子的效率物理量叫量子效率QE定义为被收集的电子数与入射光子数之比。QE不是在所有波长上都一样它受几个因素影响一是硅材料本身对短波光的吸收系数高、穿透深度浅长波光穿透深度深导致不同波长在耗尽区被吸收的概率不同二是像素表面的电极层、绝缘层会反射和吸收一部分光三是微透镜和滤光片的光学透过率。典型的前照式FSICMOS像素峰值QE可能在50%-60%左右而且因为电路层在光电二极管上方光线要穿过金属布线层之间的缝隙才能到达感光区短波长的蓝光尤其吃亏——蓝光穿透深度浅还没进入耗尽区就被表面结构吸收了。后来产业界搞出背照式BSI结构把光电二极管翻到靠近入射光的一侧QE可以提升到70%-80%以上蓝光响应改善尤其明显。手机摄像头的暗光性能大幅提升BSI功不可没。不过这里必须泼一盆冷水QE高不等于颜色准。QE描述的只是总的光子转电子效率没考虑光谱匹配。很多传感器的近红外QE甚至比可见光波段还高如果直接拿这种传感器拍可见光场景画面会明显偏红、偏灰。对就是那个硅在近红外有响应的副作用。2.2 拜耳阵列单芯片CMOS用一片传感器捕获三色信息人眼有三种视锥细胞分别对长波红、中波绿、短波蓝敏感颜色是大脑对三路信号的比较结果。CMOS传感器要模仿这个过程最简单直接的办法是用三片传感器加分光棱镜每片负责一个波段这种方案确实存在于专业广播级摄像机中但体积大、成本高消费电子根本用不起。于是就有了拜耳阵列。这种方案在传感器表面铺一层彩色滤光片阵列每四个像素一组排列成RGGB的模式两个绿色像素、一个红色、一个蓝色让每个像素只接收一种颜色的光。原始数据经过插值算法demosaic处理后就能得到每个像素的RGB三通道估计值。拜耳阵列选择绿色像素数量加倍是有讲究的——因为人眼的V(λ)峰值在黄绿波段绿色分量对亮度感知的贡献最大多采一个绿色像素可以有效提升细节分辨率和亮度信噪比。这算是最早在硬件层面匹配人眼感知的典型案例。但拜耳阵列有一个绕不开的问题插件时的颜色串扰。理想情况下红色滤光片只让红光透过但实际滤光片的透过率曲线不会那么完美长波红光可能漏到绿色像素蓝光也可能被红色像素吸收一部分造成通道之间互相污染颜色饱和度下降。像素尺寸越小这种串扰越明显。2.3 红外响应硅的超能力带来的麻烦前面提到硅能响应到1100nm附近这个特性对夜视仪来说是优点对数码相机来说却是灾难。人眼看不见红外光但传感器看得见。如果不加处理红外光会和可见光一起被像素吸收、产生电荷结果是画面整体偏红发灰暗部出现不自然的粉红色调颜色完全没法看。尤其在一些富含红外反射的场景深色衣物、树叶、某些化纤面料拍出来会变成奇怪的亮色。行业里的标准做法是加红外截止滤光片IRCF把红外波段的入射光挡掉。这个滤光片不是随便选个波长截止就完事了它的截止波长直接决定了传感器光谱响应与Vλ曲线的匹配程度。后文细说。3. 让CMOS的眼睛向人眼靠拢光谱匹配的三层工程手段3.1 红外截止滤光片把硅的多余能力关掉IRCF按原理分有两类吸收型和反射型。吸收型IRCF是把特定的吸光材料掺入玻璃或树脂中红外线经过时被吸收掉优点是角度特性好入射角变化时截止波长漂移小缺点是材料容易受热老化反射型IRCF则是利用多层介质膜干涉让红外波段被反射好处是截止陡峭、设计灵活缺点是入射角大时截止波长会往短波方向漂移导致画面边缘偏色。那IRCF的截止波长应该设在哪里这就要回头去看Vλ曲线。人眼在780nm以后几乎没有任何视觉响应照理说IRCF只要截止在780nm以上就够了但实际工程中很少这么做原因有二一是可见光短波端附近的滤光片透过率很难做得既高又陡二是很多传感器在650nm到780nm之间的近红外响应其实很高如果不尽早截止这片波段的红外光仍然会挤压可见光信号的动态范围。主流手机摄像头用的IRCF典型截止波长在635nm到650nm之间。这个区间正好介于红色滤光片的峰值响应和红外波段之间可以最大程度地保留红色信号的同时把红外污染压下去。安防监控领域因为要考虑夜间红外补光IRCF反而要做得比较松甚至很多监控摄像头会配备ICR双滤光片切换机构——白天把红外截止片切入光路晚上把红外截止片移开让传感器用上红外光来成像。这个取舍在工业机器视觉里更讲究。某些应用比如检测消除材料表面瑕疵需要利用物质在红外波段的反射差异就会有意选截止波长更长的滤光片甚至干脆不装IRCF。所以IRCF截止波长多少没有统一答案只看你的应用要不要匹配人眼。3.2 彩色滤光片的光谱设计与像素串扰解决了红外部分接下来是可见光范围内的光谱整形。彩色滤光片Color Filter是铺在像素表面的一个薄层材料通常是颜料分散型负性光刻胶通过涂布、曝光、显影工艺形成红绿蓝三色图形。每片滤光片都有自己特定的透过率曲线设计目标是在对应波段有高峰值透过率同时尽量减少与其他通道的重叠。理想情况下红色滤光片应该只透过600nm-700nm的光绿色只透过500nm-580nm蓝色只透过420nm-500nm。这样传感器输出的RGB信号可以几乎无损地重建出人眼看到的颜色。但现实很骨感。滤光片曲线做不到矩形那样陡峭的转变相邻通道之间必然有重叠再加上光电二极管对不同波长的吸收率不一样导致每个通道的实际响应曲线是滤光片透过率 × 硅量子效率 × 微透镜透过率的乘积。这就导致即使滤光片本身设计得很好最终传感器层面各个通道的响应依然偏离人眼光谱。这时候就要请出颜色校正矩阵了。3.3 颜色校正矩阵CCM最后一道颜色塑形工序颜色校正矩阵英文缩写CCM是一个3x3矩阵作用于RAW域或RGB域的每个像素把传感器自身的RGB响应映射到标准RGB空间。它的本质是一个线性变换假设传感器原始RGB向量是[R_s, G_s, B_s]经过CCM后得到标准RGB [R_o, G_o, B_o]公式是R_o m11R_s m12G_s m13B_s G_o m21R_s m22G_s m23B_s B_o m31R_s m32G_s m33*B_s为什么要做这种跨通道的线性组合因为传感器的响应曲线和人眼视见函数不匹配直接拿原始RGB三通道当标准RGB用颜色必然偏差。通过矩阵混合可以把传感器的红校正为标准视觉的红本质上是一种在数学上逼近Vλ曲线的手段。CCM的系数不是拍脑袋定的要在标准光源下标定获得。实际操作中用D65标准光源照射一张标准色卡比如X-Rite ColorChecker的24色卡用待标定的相机拍摄一帧再把这24个色块的实际测量值和标准理论值做最小二乘拟合解出矩阵系数。注意CCM有三个容易踩的坑。第一CCM会放大噪声。矩阵里的非对角项通常是负数相当于在计算某个通道时减去了其他通道的信号而信号减信号会导致信噪比下降。尤其是蓝色通道在低照度下噪声本身大CCM再一放大蓝色噪点会非常明显。这就是很多手机夜间拍照偏色、噪点多的一个工程原因。第二CCM是线性变换但相机响应到人眼感知这个映射并不是严格线性的。厂商一般会把RAW数据先做gamma校正再进行CCM或者分段处理来降低这个误差。第三CCM必须在特定光源下标定才有意义。在D65光源下标定的CCM换到白炽灯A光源下用效果就会明显变差。多光源场景需要针对不同色温分别求矩阵再做插值。3.4 白平衡自适应地重新校准感知即使有了IRCF、彩色滤光片和CCM还差一道工序白平衡。白平衡解决的问题是色偏——不同光源的色温不同白纸在正午阳光下和烛光下反射到眼睛里的光谱成分完全不同但人眼会自动忽略光源影响始终觉得白纸是白的。CMOS传感器没有这个能力所以需要算法来模拟。AWB算法的本质是通过调整RGB三个通道的增益让场景中的中性色白、灰在输出图像中变成等量的RGB。一旦中性色被还原正确其他颜色也会随之准确。但是AWB算法有个经典的灰世界假设——它假设场景中所有颜色的平均值趋向于灰色。这个假设在大多数自然场景成立但遇到大面积单色场景蓝色天空、绿色草地、红色墙壁就会失效。比如拍一个纯黄色的楼道算法会认为整个画面偏黄主动去降低黄色增益结果把白墙都调成蓝色了。做相机调试的人应该都经历过这种聪明的算法反被聪明误的瞬间。从Vλ曲线的角度理解白平衡它本质上是把传感器的整体响应对齐到感知中性点上而感知中性点本身受明暗视觉切换的影响。只可惜大多数AWB算法只考虑色温一个维度没有考虑环境亮度对视见函数的影响这也是低照度下白平衡经常失灵的原因之一。4. 实测中的真实偏差为什么手机拍出来颜色总不对4.1 灵敏度曲线 vs Vλ曲线明暗感知的偏差来源说了这么多理论来点实际的。拿一个典型的CMOS传感器说事。假设它的R/G/B三通道响应峰值分别在610nm、540nm、460nm附近这个分布看起来挺接近人眼的三锥细胞响应。但如果把它三个通道响应相加得到的总亮度响应曲线和Vλ曲线叠在一起看差异会很明显Vλ峰值在555nm且下降得比较陡传感器的总响应往往偏宽、偏低尤其在红光波段会一直延伸到700nm才明显衰减。这意味着什么在红色和蓝紫色物体上传感器感知到的亮度与人眼不一致。最直观的后果是拍深红色花朵时红色花瓣容易过曝或者层次尽失而在拍某些蓝色荧光物体时传感器捕捉到的亮度低于人眼感受画面显得暗沉。我之前调过一款工业相机的成像参数它的传感器近红外响应特别强即使装了IRCF在拍含红色和深色衣物时仍然出现Haze——整个画面蒙上一层灰粉色。排查了半天问题所在就是IRCF截止波长选得太靠后导致700nm以上的漏光过多。后来把截止波前移到650nm同时重新计算CCM画面一下子干净了。这类问题很难从单张照片发现必须用光谱光度计测量传感器的实际光谱响应再和Vλ曲线做对比才能定位偏差源。4.2 低照度下的偏色暗电流与噪声的温度效应低照度拍摄是Vλ匹配问题的高发区而且往往伴随着一个隐蔽的因素温度。CMOS图像传感器的暗电流随温度呈指数级增长。温度每升高大约7℃-10℃暗电流就可能翻倍。暗电流等效于在像素积分时间内积累的假电荷信号它和入射光信号混在一起导致底噪抬高。更麻烦的是暗电流在不同通道的分布并不均匀——蓝色通道通常暗电流更高红色通道次之绿色通道最低。于是低照度长曝光时蓝色通道被暗电流抬高得最明显画面会偏蓝紫色。如果此时CCM的蓝通道增益又比较大蓝紫偏色会被进一步放大暗部的彩色噪点简直没眼看。有一个经验参数值得记住长曝光的蓝色偏离直接和曝光时间与传感器温度挂钩。工业场景里如果需要在低温或高温环境下工作传感器的温度校准不可跳过。很多工业相机有内置的暗电流校准功能开机时自动采集一帧纯黑参考帧用于减除暗电流噪声。这种校准最好在每次开机时重新执行一次因为温度是动态变化的。4.3 自动白平衡的失败案例与多光源场景AWB是颜色还原里最不稳定的环节下面这些场景几乎必然让AWB翻车日落时分的橙色天空大面积橙色被算法判定为偏黄强行向青蓝方向拉结果整个画面变成诡异的冷色调室内混合光源窗口日光6500K和室内白炽灯2700K同时存在AWB只能取一个折中色温导致一部分物体偏暖、一部分偏冷森林里的绿色植被覆盖大面积绿色被灰世界假设按下算法试图往品红方向拽让绿色变灰舞台灯光下的演员饱和的彩色灯光照射下中性色根本不存在AWB的输出全看算法心情。遇到这些场景专业做法是不迷信AWB手动锁定色温或使用灰卡做自定义白平衡。对于做产品的人来说则要看你的目标用户是普通消费者还是专业用户——普通用户需要的是第一眼好看专业用户更需要绝对准确。两者对AWB策略的需求完全相反。4.4 横评实测不同CMOS方案的颜色还原差异说一个我实测过的小实验。用三台设备拍同一个场景一台专业彩色相机、一台工业面阵CMOS相机无IRCF手动装了一片650nm IRCF、一台普通手机。场景是一块标准色卡加一个西红柿、一根香蕉还有一张白纸。结果很有意思。专业相机因为传感器光谱响应设计成熟、CCM和AWB调校完善颜色几乎和肉眼一致工业相机在正确的IRCF和CCM参数下色卡的颜色能达到DeltaE 3以内但西红柿表面的红色略偏橙因为它的R通道响应偏高手机在默认模式下颜色最鲜艳但和真实物体一对比饱和度有明显增强——这是厂商故意为之的记忆色策略用提升饱和度和微调色相来迎合消费者偏好。所以如果你把三台设备放在同一场景下对比会发现没有一台是绝对正确的只有是否适合人眼的区别。这本身就是Vλ匹配的终极目标不是物理上忠实还原光谱而是让观察者主观感知最接近真实场景。5. 模拟人眼的下一个边界宽动态、多光谱与计算成像5.1 HDR与宽动态人眼的动态范围远超单帧CMOS即使CMOS把Vλ匹配做得尽善尽美还有一个维度是单帧图像无法突破的动态范围。人眼对亮暗的适应范围极其惊人可以在同一场景中分辨从暗部阴影到亮部高光的细节等效的动态范围可以到20档以上。而单帧CMOS的典型动态范围在10-12档左右差得不是一星半点。所以手机上的HDR功能本质上是时间上分帧曝光——拍多张不同曝光时长的图像利用数字合成模拟大动态范围。从这个角度说Vλ匹配解决的是光谱维度的感知一致性HDR解决的是强度维度的感知一致性。两者缺一不可。如果把Vλ当成一把直尺HDR就是让这把尺子的量程更大能同时测量暗处和亮处的亮度。5.2 多光谱传感器不满足于三色直接测量光谱三通道CMOS模拟人眼本质上是降维——人眼也是三刺激但CMOS的三通道匹配的是工程化的人眼和生物上的人眼还是有偏差。为了进一步逼近真实感知多光谱传感器出现了它不只有RGB三通道而是把可见光波段分成5个、8个甚至16个窄带通道每条通道只透过很窄的一段波长。多光谱相机拍摄得到的是每个像素的光谱曲线再通过算法合成标准RGB图像。好处是颜色还原极其准确甚至能还原出物体在不同光源下的真实颜色变化同色异谱问题坏处是分辨率下降、帧率降低、体积和价格飙升。目前多光谱传感器在农业检测作物营养状况、医疗皮肤病变诊断、艺术品保护分析颜料成分等领域落地较多消费电子还没有普及。说到同色异谱值得展开一下。这是颜色科学里一个很奇妙的现象两个物体在某个光源下看起来颜色一样一旦换一个光源颜色就不一样了。原因在于它们是反射光谱不同但三刺激值恰好相同的同色异谱对。人眼在特定光源下无法区分它们但多光谱传感器可以。这也是为什么纺织、印刷、油漆行业特别需要多光谱方案——因为客户要求的是在任何光源下都一致而不是只在某个灯箱里一致。5.3 计算光学用算法弥补物理传感器的不足最后说一个大趋势与其把希望全押在物理传感器上不如让算法来兜底。现在的手机影像系统已经把HDR合成、AWB、CCM、降噪、超分、自动曝光全部串在一条计算链路里。所谓计算光学是把光学系统的点扩散函数、传感器的响应矩阵、场景的光照条件放在一起建模再用算法同时求解最优的颜色和清晰度。比如有些手机利用微透镜和像素间的特殊排列让一个传感器同时收集亮部信息和暗部信息再通过算法合成扩展动态范围的图像也有些厂商在传感器前面加一层特殊的衍射光学元件让成像的模糊模式包含了深度信息算法可以从模糊中解算出景深。这些都不是脆弱的单点技术而是把传感器响应和计算输出看成一个整体来设计。从Vλ曲线的视角看计算光学的终极目标是在数学空间里做一次感知拟合——不追求传感器光谱响应物理上和人眼一致而是通过多帧、多曝光、多通道的信息融合在最终输出的图像里还原出人眼期望看到的亮度、颜色和层次。物理层的匹配做得再好也受限于工艺边界但计算层几乎没有上限。将来如果量子点滤光片通过量子点的尺寸控制吸收峰值可以做到极其窄带的光谱响应技术成熟或者有机光电探测器OPD能够直接堆叠在CMOS像素上实现像素级光谱分光那么传感器本身就能更接近人眼的响应形态。到那时Vλ匹配这个概念仍然有效只是实现手段从硬件筛选变成了硬件算法协同。5.4 一个容易被忽略的细节qa测试中的Vλ一致性最后聊一个我个人的实际体会。在做相机类产品的量产测试时很多团队会忽略Vλ一致性这个指标。大家更关心像素坏点、污点却很少对每台相机做光谱响应的一致性校验。结果是同一型号的相机有的拍出来颜色偏冷有的偏暖用户一对比就发现了。靠谱的做法是在产线上安排一个色温固定的光源比如D65标准光源箱用同一张标准色卡拍摄基准图提取白块的RGB比值来判断每台相机的增益差异。若白块R/G比值超过设定阈值通常可以设在±3%以内就说明这台相机的光谱匹配或增益校准有偏差需要进行补偿或重新标定。再强调一次这条靠Vλ曲线牵起来的工程链路从光度学定义、传感器芯片设计到滤光片选型、成像算法调优最终都指向同一个目标——让人眼舒服。理解了这一点你就不会再把相机颜色问题简单归结为白平衡没调好。下次遇到颜色不对的项目记得问问自己到底是白平衡的问题还是传感器根本就没匹配上Vλ
返回列表