isp_tutorial

第4章:ISP前端处理:原始数据校正

章节概述

原始传感器数据(RAW)是整条ISP流水线中最接近物理成像过程的表示形式。它既保留了最多的信息,也携带了最多的器件非理想性:黑电平偏移、列/行固定模式噪声、温度相关暗电流、ADC非线性、像素响应不一致,以及不同增益档位下的响应漂移。如果这些问题在前端没有被妥善校正,后续的Lens Shading、坏点修复、去马赛克、降噪和色彩处理都会建立在错误的信号基准之上,导致误检、色偏、动态范围损失甚至系统级不稳定。

在自动驾驶和具身智能系统中,RAW校正的要求比消费摄影更严格。系统不仅关心“画面好不好看”,更关心同一物体在不同温度、曝光、模拟增益和时间点下,是否仍然产生一致、可预测的数字响应。换言之,前端原始数据校正的目标不是简单“美化图像”,而是把传感器输出尽量还原为一个稳定、线性、可标定、可建模的信号域。

本章将系统介绍RAW前端校正链路的核心内容,包括Black Level Correction、固定模式噪声消除、暗电流补偿、线性化、PRNU校正,以及传感器增益与偏移标定。我们将同时讨论数学模型、标定方法、RTL/硬件实现结构,以及在车载与机器人场景中的工程权衡。

学习目标

4.1 原始数据校正链路总览

4.1.1 RAW观测模型

从系统设计角度,单个像素在ADC输出前后的信号可以抽象为:

\[D_{raw}(x,y) = Q\left(g_a \cdot \left[S(x,y) + I_{dark}(x,y,T)\cdot t_{exp} + O_{pix}(x,y) + O_{col}(y) + O_{row}(x)\right] + O_{adc}\right) + n_q\]

其中:

这个模型说明:RAW数据并不等于“真实光照”,它是光信号、器件偏移、温漂和读出链路误差的叠加结果。ISP前端校正的本质,就是尽可能把这些非理想项从观测值中剥离出去。

4.1.2 典型处理顺序

工程上常见的RAW前端处理链路如下:

Sensor ADC Output
      |
      v
[Optical Black Statistics / Black Level]
      |
      v
[Dark Current Compensation]
      |
      v
[Row/Column FPN Correction]
      |
      v
[Linearization / Decompanding]
      |
      v
[PRNU / Flat-Field Correction]
      |
      v
[Gain & Offset Normalization]
      |
      v
To Lens Shading / Defect Pixel / Demosaic

这个顺序并非唯一,但有强烈的工程逻辑:

  1. 先减偏移,再做乘法校正。黑电平、暗电流和大部分FPN是加性误差,若在乘性校正之后再减,会被不必要地放大。
  2. 先线性化,再做依赖“相对响应”的校正。PRNU本质上是像素响应不一致,在线性域中更容易建模和补偿。
  3. 增益与偏移归一化要感知模式切换。不同ISO、DCG模式和HDR通路可能共享算法,却不共享标定参数。

4.1.3 前端校正失败的系统后果

如果RAW校正不准,后续模块通常会出现连锁反应:

对自动驾驶系统而言,更严重的问题是同一场景在不同环境条件下产生不一致特征,进而影响感知网络的域稳定性。

4.2 Black Level Correction原理与校准方法

4.2.1 什么是黑电平

理想情况下,在无光照、零信号输入时,传感器输出应为0。但真实系统不会这样工作,原因包括:

因此,RAW中的“0码值”通常不是物理意义上的黑,而是一个预留的数字基线。Black Level Correction(BLC)的目标,就是减去这个基线,使无光输入尽可能回到真实零点附近。

对Bayer传感器,黑电平通常按颜色平面独立建模:

\[B = \{B_R, B_{Gr}, B_{Gb}, B_B\}\]

校正公式为:

\[P_{blc}(x,y,c) = \max\left(P_{raw}(x,y,c) - B_c,\ 0\right)\]

