瑞芯平台AWB架构:从硬件到算法的全景图

做AWB调试,第一件事不是调参数,而是搞清楚整个链路怎么跑的。我见过不少工程师,拿着ISP工具就开始调白平衡增益,结果偏色问题怎么都修不好——后来发现是硬件通路配置错了。嗯,这章我们就来拆解瑞芯平台的AWB架构。

RK ISP硬件模块概览

瑞芯的ISP不是一个黑盒子,它内部有明确的硬件模块分工。AWB相关的硬件模块,说白了就这几个核心单元:

硬件模块 功能描述 我踩过的坑
RAW域统计引擎 从RAW图直接提取R/G/B三通道统计值 统计窗口没对齐,导致边缘偏色
AE/AWB共用直方图 亮度与色度直方图,用于场景判断 直方图bin宽度设太粗,色温区分不开
色彩校正矩阵(CCM) 硬件级色彩空间转换,AWB之后执行 CCM和AWB增益打架,颜色过饱和
Gamma/LUT模块 非线性映射,影响AWB后的色调 Gamma曲线改了,白平衡又得重调

你想想看,这些模块是串联工作的。RAW统计引擎先拿到原始数据,然后AWB算法算出增益,最后CCM和Gamma做色彩映射。任何一个环节出问题,最终图像都会偏色。

关键认知:硬件统计引擎的输出质量,直接决定了AWB算法的上限。统计窗口位置、大小、权重配置,比算法参数本身更重要。

AWB算法模块划分

瑞芯的AWB算法不是单一模块,它分成了三个层次。我个人习惯把它们叫做「感知层-决策层-执行层」:

  1. 色温估计器(感知层)—— 从统计值推算当前光源色温。常用方法有灰度世界、完美反射、色温查找表。
  2. 场景分类器(决策层)—— 判断当前是室内、室外、日落还是混合光源。这个模块我花了很多时间调,因为误判会导致白平衡跳变。
  3. 增益计算器(执行层)—— 根据色温和场景,输出R/G/B三通道增益值。这里要注意增益上限,防止通道饱和。

我曾经在一个项目中,色温估计器算出来是5000K,但场景分类器认为是室内暖光,结果增益算出来偏蓝。后来发现是统计窗口覆盖了天空和墙壁的混合区域。说白了,统计源的纯净度比算法复杂度更重要。

我的经验:调试AWB时,先锁定场景分类器的输出,确认它没判错,再去调色温估计器。否则你会在错误的方向上越走越远。

RkAiq与3A库的关系

很多新手搞不清RkAiq和3A库的区别。我简单解释一下:

  • RkAiq 是瑞芯的AIQ框架,负责ISP参数的整体调度。它像个总指挥,告诉各个模块什么时候该做什么。
  • 3A库(AE/AWB/AF)是具体的算法实现。AWB算法就放在3A库里,RkAiq会调用它。

它们的关系是这样的:

应用层 → RkAiq框架 → 3A库(AWB算法) → ISP硬件寄存器

调试的时候,你改的是3A库里的AWB参数,但生效需要经过RkAiq的调度。我记得有一次改了AWB的增益上限,结果没生效,查了半天发现是RkAiq的配置文件中把AWB模块给禁用了。嗯,这种低级错误最容易让人抓狂。

注意:RkAiq的配置文件(通常是JSON或XML格式)里有一个 enable_awb 字段。如果它被设为false,你改再多3A库参数都没用。这是排查问题的第一站。

调试工具链介绍

工具链是AWB调试的「眼睛」。瑞芯平台主要提供这几样工具:

工具名称 用途 我的使用习惯
RKISP_Tuner 在线调参,实时预览效果 先调大方向,再微调细节
RkAiq_Calibration 离线标定,生成初始参数 实验室环境下做一次,作为基准
ISP_Dump工具 抓取RAW图和统计值 遇到偏色必抓RAW,分析原始数据
Log分析脚本 解析AWB算法运行日志 看色温估计值和最终增益是否匹配

我个人最常用的是 ISP_Dump工具。为什么?因为很多偏色问题在预览图上看不出来,但RAW图里一清二楚。比如某个通道有坏点,或者统计窗口覆盖了过曝区域,这些在RAW里都能发现。

避坑指南:我曾经花了两天调AWB参数,偏色就是修不好。最后dump了RAW图,发现绿色通道有两个坏点,导致统计值偏高。换掉sensor后,问题立刻解决。所以——先看RAW,再调参。

AWB架构全景图

下面这张图是我自己总结的瑞芯AWB架构关系,你可以把它当作调试时的路线图:

瑞芯AWB架构全景图 硬件层:ISP统计引擎 RAW域统计 | 直方图 | CCM | Gamma/LUT 统计窗口位置/大小/权重配置 算法层:3A库中的AWB模块 色温估计器 → 场景分类器 → 增益计算器 灰度世界 / 完美反射 / 色温查找表 增益上限 / 平滑过渡 / 混合光源处理 调度层:RkAiq框架 参数调度 | 模块使能 | 配置加载 enable_awb / 参数优先级 / 实时更新 工具链:RKISP_Tuner | RkAiq_Calibration | ISP_Dump | Log分析 调试顺序: 先查硬件统计 → 再看算法输出

这张图把整个链路串起来了。从上到下依次是:硬件统计引擎 → 3A库AWB算法 → RkAiq调度 → 工具链。调试的时候,我建议你按照这个顺序排查问题。先确认硬件统计值对不对,再看算法算出来的色温和增益是否合理,最后检查RkAiq有没有正确下发参数。

一句话总结:AWB调试不是调一个参数的事,而是理解整个链路后,在正确的位置做正确的修改。硬件统计是地基,算法是房子,RkAiq是物业——地基歪了,房子和物业再好也没用。