1. ISP Pipeline概览

大家好,我是你们的ISP算法工程师讲师。今天咱们聊聊ISP Pipeline——说白了,就是相机传感器拍到的RAW数据,怎么一步步变成你屏幕上看到的漂亮YUV图像。

我刚开始接触ISP时,觉得这玩意儿就是个黑盒子。RAW图进去,YUV出来,中间发生了什么?完全不知道。后来踩了不少坑,才慢慢摸清楚这条路上的每一个关卡。

ISP在相机系统中的位置

先搞清楚一件事:ISP不是孤立存在的。它夹在传感器和编码器之间,像个翻译官。

  • 传感器:输出RAW数据(拜耳阵列,每个像素只有一种颜色)
  • ISP:处理RAW,输出YUV(亮度和色度分离)
  • 编码器:把YUV压缩成JPEG/H.264

嗯,这里要注意:ISP的输入是RAW,输出是YUV。中间经过的每一步,都直接影响最终画质。

核心观点:ISP Pipeline的本质,就是从物理世界的模拟信号,到数字世界的视觉呈现。每一步都在做「修复」和「增强」。

ISP Pipeline的典型流程

我画了一张流程图,帮你直观理解整个旅程:

ISP Pipeline 典型流程 RAW 输入 黑电平校正 去噪 去马赛克 白平衡 色彩校正 Gamma校正 色调映射 锐化 YUV 输出 RAW域 → 线性RGB域 → 非线性RGB域 → YUV域 RAW域 线性RGB域 非线性RGB域 注:实际Pipeline可能包含更多模块(如LSC、AEC、AWB等),此处展示核心流程

你看,从RAW到YUV,要经过黑电平校正、去噪、去马赛克、白平衡、色彩校正、Gamma校正、色调映射、锐化……每一步都有讲究。

RAW域:原始数据的「原罪」

RAW数据是什么?说白了,就是传感器每个像素点记录的光强值。但这里有个问题:每个像素只记录一种颜色(R、G、B之一)。

我遇到过不少新手问:「为什么RAW图看起来是灰绿色的?」嗯,因为拜耳阵列里绿色像素占了一半,而且RAW数据没有经过任何处理,看起来当然不正常。

小技巧:调试ISP时,我习惯先看RAW域的直方图。如果黑电平校正没做好,直方图会整体偏移,后面所有模块都会跟着跑偏。

线性RGB域:数学运算的主战场

去马赛克之后,每个像素都有了完整的RGB值。这时候图像处于线性空间——说白了,像素值和光强是正比关系。

为什么要强调线性?因为很多数学运算(比如白平衡、色彩校正矩阵)都假设输入是线性的。如果你在非线性空间做这些运算,结果会一塌糊涂。

我曾经在一个项目里,因为Gamma校正放在了白平衡前面,结果色彩怎么调都调不对。后来发现是顺序搞反了——嗯,这个坑我替你们踩过了。

非线性RGB域:人眼感知的适配

Gamma校正把线性空间映射到非线性空间。为什么?因为人眼对暗部变化更敏感,对亮部变化不敏感。Gamma校正本质上是在「欺骗」人眼,让有限的比特数发挥最大效果。

色调映射(Tone Mapping)也在这里做。特别是HDR场景,动态范围太大,直接显示会丢失细节。色调映射就是把高动态范围压缩到低动态范围,同时保留视觉细节。

注意:Gamma校正和色调映射的顺序不能乱。先Gamma再色调映射,和先色调映射再Gamma,结果完全不同。我建议你在调试时固定一个顺序,不要随意调整。

YUV域:编码和显示的标准格式

最后一步,把RGB转成YUV。Y是亮度,UV是色度。为什么这么做?因为人眼对亮度敏感,对色度不敏感。YUV格式可以压缩色度信息,节省带宽。

我见过有人问:「为什么不直接用RGB输出?」你想想看,如果直接用RGB,编码器要处理三个通道的全分辨率数据,效率低得多。YUV可以把UV通道降采样,比如YUV420,UV只有Y的四分之一大小。

ISP与HAL层的协同

ISP不是软件跑在CPU上,而是硬件加速器。HAL层(硬件抽象层)负责把ISP的寄存器配置好,让硬件按你的意图工作。

我调试ISP时,最头疼的就是HAL层的时序问题。比如,你改了白平衡参数,但HAL层没在正确的帧边界更新寄存器,结果画面闪烁。嗯,这种问题排查起来特别费劲。

模块 ISP硬件 HAL层职责
黑电平校正 减法器 配置校正值
去马赛克 插值引擎 配置插值算法
白平衡 乘法器 配置增益值
色彩校正 矩阵乘法器 配置CCM矩阵
Gamma校正 查找表 加载LUT

你看,每个ISP模块都有对应的硬件单元。HAL层的工作,就是把这些硬件单元配置好,让它们协同工作。

避坑指南:我曾经在调试时,发现画面偏绿。查了半天,发现是HAL层把白平衡增益写反了——R和B通道的增益值交换了位置。所以,调试时一定要先确认HAL层的配置是否正确。

总结

ISP Pipeline从RAW到YUV,本质上是一个「修复+增强」的过程。修复传感器的缺陷(黑电平、噪声、色彩偏差),增强视觉体验(Gamma、色调映射、锐化)。

理解这条Pipeline,是ISP调优的第一步。后面我们会深入每个模块,讲具体的算法原理和HAL层实现。到时候你会发现,很多问题其实都出在「顺序」和「参数」上。

好了,今天就聊到这里。记住:ISP调优没有银弹,只有对Pipeline的深刻理解,才能快速定位问题。