这里的 $c \in {R, Gr, Gb, B}$,之所以区分两个绿色,是因为上下文中它们可能处于不同列/微透镜/读出路径,偏置并不完全相同。

4.2.2 Optical Black像素与实时估计

许多传感器在有效成像区域边缘预留遮光像素(Optical Black, OB),这些像素理论上不受光照,只反映读出链路偏移和暗电流。ISP可以利用它们实时估计黑电平:

\[\hat{B}_c = \frac{1}{N_c} \sum_{(x,y)\in \Omega_{OB,c}} P_{raw}(x,y,c)\]

其中 $\Omega_{OB,c}$ 是颜色平面 $c$ 对应的OB区域。

典型做法包括:

  1. 帧级平均:对整帧OB取均值,适合稳定场景
  2. 行级更新:每行或每若干行更新一次,适合存在行漂移的读出链路
  3. 鲁棒估计:使用trimmed mean或中值,避免OB区域被偶发串扰污染

实时估计的优点是能跟踪温漂和电源漂移;缺点是若OB区域质量差,或强干扰耦合到OB像素,估计会不稳定。

4.2.3 静态标定与动态跟踪

工业产品中,黑电平通常不是“只靠实时估计”或“只靠工厂常数”,而是两者结合:

\[B_c(T,g_a,m) = B_{c,ref}(m) + \Delta B_{temp}(T,m) + \Delta B_{gain}(g_a,m)\]

其中:

静态标定给出各模式下的参考黑电平,动态部分则依靠OB统计、温度表或时域跟踪更新。

时域平滑常用:

\[B_c^{(t)} = \alpha \cdot B_c^{(t-1)} + (1-\alpha)\cdot \hat{B}_c^{(t)}\]

其中 $\alpha$ 一般取0.8到0.98。数值越大,噪声越小,但对快速漂移响应越慢。

4.2.4 定点实现与位宽设计

黑电平减法虽然简单,却直接决定后续模块的信号基准,位宽设计不能随意。

若输入为12bit RAW,黑电平可能在64到256码值之间。常见实现策略:

RTL结构通常很简单:

RAW In --> [Channel Select] --> [Subtract Bc] --> [Clamp] --> RAW_BLC

真正难点不在减法器,而在参数切换一致性:如果帧中途切换寄存器,可能出现前半帧用旧黑电平、后半帧用新黑电平的灾难性不连续,因此一般要使用影子寄存器和frame-sync生效机制。

4.2.5 自动驾驶场景的额外要求

车载系统常见以下特殊约束:

因此,BLC模块往往要输出统计信息给系统监控模块,而不仅仅输出校正后的像素。

4.3 固定模式噪声(FPN)消除

4.3.1 FPN的类型

固定模式噪声(Fixed Pattern Noise, FPN)是指在相同输入条件下、空间上稳定重复出现的噪声结构。它不同于随机噪声,后者会在时间上波动;FPN在多帧平均后反而更加明显。

常见FPN可分为:

  1. 偏移型FPN(Offset FPN)
    • 无光照时仍存在
    • 主要表现为列纹、行纹、局部偏置块
  2. 增益型FPN(Gain FPN)
    • 随照度增强而放大
    • 本质上与PRNU相关,但更强调读出链路增益失配
  3. 列FPN / 行FPN
    • 由列放大器、列ADC、行选择器不匹配造成
    • 是最常见、最显眼的条纹来源
  4. 模式切换FPN
    • 某些增益档位、HDR通路或binning模式下单独出现

在工程实现里,Offset FPN通常在黑电平/暗电流附近处理,Gain FPN与PRNU有一定重叠,但标定手段和更新节奏不同。

4.3.2 列FPN的建模与校正

假设某列存在稳定偏移 $\delta_{col}(y)$,则:

\[P(x,y) = S(x,y) + \delta_{col}(y) + n(x,y)\]

校正公式为:

\[P_{cfpn}(x,y) = P(x,y) - \hat{\delta}_{col}(y)\]

