一、LSC基础概念:镜头阴影校正从零讲起

大家好,我是老张。做ISP调试这行十几年了,今天咱们聊聊LSC——镜头阴影校正。

说实话,刚入行那会儿,我总觉得镜头阴影是个小问题。直到有一次,一个客户拿着样机拍出来的照片,左上角明显发暗,右下角偏亮,整个画面像戴了个渐变墨镜。嗯,从那以后,我再也不敢小看LSC了。

1.1 什么是镜头阴影?

镜头阴影,说白了就是画面四周比中心暗。你想想看,用手机拍一张纯白墙壁的照片,放大看四角,是不是有点发灰?这就是镜头阴影。

为什么会这样?原因有两个:

  • 光学原因:镜头本身是个凸透镜,光线从中心通过时路径短,从边缘通过时路径长。光能量衰减了,自然就暗了。
  • 物理原因:CMOS传感器是平面的,但镜头是球面的。边缘光线打到传感器上的角度更斜,单位面积接收到的光量就少。

核心结论:镜头阴影是物理现象,不是故障。所有镜头都有,只是程度不同。我见过最夸张的,中心到边缘亮度差了40%以上。

1.2 亮度阴影 vs 色彩阴影

这里有个容易混淆的点。很多新手以为镜头阴影就是亮度不均匀,其实还有色彩的问题。

类型 表现 原因 我遇到过的案例
亮度阴影(Luma Shading) 画面四周变暗,像加了暗角 光线路径长,能量衰减 某款广角镜头,四角亮度只有中心的60%
色彩阴影(Color Shading) 画面四周偏色,比如偏绿或偏红 不同波长(颜色)的光折射率不同,导致RGB通道衰减不一致 有一次调试,发现四角偏紫,查了半天是红外滤光片的问题

我个人习惯把色彩阴影叫做「偏色阴影」。因为在实际项目中,色彩阴影比亮度阴影更让人头疼。亮度阴影至少是均匀的,调个增益曲线就能解决。色彩阴影呢?你得分别处理R、G、B三个通道,而且不同色温下表现还不一样。

我的经验:调试色彩阴影时,一定要在D65(6500K)和A光源(2856K)两种色温下分别标定。我曾经只做了D65的标定,结果在室内暖光下拍出来,四角红得跟猴屁股似的。

1.3 LSC在ISP Pipeline中的位置

咱们来看看LSC在整个ISP处理流程中排第几。我画了张图,你一看就明白。

ISP Pipeline 中 LSC 的位置 RAW输入 黑电平校正 LSC 镜头阴影校正 去马赛克 后续处理 LSC 在 RAW 域处理,位于黑电平校正之后 去马赛克之前,属于前端预处理 为什么 LSC 要放在这个位置? 1. 必须在 RAW 域处理,因为此时数据是线性的 2. 必须在黑电平校正之后,否则阴影校正会放大黑电平误差 3. 必须在去马赛克之前,因为 Bayer 格式便于分通道处理

你看,LSC在Pipeline里排第三位。为什么是这个顺序?我解释一下:

  1. RAW输入:传感器原始数据,啥都没处理过
  2. 黑电平校正:先去掉传感器本身的暗电流噪声。这一步不做,LSC会把噪声也放大
  3. LSC镜头阴影校正:现在轮到我们了。在RAW域做校正,因为数据还是线性的,增益计算简单
  4. 去马赛克:把Bayer格式转成RGB。LSC做完再做这步,可以避免颜色插值带来的误差
  5. 后续处理:AWB、Gamma、降噪等等

注意:千万不要把LSC放到去马赛克之后做。我曾经见过一个方案,为了省事在RGB域做阴影校正,结果边缘出现了严重的伪色。说白了,Bayer格式下每个像素只记录一种颜色,校正起来干净利落。等插值完再校正,颜色都混在一起了,怎么调都调不干净。

1.4 一个简单的LSC校正原理

LSC的原理其实不复杂。说白了就是:

校正后的像素值 = 原始像素值 × 增益系数

增益系数怎么来?我们用一个网格来标定。比如把画面分成10×10的网格,每个网格测一个增益值。中心区域增益接近1.0,边缘区域增益大于1.0。

// 一个简化的LSC增益表示例(10×10网格)
// 中心区域增益为1.0,四角增益为1.8
float lsc_gain[10][10] = {
    {1.80, 1.60, 1.40, 1.25, 1.15, 1.15, 1.25, 1.40, 1.60, 1.80},
    {1.60, 1.40, 1.20, 1.10, 1.05, 1.05, 1.10, 1.20, 1.40, 1.60},
    {1.40, 1.20, 1.05, 1.00, 1.00, 1.00, 1.00, 1.05, 1.20, 1.40},
    {1.25, 1.10, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.10, 1.25},
    {1.15, 1.05, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.05, 1.15},
    {1.15, 1.05, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.05, 1.15},
    {1.25, 1.10, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.10, 1.25},
    {1.40, 1.20, 1.05, 1.00, 1.00, 1.00, 1.00, 1.05, 1.20, 1.40},
    {1.60, 1.40, 1.20, 1.10, 1.05, 1.05, 1.10, 1.20, 1.40, 1.60},
    {1.80, 1.60, 1.40, 1.25, 1.15, 1.15, 1.25, 1.40, 1.60, 1.80}
};

实际应用中,我们不会用这么粗糙的网格。一般会用32×32甚至64×64的网格,然后通过双线性插值算出每个像素的增益。嗯,这部分后面章节会详细讲。

一个小技巧:调试LSC时,我习惯先看亮度阴影,再看色彩阴影。因为亮度阴影是基础,调好了亮度,色彩阴影的问题往往能解决一半。如果一上来就调色彩,很容易被偏色问题带偏方向。

1.5 本章小结

镜头阴影校正,说白了就是给画面边缘「补光」。但补光不是简单粗暴地乘以一个系数,而是要分通道、分区域、分色温地精细调整。

我记得刚带徒弟那会儿,有个小伙子问我:「师傅,LSC不就是调个增益吗?有什么难的?」我让他去调一款超广角镜头的LSC,结果他调了三天,四角还是偏绿。后来我告诉他,超广角镜头的色彩阴影特别严重,R、G、B三个通道的衰减曲线完全不一样,得分别标定。他这才明白,LSC看着简单,里面的门道多着呢。

好了,这一章就到这里。下一章咱们聊聊LSC的标定流程,包括怎么拍图、怎么计算增益表、怎么验证效果。到时候我会把我踩过的坑都告诉你。


专注资料整理