首页 / 资讯中心 / 文章详情

高通平台AWB跳变调试实战:夕阳场景根因分析与参数调优

高通平台AWB跳变调试实战:夕阳场景根因分析与参数调优 ★ FEATURED ARTICLE
做Camera效果调试这些年AWB跳变是我最怕遇到的bug之一。白天一切正常的画面一到夕阳时分就开始“抽风”明明是暖橙色的夕阳屏幕上天空会突然在蓝色和橙色之间来回晃或者整个画面颜色毫无预兆地从暖变冷再从冷变暖。这种问题看着不复杂真要修起来经常要折腾几个版本。今天把我在高通平台处理AWB跳变问题的完整思路和避坑经验写下来希望能帮你少走点弯路。这篇文章既适合刚入门的3A调试工程师也适合想搞清楚AWB参数怎么调的同学。重点会放在夕阳场景的根因分析、高通平台上的定位方法以及一套可以落地的参数调优流程。1. 初识AWB跳变一个让调试工程师头疼的场景1.1 看似简单的“偏色”背后是复杂的统计逻辑很多人一听到AWB跳变第一反应是“算法有bug”。但在大部分场景下算法本身并没有bug而是它接收到的统计数据自相矛盾。AWB自动白平衡的原理说起来很简单把画面中所有颜色的平均值当成灰色然后根据这个“灰色”去反推光源颜色最后给RGB通道补上对应的增益让白色在不同色温的光源下看起来依然是白色。这套假设在正常场景下很有效可一旦画面里出现大面积纯色假设就失效了。举一个夕阳场景的例子天空被染成大面积橙红色如果AWB按照灰世界去算它会把大量橙色当成“光源偏暖”于是给画面补大量蓝色结果原本应该偏暖的氛围被强行拉淡。可过了一帧镜头稍微动了一下画面里暗部或地面阴影的比例变了统计到的那点“灰色信息”又变了AWB又会觉得“光源其实没那么暖”再把增益拉回去。这种反复就是跳变。说白了AWB就是在几个可能的光源猜测之间来回横跳而每次猜测的置信度都很低。这里要敲个黑板AWB跳变不等于偏色不准。偏色不准是算法稳定地输出一个错误结果跳变是算法在帧与帧之间输出一个不连续的结果视觉上表现为颜色的“闪烁”“阶跃”或“呼吸”。两者定位方法完全不同后面会细说。1.2 高通平台AWB链路粗解从统计数据到增益输出在高通平台上光线从sensor出来进入ISP经过坏点矫正、黑电平扣除、去马赛克等模块同时ISP会生成一组统计量给3A算法使用。AWB统计量通常是画面被划分成若干个小网格每个网格内有R/G/B的平均值有些平台还会给出色彩分布或置信度相关的信息。AWB算法拿到这些统计量以后配合内部标定的色温曲线估算当前光源色温再计算R、G、B三个通道的增益最后把增益写到ISP的增益模块作用到图像上。高通目前的CamX/Chi架构里AWB引擎是模块化的各家方案商会在上面做二次开发。我们在调试时很少去改算法流程本身更多是调整影响算法判断的参数比如色温上下限、统计窗口、ROI权重、收敛速度、时域平滑系数等。这些参数最终会固化在tuning文件里同一套算法参数配得对不对效果天差地别。另外高通平台经常有多个sensor广角、超广角、长焦每个sensor都有自己的AWB校准和tuning参数。跳变问题不一定只在单个sensor内部出现多摄切换瞬间同样可能引起白平衡跳变这点后面单独讲。2. 夕阳场景为何成为AWB跳变的“重灾区”2.1 色温跨度大、信噪比低算法很容易“反复横跳”正午自然光的色温通常在5000K到6500K之间AWB算法在这个区间内比较“安心”。夕阳时太阳接近地平线色温可能一路降到2000K到3500K有些极端天气下会更低。AWB内部一般会维护一条从低色温到高色温的响应曲线曲线在不同色温区间里分成若干段。正常情况下算法估计出的色温是连续变化的但如果两个色温段的响应非常接近统计里的噪声稍微一扰动算法就可能从这一段跳到另一段。更麻烦的是低照度。夕阳虽然肉眼看起来“暖得很美”但亮度其实已经很低。ISO拉高之后RAW图的随机噪声变大R/G、B/G统计值会出现明显抖动。这些抖动放到AWB算法里会让色温估计上下飘忽。这时候如果收敛速度参数又设得比较激进AWB每帧都去追统计值的变化画面就会像得了“帕金森”一样一会儿暖一会儿冷。我在实际项目里通常会在log里把CCT相关色温和R/G、B/G增益都打出来。跳变严重的片段CCT经常在同一帧从4000K直接掉到2500K下一帧又跳回3800K。这种大跨度跳变根本不是“微调”能解决的必须从统计权重和收敛策略上入手。2.2 大面积固有色干扰天空、夕阳、地面反光的综合博弈白天场景里天空虽然占比大但颜色接近灰白对灰世界假设的冲击有限。夕阳时分就不一样了天空会被染成大面积橙红地面、墙体、玻璃都会被罩上一层暖色。整个画面几乎找不到几个中性灰像素灰世界假设从“灰世界”变成了“橙世界”。此时AWB面临两难。如果它老老实实按灰世界算就会给画面补蓝削弱夕阳氛围如果它为了保留夕阳氛围又需要一套额外的场景判断逻辑比如通过色温下限或置信度阈值来“相信”当前确实是低色温场景。两套判断如果不够默契就会出现某些帧灰世界信了某些帧场景判断信了然后两者交替主导观众看到的就是颜色在连续闪烁。另外夕阳下的地面反光也会捣乱。暗色路面在低色温下往往偏橙而建筑阴影里还残留着来自天空的冷色光不同区域的统计特征完全相反。AWB对整幅画面做平均时反光区域占比一旦变化统计结果就会发生漂移。这也是为什么同一个场景镜头固定和镜头轻微转动跳变程度完全不同。2.3 混合光源让AWB无所适从夕阳最典型的复杂性其实是混合光源。太阳直射区域是2000多K的暖色温而阴影区域是被天空泛光照明的色温可能还有6000K以上。AWB拿到统计量后如果统计窗口同时覆盖了直射区域和阴影区域算法输出的往往是一个“折中色温”。这个折中值单看不难看但它既不符合直射区也不符合阴影区。一旦镜头移动阴影区占比或者直射区占比发生变化AWB就可能在两个“光源簇”之间切换。我见过很多案例手机一转天空颜色瞬间从暖橙变成灰蓝甚至变成偏紫。这是因为算法心里其实认了两种光源只是不知道谁才是“当前主光源”当画面比例跨过一个阈值它就把主光源判断从A切到B。要缓解这种切换光靠校准增益不够必须配合统计区域的ROI权重和AWB平滑策略一起调。3. 定位问题复现、抓log、看统计量3.1 搭建可复现的夕阳场景AWB跳变是一个非常“看天吃饭”的问题同样一台手机今天跳明天不跳换个朝向也不跳。所以调优第一步不是改参数而是把场景稳定下来让跳变能稳定复现。我的做法分几步选时间。太阳距离地平线0到5度的时间段最好前后可能只有半小时窗口要提前踩点。固定机位。不要手持最好用三脚架或者把手机靠在某个固定物体上。手持会引入画面内容的持续变化干扰判断。连续录制。至少录10秒以上不要只抓几张照片。跳变经常出现在连续预览或录像里单帧反而看不出来。记录现场参考。有条件就带一块标准灰卡在相同光线下拍一张灰卡照片这样事后可以确认当时现场的真实色温是多少。没有灰卡就用色温表记录一下或者至少记下当时现场肉眼看到的颜色倾向。同步录像。用一台经过校准的监视器或者屏幕录制功能把手机画面同步记录下来方便逐帧回放。如果无条件等到傍晚也可以在室内用可调色温的照明灯模拟。重点是制造一个“大面积低色温暖光局部冷光阴影”的混合环境跳变往往就会现身。3.2 在高通平台开启AWB调试开关定位跳变必须能看见AWB内部的统计数据。在高通CamX/Chi架构下一般有几个入口打开AWB算法模块的debug log让每个frame的R/G、B/G增益、估计色温、置信度、统计窗口坐标都打印到log里。打开ISP的AWB统计量dump把每个网格的RGB均值输出成文件便于离线分析。使用tuning工具连接设备在在线模式下实时查看当前帧的AWB状态和tuning参数。不同平台上的开关名不太一样有些叫debug.awb有些叫camx.awb.stats还有一些藏在vendor的persist属性里。我建议调试前先grep一下系统里已有的相关开关不要盲目套用网上别人发的代码。调试开关会额外打印大量log影响帧率不要长时间全开抓到问题片段后立刻关掉。还有一个经验log里只看数值不够还要注意时间戳。AWB跳变的“跳”通常发生在几帧以内要把时间戳对齐到帧号才能看清楚跳变之前AE、AWB统计量发生了什么变化。很多问题查不到根因就是log没有逐帧对应。3.3 分析跳变帧先分清“算法跳”还是“场景跳”拿到log和数据之后先别急着调参先回答一个问题这个跳变是AWB自己乱跳还是画面内容本身就发生了剧变方法很简单把跳变发生前后各30帧的log拉出来逐帧看画面内容和AWB输出的变化。如果画面内容几乎没有变化但AWB增益和CCT剧烈阶跃那大概率是AWB算法参数的问题。如果画面里出现了新的物体、镜头快速移动、曝光突然切换那这个跳变可能是场景变化引发的合理响应或者说至少是AE与AWB联动的问题不能单纯怪AWB。我通常在Excel里把R/G、B/G、CCT、AE增益画成曲线横轴是帧号。正常收敛是平滑的曲线跳变帧会形成毛刺。然后再看AE增益曲线是不是在同一帧也有阶跃。如果两个台阶对齐问题很可能出在3A联动而不是AWB单侧。观察项跳变时表现主要定位方向画面内容基本不变颜色闪烁AWB统计或参数问题画面内容镜头切换/物体遮挡场景切换响应属正常或联动问题AWB CCT4000K直接跌到2500K再跳回AWB在多个光源猜测间切换AE增益同时出现台阶式突变AE与AWB联动/曝光切换问题置信度持续偏低大面积纯色/混合光源干扰4. 参数调优实战稳定AWB的核心手段4.1 先校准再调参AWB校准增益与色温边界很多AWB跳变问题追根究底是校准没做好而不是参数没调好。如果sensor在不同色温光源下的R/G、B/G响应曲线本身有偏差算法在低色温区间的判断就会左右摇摆。这个偏差不纠正后面怎么调收敛速度都是治标不治本。调试的第一步是把设备放到标准灯箱里分别拍摄D65、D50、A光源、TL84等标准光源下的灰卡确认标定出的R/G、B/G增益和实际理论值一致。校准曲线要平滑不能出现交叉或突变。我经常看到项目里AWB跳变是因为红色通道的calibration gain标偏了导致算法在低色温区域会把偏暖误判成偏冷于是不断在两个方向之间补偿。校准之后还要确认AWB的色温上下限设置合理。很多平台默认最低色温可能到2500K但夕阳低色温区域可能已经跌到2000K以下。如果色温下限卡得太高算法在极端暖光下找不到合理区间只能在边界附近来回试探表现也是跳变。调低色温下限给算法一个合法的低色温出口很多跳变会自然消失。4.2 调整统计窗口与区域权重把判断权交还给真正的灰点在参数调优里效果最明显、也最容易被滥用的手段是调整AWB统计窗口和ROI权重。高通平台支持把画面划分成网格每个网格可以配不同权重。我们可以把纯色或容易干扰统计的区域权重降低把中性色出现概率更高的区域权重提高。比如夕阳场景天空区域通常在上半部分经常是大面积橙红色很容易带偏统计。我一般会把画面上边缘两行网格的权重降到0.5甚至0.3画面中央垂直区域权重提到1.2到1.5如果有前置摄像头人脸场景还需要把人脸区域单独保护。这样调整之后AWB的“信心”会更集中在灰信息更多的主体上而不是被背景大面积颜色带走。这里有一个重要提醒权重不能无脑调太低。如果某个区域权重过于极端一旦场景切换那个区域里真正重要的物体颜色就会被无视。比如把天空权重压得太低白天正常蓝天下拍摄AWB又可能偏暖。所以每次调整ROI权重后一定要在多个场景下回归验证尤其是从夕阳切到室内、从室内切到夜景这些转场场景。4.3 收敛速度与帧间平滑控制AWB“步子”迈多大AWB是一个反馈系统每一帧算出来的增益不能直接全部应用否则任何统计抖动都会立刻变成画面闪动。所以平台上都会有收敛速度、步长、时域平滑等参数。跳变出现的第一反应就是确认这些参数是不是被设得太“激进”。我遇到过一个项目方案商为了追求“白平衡响应快”把convergence speed调得很高。结果在夕阳场景里AWB几乎每一帧都在大跨度修改增益画面就像呼吸灯一样一暖一冷循环。把收敛速度从0.7降到0.3步长限制加上跳变肉眼可见地减弱。再结合一个3到5帧的时域平滑窗口基本就能压住。但收敛速度太低也有代价。从温暖的室外走进冷色室内AWB如果半天反应不过来画面会长时间残留暖色用户同样会觉得“有问题”。所以调优时要看视频的转场过程而不是只看某个静止场景。我的习惯是先把单帧增益变化步长限制在5%以内再通过平滑窗口把帧间曲线磨平最后根据转场速度微调收敛系数。这个值没有绝对标准关键是要在“稳定”和“跟手”之间找平衡。4.4 混合光源参数与AE联动设置夕阳混合光源下的跳变很多时候不是增益收敛问题而是算法在两个光源之间反复选择。高通平台在AWB参数里通常有一些和“光源切换”相关的阈值比如置信度门限、色温差容忍度、跳变抑制时间。适当调高切换阈值让算法不要因为一两帧的统计波动就立刻更换主光源判断对抑制跳变非常有效。同时要留意AE联动。AWB统计量来自RAW域曝光改变会直接影响统计平均值。在夕阳低照度场景下AE经常在慢慢调整曝光如果AWB每一帧都跟着AE走就很容易出现“AE调一下AWB跳一下”的连锁反应。高通3A里有stabilization相关的协调机制可以让AWB等AE稳定几个帧之后再更新增益。我记得在某个项目里只要把这个等待帧数从1改成4夕阳下的跳变概率直接降了一半。这里建议把AE和AWB的log一起看不要单独调AWB。如果AE增益曲线是台阶式变化AWB跳变帧又刚好在台阶上那优先处理AE的平滑而不是强行压AWB收敛速度。4.5 一个参考调参示例下面这张表是我在某个项目中用过的调参思路。具体参数名在不同高通tuning工具版本里可能不一样但思维路径是通用的。参数通用叫法原始值调整值主要作用备注最低色温限制2500K2000K给夕阳极端暖光一个合法出口注意不要低于sensor校准范围收敛速度0.70.3降低每帧增益改变幅度过小会导致转场响应变慢单帧增益步长10%5%限制单帧最大调整量快速缓解“抽风”时域平滑窗口1帧3到5帧抹平帧间小抖动会带来轻微拖影天空区域权重1.00.4降低大面积暖色干扰不要全压到0中央区域权重1.01.3提高主体灰信息占比适合单主摄场景光源切换阈值低中高避免频繁切换主光源过高会导致色温判断迟钝AE稳定等待帧1帧4帧防止AE带动AWB跳变需要AE本身稳定这套参数并不是万能药但它体现了一个原则先给算法一个合理的“落点”色温范围再引导算法“看哪里”ROI权重最后限制算法“怎么走”收敛速度和平滑。5. 常见问题与排查技巧实录5.1 六个高频问题速查现象可能的根因快速处理方向视频里跳变拍照不跳视频每帧连续更新增益拍照可能有多帧合成或锁定AWB检查视频预览的AWB平滑参数确认拍照分支是否用了不同tuning预览不跳出图跳3A状态和出图线程不同步或者出图前有额外的tuning override对比预览和出图的AWB参数检查后处理模块是否改写增益逆光夕阳跳变严重高动态范围让AE与AWB统计冲突开启AE/AWB联动机制限制高光区域的权重广角/长焦切换时跳变两个sensor校准或参数不一致将两路的calibration、色温范围、收敛速度统一对齐人脸肤色突然偏绿AWB估计色温被混合光源带偏冷色区域占比升高加入人脸区域权重或者提高灰点置信度阈值第三方相机App跳变App自己锁定了AWB或请求了不同的3A模式优先检查App是否调用AWB锁定再看默认模式下的参数5.2 我踩过的几个深坑第一不要在普通显示器上调色。AWB调优要看颜色是否准确如果显示器本身偏色你调半天可能是在补偿显示器的错误。最好用一台校色过的参考监视器先把监视器校准到D65再判断画面“暖不暖”“冷不冷”。没有监视器至少也要用同一台手机在自然光下对照灰卡看。第二不要为了抑制跳变把收敛速度调得极低。我见过一个项目跳变确实没了但用户从室外走进室内画面居然要快10秒才能从暖色变成正常色。这个体验简直灾难。所以每次调完一定要走一遍完整的转场路径室外夕阳、室内暖光、室内冷光、夜间路灯每个场景都要连续录像观察。第三不要忽略AE。AWB不是独立系统它的统计值受曝光影响很大。很多AWB跳变其实是AE在跳或者AE统计里的权重和AWB统计里的权重不一致。先让AE稳定再判断AWB是否还跳不然容易白忙活。第四多摄项目只调主摄。现在手机至少两个摄像头广角和长焦切换时如果两边AWB校准和参数差别大切换瞬间必然跳。这个问题必须在项目早期就把各sensor的AWB校准统一起来等后期再处理工作量和难度都会大很多。我自己的习惯是每次AWB调优落板后把所有原始log、帧图、现场照片打包存档备注当天的天气和时间点。AWB跳变的问题是典型的偶发问题没有存档复现不出来的时候一切参数调整都像在“隔空打靶”。还有一个很实用的小技巧把AWB增益随时间的变化曲线画出来横轴是帧号纵轴是R/G和B/G跳变帧会像毛刺一样明显远比一直盯着视频回放更能定位问题。这套方法我已经在多个项目里验证过如果你也在高通平台处理AWB跳变欢迎来交流各自的典型案例。
阅读完成 · 觉得有帮助?
咨询建站