1. 3A算法全景概览:AE/AWB/AF基础原理、高通平台3A架构、调试工具链介绍

各位同学,欢迎来到《高通相机3A算法参数标定与场景适配》的第一章。

做相机调试这么多年,我经常被问到同一个问题:「3A到底调的是什么?」说白了,3A就是让摄像头学会「看」——看得清亮度、看得准颜色、看得稳焦点。没有3A,你拍出来的照片要么过曝、要么偏色、要么糊成一片。

这一章,我们先搭个全景框架。不急着调参数,先把AE、AWB、AF各自干什么、高通平台怎么组织它们、以及我们手头有哪些调试工具,理清楚。

1.1 三大核心算法:AE / AWB / AF

3A是三个独立又耦合的模块。我习惯把它们比作一个摄影团队:

  • AE(自动曝光)——灯光师,负责控制进光量
  • AWB(自动白平衡)——调色师,负责还原真实色彩
  • AF(自动对焦)——焦点员,负责让主体清晰

下面逐个拆开讲。

AE — 自动曝光

AE的目标很简单:让图像亮度落在人眼舒服的范围。它通过调节三个参数实现:

  • 曝光时间(Exposure Time):传感器感光时长,单位毫秒
  • 模拟增益(Analog Gain):传感器内部放大倍数
  • 数字增益(Digital Gain):ISP数字域放大倍数

高通平台里,AE策略通常走「先调曝光时间,再调增益」的路线。为什么?因为增益会引入噪声,曝光时间不会。我早期调一个低光场景时,发现增益拉太高,暗部全是噪点。后来强制限制最大增益,优先拉长曝光时间,效果立竿见影。

避坑指南:我曾经在室内灯光下把曝光时间设到66ms,结果画面出现50Hz工频闪烁。后来才意识到——曝光时间必须是工频周期的整数倍。国内50Hz,周期20ms,所以曝光时间得是20的倍数。这个坑,踩过一次就忘不了。

AWB — 自动白平衡

AWB负责把「白色」还原成白色。不同光源色温不同——烛光偏红(约2000K),日光偏蓝(约5500K)。传感器本身没有色温概念,拍出来的白色可能偏橙或偏蓝。

AWB的核心是估算当前光源色温,然后对RGB通道做增益补偿。高通平台用的是色温曲线 + 统计分区的方法:

  • 把画面分成若干区域,统计每个区域的R/G、B/G比值
  • 将这些比值映射到预先标定的色温曲线上
  • 选出置信度最高的色温,计算增益

你想想看,如果画面里全是红色物体,AWB会不会把红色误判成低色温光源?会的。这就是AWB最头疼的问题——大色块干扰。我调过一台扫码设备,背景是深蓝色,AWB死活把蓝色往白色拉,结果整个画面发黄。最后靠调整色温曲线的置信度阈值才解决。

AF — 自动对焦

AF通过移动镜头找到最清晰的焦平面。高通平台主流方案是反差式对焦(CDAF)和相位对焦(PDAF)混合使用。

  • CDAF:搜索对比度最大的位置,精度高但慢
  • PDAF:通过专用像素检测相位差,速度快但受光照影响大

高通的做法是:先用PDAF快速跳到大致位置,再用CDAF微调收尾。这个策略在大部分场景下表现不错,但低光时PDAF容易失效,得回退到纯CDAF。

注意:AF调试最容易被忽略的是「无穷远校准」。如果镜头机械限位和光学无穷远对不上,拍远景永远对不准。我见过一个项目,所有参数都调好了,拍月亮就是糊的——最后发现是AF的无穷远位置标定偏了0.5个码值。

1.2 高通平台3A架构

高通的3A架构,说白了就是一套分层协作的框架。从上到下分三层:

层级 组件 职责
应用层 Camera HAL / App 下发策略、接收结果、控制流程
算法层 AE / AWB / AF 算法库 执行核心计算、输出参数
驱动层 Sensor / Actuator / ISP 驱动 执行硬件控制、上报状态

高通把3A算法封装在mm-camera或camx框架里。每个模块独立运行,通过消息队列通信。举个例子:AE算出新的曝光时间后,会发消息给ISP驱动,驱动再写寄存器。整个过程在帧消隐期内完成,不影响帧率。

我个人觉得,高通架构最聪明的地方是策略与算法分离。算法只负责「怎么算」,策略决定「什么时候算、算完怎么用」。这样换算法库不用动策略,换策略不用动算法。调试时,我们通常只改策略层的XML参数,不动算法核心。

核心概念:高通3A的「参数标定」本质上是填充策略层的XML表——包括AE的目标亮度表、AWB的色温曲线表、AF的搜索步长表。这些表的质量,直接决定最终效果。

1.3 调试工具链介绍

工具链是调试的「手」和「眼」。高通平台主要靠下面这几样:

1. QACT(Qualcomm Advanced Camera Tuning)

这是高通官方的调优工具,也是我们最常用的。它提供:

  • 实时预览 + 参数调节滑块
  • 3A参数在线修改(不用重新编译)
  • 统计数据显示(亮度直方图、色温分布、对焦值曲线)

我习惯把QACT接上设备后,先看三个窗口:预览图、直方图、3A状态日志。这三个窗口能告诉你80%的问题。

2. CHI(Camera Hardware Interface)调试节点

高通从camx框架开始,把调试接口暴露在/sys/devices/platform/...或/d/文件系统下。你可以通过adb直接读写节点:

# 读取当前曝光时间
adb shell cat /d/camera/sensor/exposure

# 强制锁定AWB色温
adb shell echo "5500" > /d/camera/awb/force_ct

这个方式在自动化测试里特别有用。我写过一个脚本,遍历100组AWB参数,每改一组拍一张图,全自动跑完再挑最优。

3. 抓图与日志工具

  • camx_dump:抓取原始帧和3A统计信息
  • logcat + grep:过滤3A模块日志
  • perfetto / systrace:分析3A耗时和帧率
调试习惯:我每次开始调一个新场景,都会先抓一组「全默认参数 + 全统计信息」的基线数据。这样后面改了什么、效果变好还是变差,都有据可查。别凭感觉调,数据不会骗人。

1.4 3A算法全景架构图

下面这张图,把AE、AWB、AF在高通平台上的数据流和协作关系画出来了。建议你仔细看几遍,后面每一章都会回到这张图。

高通3A算法全景架构图 高通3A算法全景架构图 图像传感器 ISP 管线处理 3A 统计引擎 AE 自动曝光 目标亮度 / 曝光策略 AWB 自动白平衡 色温估计 / 增益计算 AF 自动对焦 对焦值搜索 / 马达控制 3A 策略层 (XML) Sensor / Actuator 驱动 数据流方向:传感器 → ISP → 统计引擎 → 3A算法 → 策略层 → 驱动层 → 传感器(闭环)

这张图里,数据从传感器出来,经过ISP处理,进入3A统计引擎。统计引擎把亮度、色温、对焦值分别喂给AE、AWB、AF。三个算法算出结果后,交给策略层做决策,最终通过驱动层控制硬件。整个环路每帧跑一次。

嗯,这里要注意:三个算法不是完全独立的。AE和AWB共用统计窗口,AF的合焦状态会影响AE的目标亮度(微距场景下亮度会变化)。调试时不能只盯着一个模块看。

1.5 本章小结

这一章我们做了三件事:

  • 理清了AE、AWB、AF各自干什么、怎么干
  • 看懂了高通3A的分层架构和协作方式
  • 认识了QACT、CHI节点、抓图日志等调试工具