第一章 高通ISP架构概览:从传感器到显示器的图像数据流

各位好,我是老高。在高通平台做相机系统优化,前前后后也有七八年了。今天咱们聊聊ISP的整个数据流——说白了,就是一张照片从镜头进来,到屏幕上显示出来,中间到底经历了什么。

很多人刚接触高通平台时,总觉得ISP是个黑盒子。传感器给个RAW数据,出来就是漂亮的照片了。其实不然。这里面的门道,我当年也是踩了不少坑才摸清楚的。

1.1 整体数据流:从光子到像素

先看一张整体流程图,把脉络理清楚。

高通ISP图像数据流全景图 图像传感器 Bayer RAW ISP Front-End Bayer域处理 BLC / LSC / AWB ISP Main Demosaic RGB域处理 ISP Back-End YUV域处理 缩放 / 色彩增强 显示 3A 统计引擎(AE / AWB / AF) 从ISP各阶段提取统计信息,反馈控制传感器和ISP参数 💡 关键理解: 整个ISP流水线是“逐级递进”的——从Bayer域 → RGB域 → YUV域,每个阶段处理的数据格式不同, 硬件加速器也针对各阶段做了专门优化。3A算法则贯穿始终,实时调整参数。

这张图我建议你多看两眼。它把整个ISP流水线分成了三段:前端、主处理、后端。每一段处理的数据格式都不一样。我刚开始做高通平台时,总以为ISP就是一个大模块,后来才发现,每一段都有自己的硬件加速器,配置方式也完全不同。

1.2 ISP Pipeline核心模块解析

1.2.1 Bayer域:最原始的图像数据

传感器出来的数据,就是Bayer RAW。每个像素只记录一种颜色——R、G、B中的一种。为什么是绿色多一倍?因为人眼对绿色最敏感。这个设计,说白了就是模仿人眼的视觉特性。

Bayer域要处理的事情不少:

  • 黑电平校正(BLC):去掉传感器暗电流带来的偏置。我记得有次项目,客户说暗部偏紫,查了半天,就是BLC没校准好。
  • 镜头阴影校正(LSC):镜头边缘进光量少,亮度会暗下来。高通平台有专门的LSC硬件,查表校正。
  • 坏点校正(DPC):传感器总有那么几个坏点,得用周围像素插值补上。
  • 增益控制:模拟增益和数字增益,直接影响ISO。
个人经验:Bayer域的处理,能早做就早做。我曾经为了省一点功耗,把BLC放到后面做,结果AWB统计全偏了。后来老老实实按高通推荐的pipeline顺序来,再没出过类似问题。

1.2.2 Demosaic:从马赛克到全彩

Bayer数据只有1/3的颜色信息,Demosaic就是要把缺失的颜色猜出来。怎么猜?插值。

最简单的做法是双线性插值——周围四个像素平均一下。但这样边缘会有锯齿。高通平台用的是自适应插值,会根据边缘方向选择插值权重。

这里有个关键点:Demosaic的质量直接决定了后续所有处理的上限。如果这一步搞砸了,后面再怎么调色彩、降噪,都救不回来。

注意:Demosaic不是越复杂越好。在高通平台上,我见过有人把算法搞得太复杂,导致帧率掉了一半。要平衡画质和性能,建议先用高通自带的硬件Demosaic,效果不够再考虑加软件后处理。

1.2.3 RGB域:色彩的世界

Demosaic之后,每个像素都有了R、G、B三个值。这时候就可以做真正的色彩处理了:

  • 白平衡(AWB):让白色物体在任何光源下都看起来是白的。说白了就是调整R、G、B的增益比例。
  • 颜色校正矩阵(CCM):把传感器色彩空间映射到标准色彩空间。不同传感器,CCM完全不同。
  • Gamma校正:人眼对暗部更敏感,Gamma就是做这个非线性映射。

你想想看,RGB域处理完,图像已经很好看了。但为什么还要转到YUV?

1.2.4 YUV域:压缩与显示的基础

YUV把亮度和色度分开。Y是亮度,U和V是色度。人眼对亮度敏感,对色度不敏感。所以YUV域可以放心地对色度做降采样,节省带宽。

高通平台在YUV域主要做这些事:

模块 功能 我踩过的坑
降噪(NR) 分亮度和色度降噪,参数独立 色度降噪太强,颜色会发灰
锐化(Sharpness) 增强边缘对比度 锐化过头,人脸毛孔都出来了
缩放(Scaler) 输出不同分辨率的图像 预览和拍照用不同scaler,参数要分别调
色彩增强 饱和度、对比度、色调调整 客户总喜欢饱和度拉满,但会丢失细节

1.3 Qualcomm ISP硬件加速器介绍

高通ISP之所以强,很大程度上靠的是硬件加速器。软件做一遍同样的算法,功耗和延迟都扛不住。

我列一下高通平台常见的硬件加速器:

  • IFE(Image Front-End):处理Bayer域,包括BLC、LSC、DPC等。速度极快,一条流水线搞定。
  • IPE(Image Processing Engine):处理RGB和YUV域,包括Demosaic、CCM、Gamma、NR、Sharpen等。这是ISP的核心。
  • BPS(Bayer Processing Segment):有些平台把Bayer处理单独拿出来,和IFE配合使用。
  • VFE(Video Front-End):视频专用的前端处理,和IFE类似但针对视频流优化。
关键点:这些硬件加速器不是独立的,它们通过“pipeline”串联起来。高通平台允许你配置每个模块的开关和参数,但pipeline的顺序是固定的。别想着把Demosaic放到IFE前面做——硬件不支持。

我记得有一次,客户想在IFE阶段加一个自定义的降噪算法。我跟他说,IFE只处理Bayer域,你加不了RGB算法。后来我们在IPE阶段用高通自带的NR硬件,调了调参数,效果一样好。这就是硬件加速器的好处——你不需要自己写算法,调参就行。

1.4 从传感器到显示器的完整旅程

最后,咱们串一下整个流程:

  1. 传感器曝光:光子打到像素上,转换成电荷,读出电压值。
  2. RAW数据输出:通常是10-bit或12-bit的Bayer格式,通过MIPI CSI接口传给ISP。
  3. IFE处理:Bayer域校正,输出干净的Bayer数据。
  4. IPE处理:Demosaic → RGB处理 → YUV转换 → 后处理。
  5. 显示输出:YUV数据送到显示控制器,最终显示在屏幕上。

整个过程,从传感器曝光到屏幕显示,延迟通常在30ms以内。你按下快门,照片就出来了。这背后,是ISP硬件加速器和3A算法在毫秒级别内完成了数十亿次运算。

嗯,第一章就到这里。内容不多,但都是基础。后面的章节,我们会深入每个模块的细节,包括怎么调参、怎么debug、怎么优化性能。到时候,我会把我在项目中遇到的实际案例拿出来,跟大家一起分析。