赞
踩
关于白平衡的原理和相关基础知识可参考本专栏的主题文章
人眼中存在一种感应亮度的杆细胞(rod)和三种感应颜色的视锥体细胞(cone)。视锥体细集中分布在视网膜(retina)上的中央窝(fovea centralis)区域。根据Wandell等人于1995发表的研究成果,视网膜上0.3mm的长度能够感应1°视场角,而中央窝能够感应10°视场角,因此直径约为3mm。中央窝之外全部是杆细胞,总数约有1200万。锥细胞和杆细胞的分部密度如下图所示。
三种视锥体细胞用L,M,S(或R,G,B)符号加以区分,总数大约有600万~700万,根据实验结果分析,L占64%,M占32%,S占2%。
这三种视锥细胞分别感应不同波长范围(频段)的光刺激,响应灵敏度也不同。从下图可以看到,感应蓝光的视锥细胞灵敏度最低(细胞数量最少)。
如果只需要考虑响应的波段问题,而不需要研究灵敏度差异,则经常使用用归一化响应。
人类视觉系统(Human Visual System, HVS)能够在各种不同的光照条件下识别物体的颜色,这种自动排除光源影响的能力称为颜色恒常(color constancy)。人们早在一百年前就已经对颜色恒常进行了广泛的研究,建立了相应的理论和数学模型,相关学术领域称为计算颜色恒常(computational color constancy),已经在图像增强、提升图像质量方面取得了重要的成果。
根据德国生理学家Johannes von Kries 于1902年提出的猜想(所谓猜想就是既未得到严格证明也未找到任何反例的理论),颜色恒常现象总结下来有几个要点
为了更加准确地描述人眼视锥体的刺激响应,CIE 在大量实验研究的基础上制定了CIE-1931 XYZ 颜色空间模型,该模型以数据表格的形式定义了”标准观察者“响应曲线。因此,涉及色适应的运算一般都在XYZ空间内完成,否则结果的准确性会差一些。至于为什么叫XYZ而不叫RGB,笔者谨慎猜测是第一次制定的标准确实已经命名为RGB模型但是搞砸了,白白浪费了这么宝贵的名字。这种乌龙CIE历史上貌似搞了好几次,简直是conventionally太不严肃了。
一个完整的图像系统通常包含拍摄、处理、渲染三个环节。包括白平衡在内的很多处理环节可以合并到拍摄阶段,即camera输出的图像已经完成了必要的处理,这也是当前主流的做法。但这并不是唯一的选择,另一种做法是在拍摄阶段只输出未经处理RAW格式图像,而白平衡、gamma等主要处理事项都留给后续的处理环节,这种做法可以保持原始图像质量不受损失,给后期图像编辑提供了充分的灵活性,所以在摄影、影视行业变得越来越流行。
不论是哪种情况,白平衡的处理都要考充分虑渲染环节的特性。当人类观察显示器上渲染的图像时,所处的观察环境与最初拍摄场景的光照条件已经大不相同,就像天下没有两片一模一样的树叶一样,光照的差异决定了渲染图像不可能无失真地复现拍摄现场能够激发的知觉。一个好的白平衡算法需要充分考虑到环境光的差异,使渲染图像激发的知觉与人类印象中的知觉尽可能相似。
人类视觉对颜色的分辨能力是存在一定的精度限制的,当两个颜色在色度图(chromaticity diagram)上的距离小于颜色宽容量时,人类将无法区分这两个颜色的差异。人类对低色温的颜色表现出更小的颜色宽容量,对高色温的颜色宽容量更大,这个现象对白平衡的精度做出了一定的约束。在1931年时人们对颜色宽容量的研究才刚刚开始,所以在CIE-1931 xy色度图上各处的颜色宽容量是不均匀的,这个问题一直到CIE-1976 UCS 颜色空间的推出才正式解决。
在研究白平衡问题时,有时会把颜色变换到HCL空间,其中H代表色调Hue,C代表色温,L代表亮度Luma。在CIE-1931 xyY 色度图上,中间向下凹的曲线叫普朗克曲线,描述黑体作为光源在各种温度(0, +∞)下呈现的颜色,色温表征光源的冷暖倾向(偏蓝或偏红)。在现实生活中很多人造光源的光谱与黑体光谱差异很大,光源颜色常落在普朗克曲线之外。色度图上与普朗克曲线相交的直线称为相关色温线(CCT),用于定义非黑体光源的等效色温,同时也表征光源的色调倾向(偏绿或偏紫)。
Camera(包含相机、摄像机两类产品)在拍摄时,如果没有自动白平衡算法的干预,物体的图像在光源的影响下会呈现偏色(color cast)。
白平衡的作用就是模拟人类的色彩恒常能力,在图像中去除光源引起的偏色,当图像在显示器上渲染时,使物体呈现其应有的颜色。确切地说,不论拍摄时场景色温是多少,白平衡算法都会把图像的色温变换到显示器的标准色温。目前主流的显示器都是支持sRGB标准的,该标准定义的白点是D65,所以白平衡的目标是将物理世界中的白色映射为D65光源下的白色。这个过程也就是模拟人眼的色适应过程。
除了D65之外,D50, D55, D75, D93等也是常用的标准色温。
从XYZ值推算相关色温的方法
当两个颜色的CIE 三刺激值(XYZ)相同时,人的视锥细胞接受到的刺激强度是相同的,那么这两个颜色的感知一定相同吗?答案是否定的。根据实验结果,只有在周围环境、背景、样本尺寸、样本形状、样本表面特性和照明条件等情况都相同的观察条件下,视觉感知才会是一样的。一旦将两个相同的颜色置于不同的观察条件下,虽然三刺激值仍然相同,但人的视觉感知会产生变化,这就是所谓的色貌现象。有两种典型色貌现象与颜色有关,
亨特效应(Hunt effect):物体的色貌随着整体的亮度变化发生明显的改变。即色度随着亮度的变化而变化。
Hunt 发现,光源亮度愈高色彩的色相也会相对提高。例如物体的色貌在夏天的下午显得更加鲜艳和明亮,而在傍晚则显得柔和。在更亮的光源条件下,物体色看起来更加鲜艳,明暗对比更加强烈。视彩度随着亮度的增加而增加。在更亮的光源条件下,物体色看起来更加鲜艳,明暗对比更加强烈。
如下图所示,点(0.35,0.33)在10000cd/m2的条件下,与在10cd/m2的条件下的点(0.55,0.33)相匹配,这说明随着暗适应程度的增加,人眼对色彩的分辨能力在下降。因此在评价色貌时,必须把绝对亮度考虑在内。
斯蒂文斯效应(Stevens effect):视明度对比(Brightness contrast)或明度对比(Lightness contrast)随亮度的提高而提高。当明度增加时,色彩的对比也会随之提升,与Hunt 效应的结论是相似的。
CIE色度图包含了人类能够知觉的全部颜色,实际上绝大多数人造设备只能支持全部颜色中的一个子集,并且不同的用途所支持的集合也不相同,这里边既有需求的因素,也有源于技术和工艺的限制。
在色度图上选定一组参考三基色点(reference R,G,B primaries)即可确定一个颜色子集,称为色域(color gamut)。常用的色域有AdobeRGB,DCI-P3, Rec.709 /sRGB,CMYK, Rec.2020等。
ITU-R Rec.2020 (或BT.2020)是国际电信联盟无线电通信部门制定的超高清电视(UHDTV)色彩标准,面向4K和8K数字视频格式。Rec.2020 支持10/12/16位精度颜色分辨率。当精度为10位时,可以显示1024x1024x1024(约10.7亿)种颜色,是当前主流标准Rec.709(与sRGB相同)的64倍。
DCI-P3 是美国电影业数字电影投影最常用的色域标准,比sRGB色域大25%,能够显示更多的颜色。苹果公司的部分产品支持DCI-P3格式。
色域还可以在CIE-1976 UCS 空间中表示,这个空间使用u'v'坐标系,最重要的特点是颜色点之间的距离与人类知觉中的颜色差异符合线性关系。
色域中包含了无穷多个颜色点,而实际的设备只能支持有限个颜色,因此需要一种方法从色域中筛选出设备能够实际支持的点。这个方法就是首先定义一个白点,即数值上R=G=B的点,确定白点在色度图上的具体位置。然后从白点和已知点出发,迭代地采用混色法找到新的点,直到所有可能的R,G,B值都对应一个确定的xy值,于是就得到了一个物理设备可以表示的颜色集合。最常用的RGB模型用24个比特表示一个颜色,一共有256x256x256(约1680万)个颜色。
如果选定白点的位置不同,则生成的颜色集合也不相同。所以一个物理设备所支持的色域由三个色点和一个白点唯一地确定。
ITU-R Rec.709 与 Rec.2020 使用D65作为白点,在计算机包括互联网行业应用最广的sRGB 标准沿用了Rec.709 的定义。DCI-P3 推荐D65和D63两种白点。
符合sRGB标准的显示器应具备如下特性:
从D65 xyz值可以看出,D65 是一种偏蓝色的白光,这与D65光源的光谱特征是一致的。下图是CIE定义的D65标准光谱,可以看到确实蓝光的强度更大些。
sRGB 对标准观察环境做出了如下规定:
下图中黑色框所示的是DELL显示器支持的色域,红点框是sRGB色域,可以看到两者是高度匹配的。
对于需要在sRGB标准显示器上显示的图像,白平衡算法需要将拍摄场景色温下的白色映射为D65色温下的白色。这就相当于实现了人类视觉的颜色恒常特性。白平衡的第一步也是最重要的一步是对拍摄场景进行光源颜色估计(light source color estimation),估计的结果可以用于下一步的色适应(chromatic adaptation)。色适应的作用是去除图像的偏色(color cast),使原始场景中的白色物体在D65色温下仍然是白色。
基于以上理论,白平衡的基本功能可以用以下公式来定义
其中,
D矩阵需要依据场景光源和目标光源的色温确定,其中目标光源色温通常固定是D65,而场景色温需要通过某种技术从输入图像中估计得到。当两个色温都确定后,D矩阵可以用两个白场响应之比表示
其中,
下标wd表示目标光源(dest)即显示器(display)的白场响应,
下标ws表示输入光源(source)即场景(scene)的白场响应,
各种光源下的白场响应可用白平衡卡在实验室环境下标定得到。
实践中常用以下几种空间做为色适应矩阵M的工作空间
该矩阵的作用是将RGB值从SensorRGB空间变换到人眼的XYZ空间,这个过程可以理解为sensor颜色校正的一部分,矩阵系数需要根据sensor特性进行标定。
在以上空间中,sensor RGB 空间是最简单的一种选择,该方案直接使用sensor的频率响应模拟人眼的响应,Fin, M, Fout 都简化单位矩阵,因此白平衡算法退化为
这个方案虽然精度不高,但是实现成本最低,所以被工业和消费级camera广为采用。由于D是对角阵,所以白平衡运算就是对sensor 的三个颜色通道分别乘以一个增益系数,这三个增益系数即定义为白平衡增益。对图像施加了白平衡增益后图像即获得了正常的白平衡。有些sensor 会提供专用的增益寄存器分别控制各个通道的增益,而几乎所有的ISP处理器都提供同样功能的增益寄存器。
在研究白平衡增益时,为了简化分析和计算,常用G通道的增益对三个系数进行归一化处理,
于是默认G通道增益总是1.0,而R,B通道的增益简写为R/G和B/G。
P.S. 基于Bayer CFA原理的sensor 实际上有四个独立的颜色通道(R,Gr,Gb,B),但通常取Gain_Gr=Gain_Gb 即可。尽管由于种种原因Gr/Gb通道实际上并不完全一致,但解决这种不一致的任务往往落在专用的绿平衡(Green Equalization, GE)模块上。
CAT 矩阵
常见的反射类型分为:朗伯反射、理想镜面反射、朗伯与镜面结合反射。
朗伯反射(Lambertian)也称理想散射或散光反射。
朗伯表面是指在一个固定的照明分布下从所有的视场方向上观测都具有相同亮度的表面。朗伯表面不吸收任何入射光。不管照明分布如何,朗伯表面在所有的表面方向上接收并发散所有的入射照明,结果是每一个方向上都能看到相同数量的能量。
令e (λ) 描述光源的光谱分布,c 描述颜色通道,
r (x,λ) 描述一个朗伯表面的反射率,它是像素坐标x和波长λ的函数,
s (λ) 为像素的感光度(sensitivity),它是颜色通道c和波长λ的函数。
于是图像 ρ(x) 可以表示成光源、反射率、像素感光度的解析形式
假设光源均匀,且只考虑朗伯表面,则可取令r (x,λ) =1。于是任意像素上感知的光源颜色可以表示为
一般来说,s(λ) 可以从传感器厂家提供的资料中获取。但是e(λ) 通常是不易获得的,除非是借助专用的光谱仪。因此多数情况下求解ρ 是一个不适定问题(ill-posed problem),需要做出额外的假设才能求解。
上文重点讨论了白平衡的色适应变换原理,当采用sensor RGB空间时,唯一不确定的就是场景光源的颜色估计,也就是对场景光源色温的估计。因此人们在讨论白平衡算法时,其实主要讨论的就是场景色温的估计方法。目前大致可以把已知的算法归结为三大类,即
基于像素统计的算法
该模型基于灰度世界假设,该假设认为:对于一幅有着大量色彩变化的图像,R,G, B三个分量的统计平均值趋于同一灰度值。 从物理意义上讲,灰度世界模型假设自然界景物对于光线的反射系数的均值在总体上是个定值,这个定值近似地为“灰色”。 依据灰度世界模型实现的白平衡算法认为图像中R,G,B分量的平均值如果偏离1:1:1则一定是因为环境光线变化引起的,算法会据此对R,G,B增益进行反馈调节以补偿环境光的变化,使三个分量的平均值重新回到1:1:1。
在实际应用中这个模型的基本假设经常是不成立的,所以实用的灰度世界模型都会对基本假设做出各种修正以适应假设失效的场景。一种修正的方法是限定RGB分量的取值范围,抛弃偏离灰色太远的像素。
举例来说,像素值(R,G,B)只有满足以下条件才能参与白平衡估计:
其中a, b, c 为参数,可以根据标定得到。使用a,b,c可以围成下图所示的画线区域。
还有一种方法是抛弃静态的背景像素,只统计动态的前景像素。这个方法可以过滤大范围单色背景对算法的干扰,但是对于面积较大的单色运动物体则无能为力。
下面的文章对各种GW模型的衍生算法做了综述,具有一定的参考价值。
该模型假设正常的画面中总会存在一些白色(灰色)区域,这些区域在不同光照条件下会表现出不同的(R/G,B/G)比值。在实验室环境下可以事先标定出参考白色在不同色温下的(R/G,B/G)比值,实际工作时,ISP硬件可以将符合白色比值关系的像素区域筛选出来生成统计信息,得到所有白色的平均比值,自动白平衡算法根据硬件报告的平均比值反推当前环境的色温,并根据预测的环境色温选择合适的RGB增益和其它色彩控制参数。
在实际应用中,白点统计模型偶尔也会遇到基本假设不成立的情况,主要存在于画面亮度很低,或者一些比较特殊的场景。
在白点统计模型中,如何定义白色区域是一个主要课题,围绕这个课题衍生了多种方法。一种简单的判据是在YUV空间为颜色设置经验阈值,通过阈值过滤掉偏离灰色较远的像素,如下所示。
有人提出了一组模糊规则(Fuzzy Rules Model,FRM)用于更好地筛选白点,基本思想是,
其它一些算法基于不同的原理实现白平衡,如
WP算法的基本形式存误差较大的缺点,因为传感器的坏像素、噪声、动态范围等因素都会对算法形成干扰,因此有实用价值的WP算法往往是基于原始算法的改进版本,如
Finlayson 等人发现,灰度世界模型的数学本质是取所有像素的1-范数,而WP模型本质是取所有像素的∞-范数。如果推广起来其实可以一般地考察像素的p-范数,从而找到最合适的模型,这就是SoG算法的基本思想。
全称Grey Edge model,假设图像中的高频成分(梯度较大的地方)在统计上是符合灰度世界假设的。GE 算法也采用了p-范数思想。
Gijsenij 等人在GE 算法的基础上增加了权重,称为WGE 算法(Weighted Grey Edge)。
基于特征学习的算法
对图像所携带的信息进行统计分析,从而学习到一些关键特征,可以更加准确地评估光源特性。主要的算法有,
该算法认为,在一种光源下能够观察到的颜色(observable colors)是有限的,这些可观察的颜色即构成该光源的色域(gamut),而不同的光源色域是不同的。标准光源(如D65)的色域定义为标准色域(canonical gamut),当图像中观察到非标准色域的颜色时,那一定是源于非标准光源,从色域的偏离程度可以反推光源的信息。
该算法使用PCA (Principle Component Analysis 主成分分析)方法分析图像的颜色分布(color distribution),使用亮像素和暗像素估计光源。
基于神经网络的算法
不论是灰度世界还是白点统计,都存在一些容易失效的特殊场景。如下图所示的场景,既存在大面积单色问题,也存在白点不足的问题,这对白平衡算法提出了很大的挑战。
基于神经网络(Neural Network)原理的机器学习、深度学习(Machine Learning / Deep Learning)算法可以在一定程度上实现对图像内容的理解。在上图的例子中,使用机器学习算法可以检测出草地和树木的存在,并给出具体的位置和面积,从而帮助白平衡算法对环境光源进行估计。
Funt 等人使用神经网络的方法对光源进行估计。
Agarwal 等人使用了核回归(kernel regression)方法对光源进行估计。
ResNet
ResNet 又名残差网络,是何凯明博士于2015年提出的一种网络结构,当年就获得了ILSVRC-2015分类任务的第一名,同时在ImageNet detection,ImageNet localization,COCO detection和COCO segmentation等任务中均获得了第一名,引起了社会各届的极大关注。
ResNet在传统卷积神经网络中加入残差学习(residual learning)的思想,解决了深层网络中梯度弥散和精度下降的问题,使网络能够越来越深。目前ResNet 经常被当作一种独立模块用于构建更大型的网络模型,在各种白平衡网络中也常见它的身影。
YOLO
YOLO 源于英文"You Only Look Once",是一种较为流行的检测网络,比较适合移动端设备,较新的YOLOv3版本加强了对小目标的检测性能。下图是使用YOLO检测人和车的例子。
MTCNN
MTCNN是深圳先进技术研究院于2016年提出的一种人脸检测算法,已经在各类产品中得到了广泛的应用。
RCNN
Fast-RCNN 是一种精度较高的目标检测网络,在工业检测领域颇受欢迎。目前正在高速发展中的智能售货柜产品较多采用Fast-RCNN系列算法。
有了神经网络算法的加持,白平衡算法可以更加准确地判断当前场景的类型和重点目标的具体位置,因此算法的权重可以针对场景进行相当精确的适配。举例来说,如果画面中检测到人脸、人手等目标,白平衡算法可以给肤色以合适的权重。如果算法检测到目标在移动,还可以随动调整焦距使目标始终保持清晰。随着神经网络能够检测的目标种类越来越多,白平衡的效果死角也越来越少,目前神经网络辅助白平衡的技术已经在手机摄像头领域得到了初步的应用,成为一项重要的卖点。
P.S. 有知友分析了疑似MTK工程师提出的算法,可供参考。
自动白平衡调整的关键环节,首先是要及时检测出环境光色温的变化,其次是要对环境色温变化及时做出响应。针对这一过程可以有不同的实现方法,而评价一个白平衡算法的性能通常有以下几个维度
白平衡算法的难点通常在于一些特殊场景下的表现,下面简单列举一些典型的特殊场景
下图是一个典型camera的原理框图,从中可以看到,光子流(photon flux)在变成电信号之前会经历镜头、微透镜、CFA阵列、像素阵列等光学结构。在很多实际的camera产品中还存在红外截止滤光片、抗混叠滤光片等额外的光学结构。这些光学结构都会改变光信号的频谱分布,从而影响图像的白平衡。
我们把包含镜头、滤光片、像素阵列等在内的所有光学结构当作一个整体设备考虑,这个设备所支持的颜色空间称为sensor RGB 空间。对于特定的光信号输入,设备的输出信号取决于RGB三通道的频率响应,不同的sensor频率响应一般是不同的。
为了将拍摄场景中的白色物体在显示时正确还原为白色,首先需要知道真实的白色物体在sensor RGB 空间中呈现什么颜色。解决这个问题的一种方法是对光路中所有光学元件进行数学建模,通过解析的方式寻求答案,但是因为各种光学原件的详细参数往往很难获取,所以现实中很少使用这种方法。另一种方法是通过实验标定标准白色在一些典型色温下呈现的sensor RGB 颜色,然后通过几个标定的色温点可以外推白色在所有可能色温下呈现的颜色,从而建立场景色温与sensor RGB 白色的对应关系,这个对应关系通常用白平衡增益来描述。
通过实验我们观察到,A光源下拍摄的白色偏黄,用ImageJ分析其像素颜色,发现其具有较大的R/G值,如下图所示。
这显然是因为A光源的光谱中具有大量的红色成分,而蓝色的成分极少。
而D65光源下拍摄的白色则具有较大的B/G值,如下图所示。
同理,这是因为D65光源中含有大量的蓝色成分。
白平衡增益通常记为(R/G, B/G),即红色和蓝色相对于绿色的比例。我们注意到目前对白平衡增益存在两种不同的定义,一部分厂家将(R/G, B/G)定义为sensor捕捉到的图像中红色和蓝色的统计值,因此在高色温(如D65)下B/G大于R/G。而另一部分厂家则将(R/G, B/G)定义成为了使sensor捕捉的图像达到白平衡需要施加的增益系数,因此在高色温下B/G小于R/G。
看起来海思就是采用了第一种定义。在这种定义下,光源的色温曲线(普朗克曲线)表现为下图所示的形状。
看起来全志也是采用了第一种定义。在这种定义下,D65光源下的白色具有较大的B/G统计值。
而瑞芯微似乎是采用了第二种定义。在这种定义下,D65光源下的白色需要较大的R/G增益才能达到白平衡。
本文将采取第二种定义,即R/G,B/G代表增益系数而非图像的统计值。在此定义下,白平衡标定的大致过程是
俗话讲画鬼容易画人难,这是因为人们在观察不太熟悉的东西时不容易察觉出异常。而人们对常见的事物如蓝天、绿地、肤色等会具有特别深刻的记忆,很容易察觉出任何偏离,所以一个好的白平衡算法需要能够检测出画面中存在的特殊场景并加以针对性的强化。
一种基本的场景检测方式是点云分析。思路是根据事先标定的结果在白平衡增益图上划出几个特定的区域,当图像中出现一定数量的像素紧密聚集在某一区域时,即认为图像中存在相应的特殊场景。
点云分析是一种非常有效的提取图像特征的方法,但由于需要分析每一个像素的白平衡增益,所以计算量非常大。如果用来处理实时视频流,则一定需要ISP硬件实现对像素的统计。一种较典型的做法是,将图像分成MxN个zone,也可称为窗口,ISP针对每个zone报告像素统计值,包括R/G, B/G,白点数量,亮度直方图等,这些信息可以用于判断场景类型。
白平衡的控制过程通常可以分解为检测、响应、调整、收敛、稳定等几个阶段,如下图所示。
理想的白平衡控制时序如下图所示,其基本流程是
但是实际上由于两帧的时间间隔往往很小,不容易保证算法完成一系列的计算和配置,因此实际的白平衡控制往往采用隔帧生效的时序,其基本流程如下图所示
u16ZoneSel
=0 或 255)报告白点均值(RGB)和总数
最大 32x32 zone
方案A enAlgType
=AWB_ALG_LOWCOST
方案B enAlgType
=AWB_ALG_ADVANCE
可以配置直方图 bin threshold (6个控制点,4个有效bin) 和 bin 权重
可选自动或手动模式 (firmware feature),自动权重采用高斯分布
摄像机、单反、数码相机等设备都会提供一些预设的白平衡模式供用户选用,如下图所示。
当拍摄场景的照明条件基本固定时,可以直接选择一个合适的场景就能够得到不错的白平衡效果。
当拍摄场景的照明条件动态变化时,就需要使用软件算法对白平衡参数进行实时计算和调整。在摄像机、单反的菜单上自动白平衡的符号是
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。