列偏移的估计方式主要有两类:

方法A:暗场标定

在暗场下拍摄多帧,计算每列均值:

\[\hat{\delta}_{col}(y) = \frac{1}{M \cdot H} \sum_{k=1}^{M}\sum_{x=1}^{H} P_k(x,y) - \bar{P}\]

其中 $H$ 为图像高度,$\bar{P}$ 为全局均值,用于去除公共偏移。

方法B:在线高通估计

对于纹理不强的区域,可用列均值减全局均值近似列偏移,但需要屏蔽强边缘和高对比目标,否则真实内容会泄漏进校正量。

4.3.3 行/列联合FPN与低秩观点

当行FPN和列FPN同时存在时,可以写成:

\[P(x,y) = S(x,y) + a_x + b_y + \epsilon(x,y)\]

其中 $a_x$ 是行偏移,$b_y$ 是列偏移。这个模型本质上是一个低秩加性结构。标定时可用交替估计:

\[a_x = \frac{1}{W}\sum_{y} (P(x,y)-b_y), \qquad b_y = \frac{1}{H}\sum_{x}(P(x,y)-a_x)\]

迭代2到3轮通常即可收敛。

对硬件来说,列FPN更容易实时处理,因为只需要一条“列参数表”;行FPN若用整行统计实时更新,容易引入额外行缓存压力,因此很多系统采用“工厂标定 + 慢更新”策略。

4.3.4 FPN校正与真实纹理的冲突

FPN去除看似简单,实际容易伤害真实图像结构。最常见错误是把大面积水平/垂直纹理当成行列偏置减掉。

例如在自动驾驶场景中:

因此,在线FPN估计通常需要:

4.3.5 硬件实现示意

RAW_BLC
   |
   v
[Address by Column/Row]
   |
   +--> [Column Offset LUT]
   |
   +--> [Row Offset LUT]
   |
   v
[Subtract / Combine]
   |
   v
RAW_FPN_Corrected

典型资源权衡:

4.4 暗电流补偿与温度依赖性

4.4.1 暗电流的来源

暗电流是指在无光条件下,由热激发产生的电子流。其主要来源包括:

暗电流具有两个关键特征:

  1. 与曝光时间近似成正比
  2. 对温度极其敏感

因此它与黑电平不同。黑电平更多是读出基线偏移,而暗电流是“会随时间积分增长”的电荷项。

4.4.2 基本模型

最常用的一阶模型为:

\[D_{dark}(x,y,T,t_{exp}) = I_{dark}(x,y,T)\cdot t_{exp}\]

若用参考温度 $T_0$ 表示,可近似写为:

\[I_{dark}(x,y,T) = I_{dark}(x,y,T_0)\cdot 2^{\frac{T-T_0}{\Delta T}}\]

其中 $\Delta T$ 常取7到8°C,即温度每升高约7到8°C,暗电流翻倍。

完整补偿公式:

\[P_{dc}(x,y) = P_{in}(x,y) - \hat{I}_{dark}(x,y,T)\cdot t_{exp}\]

如果仅用全局平均值替代逐像素模型,则:

\[P_{dc}(x,y) = P_{in}(x,y) - \hat{\mu}_{dark}(T,g_a,m)\cdot t_{exp}\]

这会显著降低实现成本,但无法处理空间不均匀的热像素和暗电流热点。

4.4.3 暗帧法与温度查表法

暗电流补偿常见有两套工程路径。

路径A:暗帧模板

在工厂或系统维护阶段,采集不同温度、曝光、增益组合下的暗帧模板:

\[\mathcal{D}(x,y; T_i, t_j, g_k)\]

运行时根据当前状态插值:

\[\hat{D}_{dark} = \text{Interp}\left(\mathcal{D}; T, t_{exp}, g_a\right)\]

优点:

缺点:

路径B:温度-曝光分离模型

把暗电流分解为模板和比例项:

