
提到MTK平台的AWB调试很多人第一反应就是拉灰卡、点光源、跑GVA但真到自己上手调的时候才发现偏色、跳变、低照度色温乱飘这些问题的根因往往不在AWB算法本身。我之前写过一篇基础向的AWB小结这篇延续之前的内容重点记录我这段时间在MTK平台上做AWB调测时实际碰到的问题、排查思路和一些容易被忽略的细节特别是那些文档里不会写、但现场调试天天会遇到的东西。这篇小结主要面向正在做camera tuning的工程师以及刚接手MTK平台影像调试、对3A模块还在摸索期的朋友内容偏实战能帮你少走不少弯路。1. AWB调试前的全局检查先搞懂参数加载链路再谈调色很多刚接触MTK平台的人会直接打开GVA工具开始拖色温曲线但我建议先花半天时间把参数加载链路理清楚。AWB在MTK平台的ISP pipeline里虽然只是其中一个模块但它的初始参数、运行参数、场景切换逻辑全部来自tuning文件如果连参数是怎么从XML/JSON文件走到sensor output的都没搞明白后面所有调整都是在盲调。1.1 MTK平台AWB相关的文件结构与加载顺序MTK平台目前主流的tuning体系里AWB相关配置分散在几个不同层级。第一层是sensor独立的tuning文件通常是imgsensor/xxx/xxx_tuning.xml这类路径里面包含了AWB的初始光源增益、光源坐标表、不同色温段对应的目标R/G、B/G值。第二层是平台级的共用tuning比如isp_tuning_custom目录下的公共AWB参数这一层定义的是算法运行的全局策略比如收敛速度、分区统计权重、低照度判断阈值。第三层是GVA工具本地保存的调试覆盖文件调试时修改的参数会优先于前面两层。实际调试前有个很实用的检查动作在设备端把当前生效的tuning文件路径打出来确认你改的文件确实是正在加载的那一份。我之前就踩过这个坑改了半天的参数结果发现设备挂载的是vendor分区里的另一份同名文件GVA界面显示的参数和实际生效的完全不是一回事。MTK平台一般可以在/vendor/etc/camera/或者/data/vendor/camera/下找到当前加载的tuning文件具体路径会因为平台版本和客户定制有差异但思路是一致的先确认加载路径再动参数。1.2 AWB模块在3A例程中的工作入口AWB在MTK的3A架构里是独立线程运行和AE、AF协同处理。调试时需要关注几个关键入口统计窗口的配置决定AWB算法看的是画面哪些区域、光源增益的初始化影响开机第一帧的色偏程度、以及不同亮度条件下AWB策略切换的阈值。这些入口在GVA中都有对应页面但在代码层面追踪时重点是找到awb_tuning_custom.h或者对应平台的AWB自定义适配文件查看当前使用的到底是默认参数还是客户定制参数。我碰到过一个很诡异的现象同样的场景、同样的环境光有时画面偏暖有时画面偏冷而且切换间隔大概七八秒。最后定位到问题不在AWB本身而是AE的曝光策略频繁在两个ISO档位之间切换导致AWB统计窗口内的信噪比发生变化色温判断随之抖动。这说明AWB调测不能只看AWB模块内部参数AE和AWB的联动关系必须一起拉通看。2. 灯箱环境搭建与灰卡拍摄的实操细节AWB调试的第一步不是连工具而是把拍摄环境准备好。这一步的严谨程度直接决定后续参数可信度。很多人觉得灯箱照着拍灰卡就是了但实际操作中有很多影响结果的小细节。2.1 标准光源的选择与点亮时间MTK AWB调试最常见的光源配置是D65、A光、TL84、CWF这四组有时候会加Horizon。光源不是一打开就能用的灯管需要预热达到稳定色温后才能用于拍摄一般建议提前15到20分钟点亮让色温稳定后再开始拍灰卡。我见过有人为了赶进度灯箱刚亮就拍结果同一盏灯10分钟内色温漂了几百K后面所有灰卡数据的参考价值都大打折扣。还有一个容易忽略的点灯箱的光源分布不均匀。灯箱中间区域和边缘区域的照度、色温都有差异。拍灰卡尽量把灰卡放在灯箱中央并且用照度计确认灰卡表面的入射光均匀度。如果灰卡边缘有暗角或颜色渐变拍出来的raw数据拿去跑AWB会引入额外误差。2.2 灰卡的选择与拍摄规范灰卡推荐使用中性灰卡反射率18%左右表面尽量是哑光材质避免反光带来的干扰。拍摄时灰卡正对镜头不要倾斜超过10度否则镜头的透镜阴影效应会改变灰卡区域的响应值导致R/G、B/G统计值偏离真实光源。灰卡在画面中所占的面积也需要注意。MTK的AWB统计窗口通常可以配置调试AWB时建议让灰卡占统计窗口的一半以上。实际操作时可以先用自动曝光拍一张全灰卡的画面确认亮度分布在目标范围一般RGB均值在180到220之间比较合适过曝或欠曝都会影响色温判断再调整构图和窗口配置。2.3 多光源场景的数据采集策略除了单光源混合光源场景的数据也必须采集。室内窗边这种日光灯光的混合场景是AWB最容易出问题的地方。MTK平台调试混合光源时建议在同一场景下分别用灰卡拍摄几张不同位置的参考图同时也拍一些包含实际物体的画面用于验证AWB在真实场景中的表现。纯灰卡数据只能证明色温估计在理想条件下是准的真实场景下的肤色、植被、天空这些高频记忆色的表现才是用户最终感知到的白平衡质量。3. 暖光场景偏黄的根因排查一次完整的定位链路前阵子遇到一个case客户反馈室内的暖光场景下拍出来的照片整体偏黄肤色尤其明显。这个case的排查过程比较有代表性我把完整链路写出来给大家一个参考。3.1 问题现象与初步判断客户样机在客厅暖黄灯光下拍摄成片整体偏黄白平衡没有完全校正到中性色温。初看像是AWB色温估计偏高把实际2700K左右的暖光判断成了3500K以上导致白平衡增益补偿不足。但同一场景下对比竞品机型竞品的色彩要多中性一些说明咱们的算法没有充分发挥能力还有优化空间。3.2 数据采集与log分析过程排查第一步是用工厂模式锁定当前AWB估计的色温值。打开logcat过滤AWB相关tag抓取该场景下的CCT相关色温输出。实测发现设备在当前场景估计的CCT在3200K到3500K之间而实际光源色温用色温表测出来大概是2900K确实存在大约400K到600K的正偏差。第二步是检查AWB统计窗口的数据。导出当前画面的R/G、B/G统计值和这台sensor在该光源下的标准值做对比。问题来了raw数据中的R/G偏高、B/G偏低落点明显偏离了黑色体轨迹线。这说明统计窗口里混入了非中性色物体或者光源本身的光谱分布和标准A光/TL84差异较大。检查构图后发现统计窗口右下角有一块深色木质家具虽然面积不大但它的低频响应把B/G统计值往下拉了一些导致色温判断偏高。第三步是看AWB算法内部对光源置信度的判断。MTK平台AWB会每个光源区间计算一个置信度权重当前场景下A光源和TL84光源的置信度都处于临界状态算法在该区域容易犹豫偶尔会跳到更高的色温区间。这种临界状态下的光源权重波动就是为什么有时候偏色一会儿明显一会儿不明显的原因。3.3 修复方案与验证定位到这层之后调整思路就很清楚了。先在AWB统计窗口配置上把画面下方的深色区域权重降低让窗口更集中于灰卡和中性区域然后在光源置信度参数上加大A光源区间在低色温段的权重避免算法在临界区域频繁跳变。改完参数后回到同一场景复测CCT估计稳定在2900K左右成片偏黄问题明显缓解。这个case的启示是AWB偏色不一定是算法算不准很多时候是统计窗口的输入数据就不准。调参之前先看统计值这个习惯能帮你排除掉大量假性算法问题。4. 低照度与混合光源下的AWB表现与参数权衡低照度场景是AWB调测的另一个硬骨头。光线暗下来之后sensor噪声显著提升色温判断的振荡概率变大AWB参数如果按正常照度调很容易出现暗光下色彩漂移或者AWB失锁的现象。4.1 低照度下AWB失锁的常见表现暗光场景常见的AWB问题主要有三种整体偏色、AWB增益在不同帧之间来回跳、以及AWB锁死在初始光源设定上不跟随环境变化。第一种偏色往往是噪声导致R/G、B/G统计值失真第二种跳变是因为低照度下统计窗口的信噪比不足算法在几个可能的光源之间来回犹豫第三种通常发生在暗光启动阶段AWB增益被初始值绑定环境变化后算法没有及时收敛。4.2 MTK低照度AWB参数调整思路MTK的AWB参数中有针对低照度场景的专属策略。一般会有一个亮度阈值低于这个阈值时启用的白平衡会偏向保守不会做大幅度的增益调整。调试时需要关注几个点一是统计窗口的分区方式暗光下可以适当增大中心区域权重因为中央区域通常是主体所在而且受边缘暗角影响最小二是增益限幅范围暗光下限制最大R/G、B/G增益可以防止色彩噪声被过度放大三是收敛速度参数正常思路是低照度下放慢收敛速度避免因为帧间噪声导致AWB增益抖动。实际操作中低照度下的收敛速度设置和用户观感需要平衡。收敛太快噪声会引发色温抖动收敛太慢用户从暗场景移到亮场景时白平衡需要比较长时间才能归位体感不佳。我建议优先保证场景切换时的跟随速度暗光下的稳定性通过增益限幅和统计权重去解决而不是一味拖慢收敛。4.3 混合光源场景的取舍逻辑混合光源是AWB调测中最有争议的场景因为人眼对混合光源的感知和算法估计天然存在差异。比如黄昏时分的室内窗外是6000K左右的冷光室内是2800K的暖光人脑会选择性地感知为偏暖的环境但算法的加权平均可能给出一个中间色温导致画面不暖也不冷反而看起来很脏。MTK平台处理混合光源时光源库里的坐标和权重要仔细调整。我的经验是给主光源更高权重让画面的白平衡倾向跟随主光源走避免算法在多个光源之间取折中。比如室内为主的场景就明确偏暖窗外日光再亮也只是作为辅助光源参与计算而不是五五开。这样至少在用户观感上是有明确倾向的比骑墙的中间值要自然得多。5. GVA工具实操在线调参与参数同步的完整流程GVAGolden Verify Assistant是MTK平台影像调试的核心工具在线调参的效率直接决定项目进度。这一节把我在MTK平台上用GVA做AWB调试的完整操作流程和参数同步链条拆开说一下。5.1 连接设备与创建调试会话的注意事项用GVA连接设备前先确认驱动和数据线状态。MTK设备连接到PC后设备管理器里要能看到对应的ADB接口和MTP/COM接口。如果只出来ADB、没有GVA要求的调试通道通常是设备端的调试服务没起来可以尝试先断开再重连或者重启camera server。GVA连接失败还有一个常见原因设备端和PC端的工具版本不匹配版本差异大会导致GVA无法正确解析设备上报的tuning数据结构。连接成功后GVA会从设备端读出当前生效的tuning文件并展示在界面上。这里建议先把整个工程项目文件从GVA里导出一份备份如果在调参过程中GVA崩溃恢复起来也方便。5.2 AWB调参页面的关键参数映射GVA的AWB页面里常见的调整项包括光源坐标Light Source Coordinate对应的是各个标准光源在R/G、B/G平面的目标位置光源增益矩阵用于定义该光源下的白平衡增益色温区间划分决定算法在多少K到多少K之间使用哪组光源参数统计窗口配置控制AWB统计的区域和权重。调参顺序我的习惯是先确认统计窗口是正确的再确认每个标准光源的坐标是否准确然后调整光源之间的过渡逻辑最后调收敛速度与限幅。顺序反了容易出现越调越乱的局面。比如光源坐标本身偏了你却一直在调权重和阈值表面上看有所改善但换个场景就会原形毕露。5.3 参数保存与刷入路径GVA在线调完参数后需要把参数保存成tuning文件再推到设备端验证。这一步看起来简单但路径错误是高频问题。MTK平台的tuning文件有特定的命名规范和目录结构不同sensor的tuning文件不能混用。保存时确认生成的是当前sensor对应的文件推送时确认目标路径是设备实际读取的路径。这里提供一个检查技巧推送完参数后不重启相机先在GVA里重新读一遍设备当前参数确认读回来的参数值和你在PC端改的一致。如果不一致说明文件路径、文件权限或者解析逻辑有问题这时候盲目去实拍验证就是浪费时间。5.4 adb辅助抓取AWB实时log的命令在GVA以外命令行辅助抓取AWB log是排查问题的常用手段。连接设备后用logcat过滤AWB相关tag不同平台tag名有差异一般是Cameralog或者3A相关tag可以实时看到当前色温估计值、R/G B/G统计值、光源置信度等信息。示例命令adb logcat -v time | grep -iE awb|cct|wb_gain如果GVA设备连接正常但AWB log没有输出可以尝试在设备端打开camera的verbose log开关通常在工程模式或者特定属性设置里。抓log时建议在稳定光源下操作同时记录环境光照情况这样log中的CCT值和实际色温才能对上。6. 专项场景实测记录冷光环境、肤色还原与记忆色验证调参完成后不能只看灰卡表现专项场景的实拍验证是AWB调试中必不可少的一环。尤其是冷光环境、肤色还原和记忆色这三个点是用户最容易感知到白平衡差异的场景。6.1 冷光环境下的色温回归测试室外阴影、阴天、LED冷白光这些高色温场景AWB容易出现偏青或偏蓝的问题。实测时我会把手机分别放在室外阴凉处、树荫下、室内LED冷光台灯下各拍灰卡和实际物体查看成片的色偏方向。冷光场景的调试重点在于确保高色温段的光源库覆盖到位如果sensor在高色温段灵敏度不足还需要确认B/G增益限幅是否合理避免色彩过度校正导致画面偏紫。我调试过的某个项目在室外阴影下偏蓝明显查了log发现算法把阴影场景的色温估计到7500K以上实际阴影下的色温大约6500K偏高的CCT给了过多的B/G增益导致蓝色溢出。把高色温段的光源坐标修正后偏蓝问题就解决了。6.2 肤色还原的主观验证方法肤色是AWB调试的试金石因为人眼对肤色偏差非常敏感。实测时使用标准色卡中的人物肤色色块或者让真人入镜在D65、A光、TL84三个光源下分别拍脸部特写观察肤色是否自然红润、是否偏绿/偏紫/偏黄。肤色还原不好很多情况下不是AWB调的偏差而是sensor本身对红色通道的响应偏低AWB算出来的增益无法完全恢复肤色应有的红润感。这时候不要硬调AWB参数去拉红优先考虑在色彩校正矩阵CCM层面配合调整。AWB负责让灰卡变中性色彩层面负责让肤色变好看二者分工明确跨层调整只会把问题越搞越复杂。6.3 记忆色场景的现场验证蓝天、绿草这些记忆色场景虽然不要求绝对准确但用户心中有自己的预期。调试时建议到真实户外场景拍一组查看AWB对这些场景的影响。有些场景下AWB过强的校正会把蓝天的饱和度拉低让画面看起来发灰这种情况可以通过调整AWB的饱和度压缩参数来解决。MTK平台的AWB参数中有与色彩管理模块的接口配合调整可以在保证中性灰准确的前提下提升记忆色的饱和度表现。7. 调试中的几个隐形坑与效率心得最后把这段时间积累的一些零散经验和效率技巧记录下来这些内容比较碎但实用价值很高。7.1 不要忽视AWB初始增益对开机首帧的影响不少项目在开机预览阶段出现明显的色偏然后过一两秒才恢复正常这通常是AWB初始增益设置不合理。MTK平台的初始增益一般从tuning文件中的预设光源读取如果预设值和当前环境差异过大AWB收敛前就会出现色偏。调试时可以在暗房和亮环境各测一次冷启动画面确认初始增益在两端极端场景下都不会产生明显色偏。7.2 注意tuning文件版本管理项目到后期tuning文件版本迭代很快AWB参数经常是多人协同修改。建议每次修改都记录变更内容和日期保存文件时使用带版本号的命名方式。我见过因为两个人同时改了同一个tuning文件、后来覆盖导致AWB表现回退的case排查了大半天才定位到是文件版本冲突。这种问题不是技术难题但会严重浪费时间。7.3 实拍验证的环境选择调完参数后的实拍验证环境选择要覆盖高、中、低色温三档以及室内外、顺光逆光等不同条件。特别要加一个极端场景测试在一个纯色大色块的环境里比如全红墙面、全绿叶场景观察AWB是否会被大面积纯色拉偏。很多AWB的经典bug就藏在这种高饱和纯色场景里一旦拉偏画面整体色偏会非常明显。7.4 ADB推送参数的快速验证流程在GVA之外我惯用的快速验证流程是在GVA中导出修改后的tuning文件通过adb推送到设备tuning目录然后重启camera服务生效。示例命令adb push xxx_tuning.xml /vendor/etc/camera/ adb shell pkill -f cameraserver需要注意的是不同平台重启camera服务的方式略有差异有些平台需要重启整个camera进程有些平台则要求在GUI操作相机界面才能触发服务重启。快速验证流程的价值在于可以在实拍和参数调整之间快速迭代不用每次都在GVA里来回切换。做MTK AWB调试这一年多我最大的体会是AWB的问题表面上都在算法参数里但实际上很大一部分出在统计窗口、光源坐标和AE联动这些外围环节。拿到一个偏色问题先看统计输入对不对再看光源坐标准不准最后才考虑动算法权重这个顺序能帮你在大多数case上少走弯路。另外调试过程中养成记录光源环境、参数改动、成片效果的习惯到项目后期回头看这些记录的价值会超过你想象。