ISP Pipeline 基础:从 RAW 到 YUV 的三大域处理

做图像质量调优,第一件事就是搞懂 ISP Pipeline。说白了,就是搞清楚一张 RAW 图是怎么变成你屏幕上那张漂亮照片的。

我个人习惯把 ISP 分成三个域:RAW 域、RGB 域、YUV 域。每个域干的事不一样,踩的坑也不一样。今天咱们就一个一个过。

核心观点:ISP 调优的本质,就是在每个域里做「取舍」。没有完美的参数,只有最适合场景的平衡。
ISP Pipeline 三大域处理流程 RAW 域 黑电平校正 去噪(原始域) 去马赛克 坏点校正 镜头阴影校正 输入:Bayer RAW RGB 域 白平衡 颜色校正矩阵 Gamma 校正 色调映射 色彩空间转换 输入:RGB 图像 YUV 域 边缘增强 色度降噪 色彩管理 亮度降噪 色域映射 输出:YUV/YCbCr 数据流方向:RAW → RGB → YUV,每个域的处理精度和位宽都在变化

RAW 域处理:一切的基础

RAW 域是 ISP 的第一站。这时候数据还是 Bayer 格式,每个像素只记录一种颜色分量。说白了,就是传感器最原始的「底片」。

黑电平校正

黑电平校正,听着玄乎,其实很简单。传感器在完全无光的情况下,输出并不是 0,而是有一个底噪值。这个值就是黑电平。

我遇到过一台相机,暗部偏紫。查了半天,发现是黑电平校正没做对。R 通道和 B 通道的底噪不一样,导致暗部色偏。

经验之谈:黑电平校正不是简单的减一个固定值。不同增益、不同温度下,黑电平会漂。我建议做动态黑电平校正,实时查表。

去噪(原始域)

RAW 域去噪,我把它叫「保命去噪」。这时候去噪,能最大程度保留细节。一旦进了 RGB 域,噪声和信号就纠缠在一起,再想干净地去掉就难了。

常用的方法有:

  • 空域去噪:双边滤波、非局部均值。适合去除固定模式噪声。
  • 时域去噪:多帧融合。适合运动场景,但要注意鬼影。
  • 变换域去噪:小波阈值。适合保留纹理。
注意:RAW 域去噪力度不能太大。去多了,边缘就糊了。我曾经为了降噪把细节全抹掉,结果拍出来的照片像油画。后来学乖了,先保边缘,再降噪。

去马赛克

去马赛克,就是把 Bayer 格式插值成完整的 RGB 图像。这一步做不好,后面全白搭。

常见的插值算法:

算法 优点 缺点 适用场景
双线性插值 速度快 边缘锯齿严重 低端摄像头
边缘导向插值 边缘平滑 计算量大 手机相机
自适应插值 细节保留好 容易产生伪色 专业相机
深度学习插值 效果最好 功耗高、延迟大 旗舰机型

我个人习惯用边缘导向插值。效果和性能的平衡点最好。不过要注意,插值后一定要做伪色抑制,不然彩色边缘会让你头疼。

RGB 域处理:颜色的灵魂

进了 RGB 域,数据变成全彩色了。这时候主要干三件事:白平衡、颜色校正、Gamma。

白平衡

白平衡,说白了就是让白色物体在任何光源下都看起来是白的。人眼会自动适应,但相机不会。

常用的方法:

  • 灰度世界法:假设场景平均是灰色。简单,但遇到大面积单色场景就翻车。
  • 完美反射法:找场景中最亮的点作为白色参考。容易受高光影响。
  • 色温估计法:通过 R/G、B/G 比值估计色温。我比较推荐这个,稳定。
避坑指南:我曾经在黄昏场景下,白平衡把暖色调硬拉成冷色,结果照片像鬼片。记住,白平衡不是越「白」越好,要保留场景的氛围感。

颜色校正矩阵

颜色校正矩阵,就是用一个 3x3 的矩阵把相机 RGB 映射到标准 RGB。为什么需要这个?因为传感器的色彩响应和人眼不一样。

举个例子:

// 典型的颜色校正矩阵
[ R_out ]   [ 1.8  -0.5  -0.3 ] [ R_in ]
[ G_out ] = [ -0.2  1.6  -0.4 ] [ G_in ]
[ B_out ]   [ -0.1  -0.3  1.4 ] [ B_in ]

这个矩阵怎么来的?拍色卡,然后做最小二乘拟合。我建议至少用 24 色卡,覆盖常见色域。

小技巧:颜色校正矩阵不要过度拟合。过度拟合会导致某些颜色饱和度过高,看起来不自然。留一点余量,让颜色「呼吸」。

Gamma 校正

Gamma 校正,本质上是做亮度映射。人眼对暗部变化敏感,对亮部不敏感。Gamma 曲线就是把亮部压缩、暗部拉伸。

标准 Gamma 2.2 曲线:

// Gamma 2.2 校正公式
L_out = L_in ^ (1/2.2)

但实际调优时,我很少用纯 2.2。为什么?因为不同显示设备的 Gamma 不一样。我一般会做分段 Gamma,暗部用 2.4,亮部用 2.0,中间平滑过渡。

注意:Gamma 校正会影响对比度和饱和度。调 Gamma 时,一定要同时看色卡和肤色。我曾经调完 Gamma,肤色变得像蜡像,就是因为 Gamma 曲线太陡了。

YUV 域处理:最后的打磨

YUV 域,是 ISP 的最后一站。这时候数据已经转成亮度和色度分离的格式。Y 通道管细节,UV 通道管颜色。

边缘增强

边缘增强,就是让图像看起来更锐。常用的方法有 Unsharp Mask 和拉普拉斯算子。

我踩过最大的坑,就是边缘增强过度。拍出来的照片,边缘有一圈白边,俗称「光晕」。后来我学乖了,边缘增强只做 1-2 个像素的半径,强度控制在 0.3 以内。

降噪(YUV 域)

YUV 域的降噪,和 RAW 域不一样。这时候噪声已经和信号混在一起了,所以降噪要更小心。

  • Y 通道降噪:主要做亮度降噪。用双边滤波,保留边缘。
  • UV 通道降噪:主要做色度降噪。用中值滤波,去除彩色噪点。
核心原则:Y 通道少降噪,保留细节;UV 通道多降噪,去除色噪。这个比例我一般调成 1:3。

色彩管理

色彩管理,就是把 YUV 数据映射到目标色域。比如 sRGB、DCI-P3、BT.2020。

这一步容易出问题的是色域裁剪。比如你把 DCI-P3 的数据硬塞进 sRGB,超出色域的颜色会被裁剪,导致颜色断层。

我建议用软裁剪,把超出色域的颜色映射到边界附近,而不是直接切掉。这样颜色过渡更自然。

经验之谈:色彩管理不是越宽越好。宽色域意味着更丰富的颜色,但也意味着更大的数据量。要根据目标显示设备来定。我一般先做色域映射,再做色调映射,顺序不能乱。

小结

ISP Pipeline 的三个域,各有各的脾气。RAW 域保细节,RGB 域定颜色,YUV 域做打磨。每一步都环环相扣,前面错了,后面再怎么调也救不回来。

做调优,我的建议是:先调 RAW 域,再调 RGB 域,最后调 YUV 域。别跳步,也别回头。每一步都确认没问题了,再往下走。

嗯,这一章就到这。记住,ISP 调优没有银弹,只有不断试错和积累经验。