第一章:ISP Pipeline全景——从Sensor到显示器的完整图像信号处理链路
大家好,我是你们的老朋友。今天咱们聊聊ISP Pipeline的全景图。
说实话,很多刚入行的工程师会把ISP当成一个黑盒子——Sensor扔进去数据,显示器出来图像,中间发生了什么?嗯,我当年也是这样。直到第一次调试一个低光场景,图像全是噪点,我才意识到:不懂Pipeline,你连问题出在哪都不知道。
1.1 什么是ISP Pipeline?
ISP,全称Image Signal Processor,图像信号处理器。它不是一个单一模块,而是一整套处理链路。从Sensor捕捉到原始RAW数据,到最终在屏幕上显示,中间经过十几个甚至几十个处理步骤。
我个人习惯把Pipeline分成三段:
- 前端处理:从Sensor RAW数据到RGB图像
- 中端处理:从RGB到YUV色彩空间的转换与增强
- 后端处理:从YUV到显示器的最终输出
你想想看,每一段都有它自己的坑。我在项目中遇到过最头疼的,就是前端处理没做好,后面再怎么调也救不回来。
1.2 各模块功能概览
下面这张图是我自己画的ISP Pipeline全景图。别小看它,每次我带新人,第一件事就是让他们对着这张图讲清楚每个模块在干什么。
1.3 前端处理:RAW域的关键模块
前端处理是在RAW域进行的。为什么叫RAW域?因为Sensor输出的数据还没经过任何处理,每个像素只记录一种颜色(R、G、B其中之一)。
1.3.1 黑电平校正(BLC)
BLC是Pipeline的第一步。Sensor在完全无光的情况下,理论上应该输出0,但实际上会有个偏移量。这个偏移就是黑电平。
我曾经调试过一款Sensor,黑电平在不同温度下漂移了十几个DN(数字码值)。如果不做BLC,暗部全是偏色的。嗯,这里要注意:BLC参数最好能根据温度做查表补偿。
1.3.2 镜头阴影校正(LSC)
镜头边缘进光量比中心少,导致四周变暗,这就是镜头阴影。LSC就是给边缘像素乘一个增益系数。
我个人习惯用网格法做LSC——把图像分成16x16的网格,每个网格单独算增益。但要注意,增益太大噪点也会被放大。我在项目中遇到过,LSC增益超过2.5倍时,边缘噪点完全不可接受。
1.3.3 自动白平衡(AWB)
AWB的目的是让白色物体在任何光源下都呈现白色。说白了,就是校正色温。
常用的方法有灰度世界法和完美反射法。但我建议你别只用一种。我做过一个项目,室内暖光灯下灰度世界法完全失效,后来加了色温估计器才搞定。
1.3.4 去马赛克(Demosaic)
Sensor每个像素只有一种颜色,Demosaic通过插值算法补全另外两种颜色。这是Pipeline里计算量最大的模块之一。
简单的双线性插值速度快,但边缘会有锯齿。我一般用自适应插值——平坦区域用均值,边缘区域用方向插值。效果比纯双线性好很多。
1.3.5 色彩校正矩阵(CCM)
CCM把Sensor的RGB转换到标准色彩空间。说白了,就是让红色更红、蓝色更蓝。
这里有个坑:CCM矩阵的系数不能太大。我见过有人为了色彩鲜艳把系数调到2.0,结果图像出现色斑。一般建议对角线系数在1.0~1.5之间。
1.3.6 伽马校正(Gamma)
Gamma校正解决的是人眼对亮度感知的非线性问题。标准Gamma值是2.2。
但注意,Gamma是在RAW域做的,会影响后续的降噪和锐化。我习惯先做Gamma再做YUV转换,这样降噪效果更好。
1.4 中端处理:YUV域的增强
经过前端处理,图像已经从RAW变成了RGB。但RGB格式不适合做压缩和传输,所以我们要转到YUV域。
1.4.1 色彩空间转换(CSC)
CSC把RGB转成YUV。Y是亮度,UV是色度。人眼对亮度敏感、对色度不敏感,所以UV可以降采样来节省带宽。
标准转换公式是BT.601或BT.709。我建议用BT.709,色彩还原更准。
1.4.2 降噪(NR)
降噪是YUV域最重要的模块。常用的有空间域降噪(如双边滤波)和时间域降噪(如多帧融合)。
我个人习惯先做时间域降噪,再做空间域降噪。时间域降噪对静态场景效果极好,但运动场景会有拖影。这时候需要运动检测来调整权重。
避坑指南:我曾经把降噪强度调得太高,结果图像像油画一样。记住,降噪的代价是细节丢失,要找到平衡点。
1.4.3 锐化(Sharpen)
锐化补偿降噪损失的细节。常用的是非锐化掩模(USM)方法。
锐化参数要小心。我见过有人把锐化强度调到100%,结果图像边缘出现白边。一般建议强度在30%~50%之间。
1.4.4 色调映射(Tone Mapping)
HDR场景下,Sensor的动态范围可能超过显示器的能力。色调映射就是把高动态范围压缩到低动态范围。
常用的有全局映射和局部映射。局部映射效果更好,但计算量大。我一般用全局映射加一个自适应曲线,性价比最高。
1.5 后端处理:显示输出
后端处理相对简单,主要是把YUV数据转换成显示器需要的格式。比如HDMI输出需要RGB888,MIPI DSI可能需要RGB565。
这里要注意色彩空间的匹配。显示器的色域可能是sRGB、Adobe RGB或DCI-P3。如果ISP输出的是sRGB,但显示器是DCI-P3,颜色就会偏淡。需要做色域映射。
核心要点总结:
- ISP Pipeline分三段:RAW域前端、YUV域中端、显示后端
- 前端决定图像质量上限,后端决定表现力
- 每个模块都有参数陷阱,需要实际调试才能掌握
- 降噪和锐化是一对矛盾,要找到平衡点
个人经验:调试ISP时,我习惯从前往后调。先调BLC和LSC,再调AWB和CCM,最后调降噪和锐化。如果前端没调好,后端再怎么调也是白费力气。
警告:不要试图一次性调好所有参数。每次只调一个模块,观察效果变化。否则你根本不知道哪个参数导致了问题。
好了,这一章我们走了一遍ISP Pipeline的全景。从Sensor到显示器,每个模块都有自己的角色。下一章我们会深入BLC和LSC的调优细节,到时候我会带一些实际项目的调试数据给大家看。
可可精品资料库