2、传统ISP Pipeline全景:从RAW到RGB的经典流程

好,我们直接进入正题。上一章聊了为什么AI要改造ISP,这一章我们先看看传统ISP到底长什么样。说白了,就是从传感器拿到RAW图,到最终输出一张人眼看着舒服的RGB图,中间到底走了哪些路。

我个人习惯把ISP Pipeline想象成一条流水线。RAW图就是刚从田里拔出来的萝卜,带着泥(噪声),颜色也不对,亮度也不均匀。经过一道道工序,最后变成超市里包装好的净菜——也就是我们看到的RGB图像。每一道工序都有它的历史使命,也都有它的局限性。这正是AI要介入的地方。

核心观点:传统ISP Pipeline是一个确定性的、基于物理模型的信号处理链条。它很成熟,但也很“硬”。每个模块的参数都需要人工标定,无法像人眼一样自适应场景。

2.1 整体流程概览

先给一张全景图,让你对整体有个概念。别被这么多模块吓到,我们一个一个拆开讲。

传统ISP Pipeline全景流程图 传统ISP Pipeline全景:从RAW到RGB RAW 输入 预处理:黑电平校正 · 线性化 · 去噪 核心处理:去马赛克 · 白平衡 · 颜色校正 后处理:Gamma校正 · 色调映射 · 锐化 RGB 输出 💡 说明:每个模块都有对应的物理模型和参数,传统方案依赖人工标定和固定算法。

你看,整个流程大致分为四个阶段:输入 → 预处理 → 核心处理 → 后处理 → 输出。每个阶段都有几个关键模块。嗯,这里要注意,不同厂商的ISP实现会有差异,但核心逻辑基本一致。

2.2 预处理阶段:把RAW图“洗干净”

RAW图刚进来的时候,其实不能直接用。为什么?因为传感器有暗电流,像素响应也不是线性的。所以第一步就是做黑电平校正。

2.2.1 黑电平校正

传感器在没有光照的时候,依然会输出一个非零值,这叫黑电平。如果不减掉它,整个画面会偏灰,暗部细节全没了。我记得有一次项目,客户反馈夜景照片发灰,排查了半天,最后发现是黑电平参数没更新。嗯,这种坑踩过一次就记住了。

2.2.2 线性化与去噪

有些传感器的响应不是线性的,需要查表做线性化。然后就是去噪。传统去噪主要是空域滤波,比如双边滤波、非局部均值。但这里有个矛盾:去噪太强,细节就没了;去噪太弱,噪声又明显。我早期做算法时,经常在去噪和细节保留之间反复调参,真的很头疼。

我的经验:预处理阶段的质量,直接决定了后续所有模块的效果。如果RAW图没洗干净,后面白平衡、颜色校正都会出问题。所以,我建议在预处理阶段宁可保守一点,也不要过度处理。

2.3 核心处理阶段:从Bayer到彩色

预处理完,数据还是Bayer格式的,每个像素只有一种颜色分量。要变成彩色图像,必须经过去马赛克。

2.3.1 去马赛克

去马赛克就是通过插值,把缺失的R/G/B分量补全。传统方法有双线性插值、边缘导向插值等。但问题来了:在纹理复杂区域,插值很容易产生伪彩色或拉链效应。你想想看,一张照片里如果有一排密集的栅栏,去马赛克后边缘全是彩色的锯齿,多难看。

2.3.2 白平衡

白平衡是为了让白色物体在不同光源下看起来都是白的。传统做法是“灰度世界”或“完美反射”模型。说白了,就是假设场景中所有颜色的平均值是灰色,或者假设场景中有纯白区域。但这两个假设在现实中经常不成立。比如拍一片红色的花海,灰度世界模型就会把整个画面调成偏蓝,因为红色太多了。

2.3.3 颜色校正

颜色校正是通过一个3x3的CCM矩阵,把传感器原始颜色空间映射到标准颜色空间(比如sRGB)。这个矩阵是在实验室里用色卡标定出来的。但问题在于,标定环境的光谱和实际场景的光谱不一样,导致颜色偏差。我做过一个项目,在室内标定的CCM,拿到室外拍蓝天,蓝色总是偏紫。后来我们加了一个光源分类器,根据不同光源切换不同的CCM,效果才好一些。

2.4 后处理阶段:让图像“好看”

核心处理完,图像在颜色上已经基本正确了,但看起来还是“灰蒙蒙”的,对比度不够,也不够锐利。后处理就是干这个的。

2.4.1 Gamma校正

Gamma校正本质上是做非线性映射,目的是适配显示器的响应特性,同时也能提升暗部细节。传统Gamma曲线是固定的,比如2.2。但固定Gamma在低亮度场景下会丢失暗部细节,在高亮度场景下又会过曝。嗯,这里其实有很大的优化空间。

2.4.2 色调映射

对于HDR场景,传统ISP会用多帧融合或局部色调映射。但多帧融合需要场景静止,遇到运动物体就会鬼影。局部色调映射又容易产生光晕。我记得有一次调试一个逆光场景,人脸是黑的,背景是亮的,怎么调都调不好。后来用了AI的方案,效果才明显改善。

2.4.3 锐化

锐化是为了提升图像边缘的清晰度。传统方法如USM(Unsharp Mask),原理很简单:提取高频分量,再叠加回去。但USM对噪声非常敏感,如果图像本身有噪声,锐化会把噪声也放大。所以锐化之前通常要做一个边缘检测,只对边缘做锐化,对平坦区域不做。这个阈值怎么设?全靠经验。

避坑指南:我曾经在一个项目中,为了追求锐度,把USM的强度调得很大。结果在1080p屏幕上看着还行,一放到4K屏幕上,边缘全是振铃效应,客户直接退货。所以,锐化一定要考虑最终显示分辨率。

2.5 传统ISP的局限:为什么需要AI?

讲到这里,你应该能感受到传统ISP的几个核心痛点了:

  • 参数固定:每个模块的参数都是针对特定场景标定的,换一个场景就水土不服。
  • 模块独立:每个模块只处理自己的问题,不考虑上下游的耦合。比如去噪和锐化就是一对矛盾体。
  • 模型简化:物理模型(如灰度世界、固定Gamma)过于简化,无法应对复杂真实场景。
  • 人工调参:参数调试依赖工程师的经验,耗时且不通用。

说白了,传统ISP就像一个经验丰富的老师傅,他能把80%的场景处理得很好,但遇到极端场景就力不从心了。AI要做的,就是补上那20%的短板,甚至把整个流程重新定义。

传统ISP vs AI-ISP 核心差异
维度 传统ISP AI-ISP
参数来源 人工标定 数据驱动学习
场景适应性 固定,需手动切换 自适应,端到端
模块耦合 独立,串行 可联合优化
极端场景 容易失效 鲁棒性更强