\[\hat{D}_{dark}(x,y) = D_{ref}(x,y) \cdot f_T(T) \cdot f_t(t_{exp}) \cdot f_g(g_a)\]

优点是压缩参数量;缺点是当不同模式下空间分布形态都变了时,单一模板不足以覆盖。

4.4.4 长曝光与车载高温场景

暗电流补偿在以下场景尤其关键:

例如参考温度25°C时暗电流为10 e-/s,85°C时若每8°C翻倍,则:

\[I_{85} = 10 \cdot 2^{\frac{85-25}{8}} = 10 \cdot 2^{7.5} \approx 1810 \text{ e-/s}\]

若曝光时间为20ms,则每像素平均暗信号约为:

\[Q_{dark} \approx 1810 \times 0.02 = 36.2 \text{ e-}\]

这已经足以显著抬升暗部,并改变后续降噪和检测模块的噪声基线。

4.4.5 暗电流与热像素的边界

暗电流补偿和坏点修复不是同一件事,但二者高度相关。

工程上可采用分层策略:

  1. 先做全局/局部暗电流补偿
  2. 再对残留异常亮点做热像素检测与修复

这样可以避免把大量正常暗漂移都交给坏点模块处理,导致误检率上升。

4.4.6 硬件实现与表项组织

常见硬件组织方式:

Temperature Sensor + Exposure Register + Gain Mode
                    |
                    v
             [Dark Model Selector]
                    |
                    v
          [Global / Tile / Pixel Template]
                    |
                    v
              [Scale by t_exp]
                    |
                    v
                 [Subtract]

实现层级通常有三种:

4.5 线性化处理与查找表设计

4.5.1 为什么要线性化

许多传感器并不是把光子数线性映射到数字码值。非线性可能来自:

而ISP后续很多模块默认“输入近似线性”:

因此,线性化的目标是求出一个逆映射,使输出尽可能与入射光能量成正比。

4.5.2 标定响应曲线

设传感器理想响应为 $L$,实际测得数字输出为 $D = f(L)$,则线性化需要近似求逆:

\[L \approx f^{-1}(D)\]

标定时一般在多组均匀照度下采样,得到一系列点 $(L_i, D_i)$,然后构建LUT或分段模型。

常见误差指标包括:

\[\epsilon_{lin} = \max_i \left| \frac{\hat{L}_i - L_i}{L_{FS}} \right|\]

其中 $L_{FS}$ 表示满量程信号。对高质量RAW链路,线性化残差通常希望低于0.5%到1% FS。

4.5.3 LUT设计方法

最常见的是1D LUT:

\[P_{lin} = LUT(P_{in})\]

若输入是12bit,则全精度LUT有4096项。为了节省面积,常用以下办法:

  1. 稀疏采样 + 线性插值
    • 例如256项或512项
    • 高码值区可更稀疏,低码值区更密集
  2. 分段线性模型 \(P_{lin} = a_k \cdot P_{in} + b_k,\quad P_{in}\in [T_k,T_{k+1})\)

  3. 对数/指数域压缩表
    • 适合传感器使用了companding的情况
  4. 模式相关LUT
    • 普通模式、DCG模式、HDR短中长曝光路径分别使用不同LUT

4.5.4 LUT插值精度与单调性

线性化LUT有两个容易被低估的工程问题。

问题1:插值误差

若相邻节点跨度过大,低码值区会出现响应误差,导致暗部统计不稳定。

问题2:单调性破坏

LUT若非严格单调,可能出现输入增大而输出不增的现象,严重影响排序、直方图和3A统计。

因此,LUT生成通常应满足:

\[LUT[i+1] \ge LUT[i]\]

必要时可对标定数据做单调回归(monotonic regression)或后处理修正。

4.5.5 线性化在HDR和DCG中的作用

对于双转换增益(DCG)或多曝光HDR,线性化不仅是“修正非线性”,还承担“统一信号域”的任务。

例如高增益路径和低增益路径输出分别为:

