022、自动白平衡AWB:统计法、色温曲线与AI方法在复杂光源下的鲁棒性 📅 2026/7/13 16:35:53 022、自动白平衡AWB统计法、色温曲线与AI方法在复杂光源下的鲁棒性上周在调试一款车载环视模组时客户反馈了一个让人头疼的问题车辆在傍晚经过隧道出口时画面突然从偏蓝变成偏黄持续了将近两秒才恢复。这不是个例同一批模组在商场地下停车场、黄昏的立交桥下都出现了类似的白平衡跳变。我盯着日志里的R/G、B/G统计值看了三个小时发现AWB在混合光源场景下就像个没头苍蝇——既想追D65又想追A光源最后两头不讨好。统计法的老本行与软肋传统统计法AWB的核心假设很简单场景中所有颜色的平均值应该是灰色。这个假设在自然光均匀的场景下很管用但一旦遇到大面积单色物体比如红色卡车、绿色草坪或者混合光源LED日光荧光灯统计法就开始露怯。我见过最典型的翻车案例某款安防IPC在监控一片向日葵花田时画面被硬生生拉成了灰黄色——因为黄色像素太多统计法以为光源偏黄拼命往蓝色方向补偿。代码里常见的做法是// 计算R/G和B/G的平均值floatavg_rgsum_rg/valid_pixels;// 注意这里valid_pixels要排除过曝和欠曝区域floatavg_bgsum_bg/valid_pixels;// 查表得到色温awb_gainlookup_gain(avg_rg,avg_bg);这个逻辑在实验室里跑得挺好一到真实场景就崩。问题出在“valid_pixels”的筛选上——你以为排除了过曝和欠曝区域就万事大吉但大面积的单色物体比如蓝天、绿草地的色度值恰好落在有效范围内统计结果就被带偏了。色温曲线的工程化陷阱色温曲线Planckian Locus是AWB的另一个经典工具。把不同色温下的黑体辐射色度坐标画出来形成一条曲线然后根据统计到的色度点找到曲线上最近的点就能估计色温。但这里有个坑真实光源尤其是LED的色度点往往偏离黑体辐射曲线。比如常见的冷白LED色度坐标在曲线下方如果强行投影到曲线上估计出的色温可能差2000K。我在调试一款手机前置摄像头时遇到过室内LED灯光下自拍肤色被拉成了惨白色因为AWB把LED的偏绿成分当成了环境光的一部分补偿过度。工程上常用的补救措施是扩展色温曲线为色温区域CCT region允许一定范围的偏移量。但区域边界怎么划划大了容易混入干扰色划小了又覆盖不了真实光源。我见过一个方案是把色温曲线分成三段低色温段2000K-4000K用宽区域中色温段4000K-6000K用窄区域高色温段6000K-8000K再放宽。理由是低色温场景通常包含暖色物体统计方差大中色温场景多为自然光统计方差小。这个经验值在手机场景下管用但换到车载场景就失效了——车灯、路牌、交通信号灯的颜色分布完全不一样。AI方法从暴力拟合到场景理解AI方法这两年很火但真正落地到AWB的并不多。我见过几种尝试第一种是直接用CNN回归色温值。输入是RAW图或者统计直方图输出是色温估计。这种方法在公开数据集上能跑到95%以上的准确率但一上真实硬件就露馅——训练集里没有覆盖混合光源、闪烁光源、以及各种奇葩的LED光谱。我有个同事在安防项目里试过模型在室内场景下表现惊艳但到了室外黄昏时分输出色温在4000K到6000K之间来回跳比统计法还差。第二种是场景分类统计法组合。先用轻量级分类器判断场景类型室内、室外、夜景、逆光等然后根据场景类型选择不同的AWB策略。这个思路比较务实但分类器的准确率是关键。我踩过的一个坑分类器把“黄昏的室内”误判为“夜景”导致AWB用了低色温策略画面偏红。后来在分类器里加了一个“混合光源”类别专门处理同时包含日光和人工光源的场景效果好了不少。第三种是端到端的颜色恒常性网络。输入RAW图输出白平衡增益不显式估计色温。这种方法的好处是绕开了色温估计这个中间步骤直接优化最终效果。但问题是可解释性差——调试时遇到问题你很难说清楚是网络哪一层出了问题。我在一个车载项目里试过模型在晴天、阴天、隧道场景下表现稳定但遇到雨夜车灯路灯的混合场景时输出增益突然变得很大画面出现了明显的色偏。查了三天发现是训练数据里雨夜场景太少模型没有学到这个分布。混合光源下的鲁棒性实战回到开头那个隧道出口的问题。我最终采用的方案是“统计法色温曲线场景分类”的三层架构第一层快速统计。用硬件统计模块通常集成在ISP里计算R/G、B/G的直方图排除过曝和欠曝区域阈值设为10%和98%分位点。这一步要快不能拖慢帧率。第二层色温曲线匹配。把统计到的色度点投影到色温曲线上得到初步的色温估计。同时计算投影距离——如果距离过大超过0.02说明当前场景可能包含混合光源或非黑体辐射光源需要进入第三层。第三层场景分类增益融合。用轻量级分类器MobileNetV2剪枝版参数量控制在50K以内判断场景类型。如果是“混合光源”场景把统计法得到的增益和色温曲线法得到的增益按比例融合。融合比例根据投影距离动态调整投影距离越大统计法的权重越低色温曲线法的权重越高。这个方案在隧道出口场景下把白平衡恢复时间从2秒降到了0.3秒。代价是计算量增加了约15%但好在第三层只在投影距离超标时才触发大部分场景下只跑前两层。个人经验性建议别迷信单一方法。统计法、色温曲线、AI方法各有适用场景。统计法在均匀光源下最稳色温曲线在自然光下最准AI方法在复杂场景下潜力最大。工程上要做的是组合而不是替换。调试AWB时先看统计直方图。很多问题看一眼R/G、B/G的分布就能定位。比如大面积单色物体导致的统计偏移直方图上会有一个明显的峰值。这时候加一个“色度方差”的判断条件方差过小就降低统计法的权重。色温曲线要针对具体光源做校准。实验室里的标准光源D65、A、TL84和真实光源LED、节能灯、混合光差别很大。我习惯在产线调试阶段用光谱仪实测几组典型光源的色度坐标然后手动修正色温曲线。这个工作很枯燥但效果立竿见影。AI模型的训练数据要包含“坏样本”。不要只收集完美场景的数据要刻意收集那些统计法会翻车的场景大面积单色、混合光源、闪烁光源。这些坏样本能让模型学到统计法的盲区。最后一条也是最容易被忽视的AWB的收敛速度要匹配场景变化速度。场景变化快比如车辆进出隧道时AWB要快速响应场景变化慢比如室内固定监控时AWB要平滑过渡。这个速度参数需要根据具体应用场景调优没有通用值。写这篇笔记时我手头正在调试一个车载环视的AWB问题场景是夜间停车场车灯路灯。统计法在车灯区域过曝色温曲线在LED路灯下偏移AI模型在混合光源下抖动。看来AWB这个老问题在复杂光源下永远有新坑要填。