\[D_H = f_H(L), \qquad D_L = f_L(L)\]

经过线性化后:

\[L_H = f_H^{-1}(D_H), \qquad L_L = f_L^{-1}(D_L)\]

只有在统一到相同线性域后,两条路径才能无偏融合。

这也是为什么某些系统把黑电平、线性化和模式归一化视为一个联合模块,而不是三个孤立模块。

4.5.6 硬件实现与吞吐量

线性化LUT通常位于高吞吐路径中,因此要特别注意:

典型结构:

RAW_FPN
   |
   v
[LUT Address Generator] --> [LUT SRAM]
   |                           |
   +--------> [Interpolator] <-+
               |
               v
            RAW_Linear

4.6 PRNU(光响应非均匀性)校正

4.6.1 PRNU的定义

PRNU(Photo Response Non-Uniformity)描述的是在同一均匀光照下,不同像素输出响应存在稳定差异。它属于乘性误差,更准确地说:

\[P(x,y) = \alpha(x,y) \cdot S(x,y) + \beta(x,y) + n(x,y)\]

其中:

只有在充分去除偏移类误差后,PRNU才容易被准确测量和校正。

PRNU常以百分比表示:

\[PRNU = \frac{\sigma_{flat}}{\mu_{flat}} \times 100\%\]

这里 $\mu_{flat}$ 和 $\sigma_{flat}$ 是均匀照明下像素响应的均值和标准差。

4.6.2 平场标定与增益图生成

PRNU标定通常使用均匀光源(积分球或高均匀背光)拍摄平场图像。去除黑电平和暗电流后,可为每个像素或每个网格生成校正增益:

\[G_{prnu}(x,y,c) = \frac{\mu_c}{P_{flat}(x,y,c)}\]

校正时:

\[P_{prnu}(x,y,c) = P_{lin}(x,y,c) \cdot G_{prnu}(x,y,c)\]

为了避免单帧噪声污染,通常会对多帧平场图做平均:

\[P_{flat}(x,y,c) = \frac{1}{M}\sum_{k=1}^{M} P_k(x,y,c)\]

4.6.3 像素级、网格级与混合式PRNU

像素级PRNU

网格级PRNU

混合式PRNU

把低频不均匀性交给网格,高频残差交给小幅修正表,是高分辨率系统常见策略。

要注意:PRNU与第5章的Lens Shading在表面上都像“乘一个增益图”,但它们来源不同。

若标定流程控制不好,这两者很容易相互污染。

4.6.4 PRNU与Lens Shading的解耦

设观测平场为:

\[P_{flat}(x,y) = S_0 \cdot L(x,y) \cdot R(x,y)\]

其中:

如果直接把 $1/P_{flat}(x,y)$ 当作PRNU表,则实际上把镜头和传感器效应混在一起了。工业流程里常见三种解耦方法:

  1. 系统级接受混合校正
    • 让第4章和第5章的边界弱化
    • 对固定模组产品可行
  2. 更换传感器裸片或近轴光学条件单独标定传感器响应
    • 成本高,但可获得更纯净PRNU
  3. 用低阶光学模型拟合低频部分,剩余高频当作PRNU
    • 工程上最常见

也就是说,PRNU和Lens Shading的划分不仅是物理问题,更是产品校准分工问题。

4.6.5 乘法校正的噪声放大问题

PRNU校正本质是乘法,会放大噪声,尤其在低响应区域更明显。

若某处响应很低,增益接近 $G_{max}$,则:

\[\sigma_{out}^2 \approx G_{prnu}^2 \cdot \sigma_{in}^2\]

因此需要限制最大增益:

\[G_{prnu}(x,y,c) \le G_{clip}\]

典型做法:

4.6.6 硬件实现

RAW_Linear
   |
   v
[Grid / Pixel Gain Fetch]
   |
   v
[Interpolation]
   |
   v
[Multiplier + Rounding]
   |
   v
RAW_PRNU_Corrected

关键设计点:

4.7 传感器增益与偏移校准

4.7.1 为什么需要统一增益与偏移

除了前面提到的黑电平、FPN、PRNU,传感器还存在更宏观的模式差异:

因此,需要把不同工作模式统一映射到一个共同的工程域,方便后续算法和跨相机系统使用。

4.7.2 斜率-截距模型

最简单的归一化形式是仿射变换:

\[P_{norm} = a(m,c)\cdot P_{in} + b(m,c)\]

其中:

若系统已经完成BLC和线性化,则 $b$ 通常较小;但在多路径融合场景下,保留这个自由度有助于做精细对齐。

4.7.3 多增益档位校准

假设名义ISO从100切到400,理论上数字响应应放大4倍,但实际可能由于模拟链路误差变成3.82倍或4.11倍。若不修正:

标定时可在一组均匀照度下拟合每档位斜率:

\[a_k = \frac{\sum_i L_i \cdot D_{k,i}}{\sum_i D_{k,i}^2}\]

然后把档位 $k$ 归一化到参考档位。

4.7.4 双转换增益(DCG)路径对齐

对于DCG,常见情况是低亮度使用高转换增益路径,高亮度使用低转换增益路径。为了避免拼接或切换时台阶,需满足在重叠线性区:

\[a_H \cdot D_H + b_H \approx a_L \cdot D_L + b_L\]

可在重叠曝光区做最小二乘拟合:

\[\min_{a_H,b_H,a_L,b_L} \sum_i \left[(a_H D_{H,i}+b_H) - (a_L D_{L,i}+b_L)\right]^2\]

对HDR融合而言,这一步是后续权重计算可靠性的基础。

4.7.5 多摄像头系统的一致性

在环视、双目、三目和具身智能多相机系统中,增益与偏移校准还承担“跨相机一致性”任务。

若相机A和B看同一灰卡,但输出不同,则:

因此常用一层跨相机归一化:

\[P_i' = \gamma_i \cdot P_i + \eta_i\]

其中 $i$ 表示不同相机,$\gamma_i,\eta_i$ 由整机标定得到。

4.7.6 寄存器组织与参数管理

增益与偏移校准最大的工程难点不是公式,而是参数爆炸。参数维度可能同时依赖:

因此寄存器与NVM表项设计应遵循:

  1. 参数按模式分组,避免运行时交叉污染
  2. 支持影子加载和帧边界切换
  3. 支持回退到安全默认值
  4. 支持参数版本号和CRC校验

4.8 一条可落地的RAW校正流水线

综合本章内容,一个工程上稳健的RAW校正流程可写为:

\[\begin{aligned} P_1 &= \max(P_{raw} - B_c,\ 0) \\ P_2 &= \max(P_1 - D_{dark}(T,t_{exp},g_a),\ 0) \\ P_3 &= P_2 - O_{row}(x) - O_{col}(y) \\ P_4 &= f_m^{-1}(P_3) \\ P_5 &= P_4 \cdot G_{prnu}(x,y,c) \\ P_{out} &= a(m,c)\cdot P_5 + b(m,c) \end{aligned}\]

这里每一步都对应明确的物理含义:

对不同产品,步骤顺序和细节可以变化,但总体原则不变:先处理加性误差,再处理乘性误差,再做模式归一化。

本章小结

原始数据校正是ISP前端中最“底座化”的部分。它不直接创造“漂亮的画面”,但决定了后续所有图像与视觉算法是否建立在可信信号之上。

本章关键点如下:

  1. Black Level Correction 用于去除读出基线偏移,是一切后续处理的零点参考。
  2. FPN消除 针对稳定的空间结构噪声,尤其是列/行偏移条纹。
  3. 暗电流补偿 与温度、曝光时间强相关,在高温和长曝光场景中至关重要。
  4. 线性化处理 把传感器和ADC的非线性响应映射回统一线性域,是HDR、降噪和色彩处理的基础。
  5. PRNU校正 处理像素响应不一致,但必须注意与Lens Shading的边界和噪声放大问题。
  6. 增益与偏移校准 用于对齐不同模式、不同通路和多相机系统的整体响应。

关键工程原则:

练习题

基础题(帮助熟悉材料)

练习4.1 黑电平减法计算
某12bit传感器在RGGB四个平面的黑电平分别为:$B_R=64$,$B_{Gr}=60$,$B_{Gb}=62$,$B_B=68$。某个蓝色像素原始值为92。

  1. 该像素做BLC后的输出是多少?
  2. 若内部要求保留非负输出,是否需要裁剪?

Hint: 直接按对应颜色平面减去黑电平。

答案 该像素是蓝色平面,因此减去 $B_B=68$: $$P_{blc} = 92 - 68 = 24$$ 结果为24,大于0,因此不需要裁剪。

练习4.2 温度相关暗电流估算
已知25°C时暗电流为12 e-/s,温度每升高8°C翻倍。请计算73°C、曝光时间10ms时的平均暗电荷。

Hint: 先算温度相对25°C升高了多少个8°C。

答案 温升为 $73-25=48°C$,对应6个翻倍周期: $$I_{73} = 12 \cdot 2^6 = 768 \text{ e-/s}$$ 曝光时间10ms,即0.01s: $$Q_{dark} = 768 \times 0.01 = 7.68 \text{ e-}$$ 平均暗电荷约为7.68 e-。

练习4.3 列FPN校正
某暗场图像4列的列均值分别为[70, 74, 69, 75],全局均值为72。请给出每列的偏移校正量。

Hint: 列偏移可用列均值减全局均值。

答案 列偏移估计为: - 第1列:$70 - 72 = -2$ - 第2列:$74 - 72 = 2$ - 第3列:$69 - 72 = -3$ - 第4列:$75 - 72 = 3$ 若做校正,通常从每列像素中减去该偏移量,即: - 第1列减去-2,等价于加2 - 第2列减去2 - 第3列减去-3,等价于加3 - 第4列减去3

练习4.4 PRNU增益计算
某绿色平面平场标定后,全局均值为1000,某像素响应为920。请计算该像素的PRNU校正增益,并说明这是“增亮”还是“减亮”。

Hint: 增益等于均值除以该像素响应。

答案 校正增益为: $$G_{prnu} = \frac{1000}{920} \approx 1.087$$ 因为增益大于1,所以这是一次“增亮”校正。

挑战题(深度思考)

练习4.5 线性化LUT压缩设计
输入RAW为12bit,理想全精度线性化LUT需要4096项。现在只允许存储256项LUT,请设计一种兼顾低码值精度和硬件成本的方案,并说明为什么低码值区应分配更多节点。

Hint: 从噪声建模、暗部精度和插值误差三个角度思考。

答案 可采用“非均匀分段 + 线性插值”方案: 1. 在低码值区密集布点,例如前25%的码值范围分配50%以上节点 2. 中高码值区逐渐稀疏 3. 运行时通过区间查找和线性插值得到输出 原因: - 暗部码值小,任何少量误差都会带来较大的相对误差 - 黑电平、暗电流和噪声估计主要影响低码值区,低码值线性化误差会直接破坏后续统计 - 高频非线性往往也更集中在低码值附近 - 高码值区信噪比高、相对误差更容易容忍,可减少节点节省存储 硬件上只需一张256项LUT、一个地址生成器和一个线性插值器,代价远低于4096项全查表。

练习4.6 PRNU与Lens Shading边界划分
你在均匀光场下得到一个明显中心亮、边缘暗的增益图。请分析其中哪些成分可能属于PRNU,哪些更可能属于Lens Shading,并给出一种工程上可行的拆分办法。

Hint: 关注空间频率。

答案 分析思路: - 大尺度、缓慢变化、近似径向对称的部分,更可能来自Lens Shading - 高频、局部细碎、与像素/列结构相关的部分,更可能来自PRNU或读出链路不一致 工程拆分办法: 1. 先对增益图做低通拟合,例如径向多项式或粗网格拟合 2. 拟合得到的低频部分划入Lens Shading模块 3. 原始增益图除以低频拟合结果,剩余高频残差划入PRNU模块 4. 对PRNU残差设置幅度上限,避免噪声放大 这种“低频归光学、高频归传感器”的方法不是纯物理分解,但工程上高效且稳定。

练习4.7 多增益档位对齐
某传感器在同一均匀照度下,ISO100档输出均值为800,ISO400档输出均值为3050。理论上ISO400应是ISO100的4倍。

  1. 实际增益比是多少?
  2. 若要把ISO400归一化到理想4倍,应乘以多少修正系数?

Hint: 先求 $3050/800$,再与4比较。

答案 1. 实际增益比: $$r = \frac{3050}{800} = 3.8125$$ 2. 为了把ISO400映射到理想4倍域,需要乘以: $$k = \frac{4}{3.8125} \approx 1.0492$$ 也就是说,ISO400路径还需要约4.9%的额外增益修正。

练习4.8 车载高温场景的校正策略
为一颗车规摄像头设计RAW前端校正策略,工作温度范围为-40°C到125°C,要求在隧道出口和夏季暴晒后都保持响应稳定。请说明:

  1. 哪些参数必须随温度切换或插值
  2. 哪些参数更适合工厂静态标定
  3. 如何避免在线参数更新导致画面闪变

Hint: 区分“快速漂移”和“稳定结构误差”。

答案 建议策略: 1. 必须随温度切换或插值的参数: - 黑电平 - 暗电流模板或暗电流比例因子 - 某些模式下的残余偏移修正 2. 更适合工厂静态标定的参数: - 线性化LUT - 列/行FPN基础表 - PRNU增益图 - 多增益档位之间的基础对齐系数 3. 避免闪变的方法: - 参数使用影子寄存器,在帧边界统一生效 - 对在线估计量做时域平滑 - 设置参数变化上限,避免单帧跳变 - 当温度传感器异常或OB统计失真时回退到安全参数集 核心思想是:稳定结构误差靠工厂标定,温漂型误差靠有限速的在线补偿。

常见陷阱与错误 (Gotchas)

1. 把黑电平和暗电流混为一谈

问题:认为两者都属于“暗场偏移”,只做一个统一常数减法。
后果:长曝光、高温场景下补偿严重不足。
建议:把“静态基线偏移”和“随曝光积分的暗信号”拆开建模。

2. 在乘法校正之后再减黑电平

问题:先做PRNU或其他增益校正,再做BLC。
后果:黑偏置被不必要放大,暗部误差显著。
建议:遵循“先减法、后乘法”的基本顺序。

3. 在线列FPN估计被真实场景污染

问题:直接把列均值变化视为列偏移。
后果:垂直纹理被误消除,图像出现反向条纹。
建议:加入低纹理掩码、多帧平滑和最大修正幅度限制。

4. 线性化LUT不保证单调

问题:直接拟合实验数据,未处理测量噪声。
后果:输出出现局部非单调,破坏直方图和3A统计。
建议:对LUT生成过程增加单调性约束。

5. PRNU与Lens Shading重复补偿

问题:第4章和第5章都对同一低频空间不均匀性做了乘法校正。
后果:边缘过度增益,噪声被放大。
建议:明确标定分工,或在工具链中对两张增益图做联合审查。

6. 忽视模式切换一致性

问题:普通模式、HDR模式、DCG模式共用一套参数。
后果:切换时亮度台阶、噪声模型失配、融合错误。
建议:参数必须按模式建表,并通过帧同步切换。

7. 只看平均误差,不看最坏情况

问题:标定报告只给均值RMSE。
后果:少量极端列、热点或模式边界问题被掩盖。
建议:同时检查最大误差、百分位误差和空间热图。

最佳实践检查清单

建模与标定

硬件架构

参数管理

验证与系统联调