多目系统切换亮度平滑:基于标定 iso_base 与真实光圈的 BV 统一尺子方法
核心问题:多目系统中各模组 sensor 灵敏度、镜头光圈(F 数)不同,各自生成的曝光表(pline)中 BV 是否代表同一亮度?如何利用逐模组标定的 iso_base 和真实 F 数,使切换时直接按 BV 索引即可实现亮度平滑过渡?
结论:是的,只要 iso_base 按"整模组 + 真实 F 数"逐款标定,各曝光表中的 BV 就代表同一把"场景亮度尺子",相同 BV 对应相同亮度,切换时直接按 BV 索引即可实现亮度平稳过渡。但有几个前提条件和误差来源需要注意。
一、原理:为什么标定后各表的 BV 是同一把尺子
APEX 曝光方程:
Av + Tv = Bv + Sv其中Bv 的物理含义就是"场景亮度",它是与相机参数无关的客观量。
对同一个物理场景(同一亮度、同一色温),两台参数不同的相机:
- 模组 A:
Bv = Tv_A + Av_A − Sv_A - 模组 B:
Bv = Tv_B + Av_B − Sv_B
虽然三者的 (Tv, Av, Sv) 各不相同(灵敏度低的 sensor 需要更大的 Sv,小光圈镜头需要更长的 Tv),但只要 Sv 和 Av 都准确,算出来的 Bv 必然相等。反过来说,两张曝光表中相同 BV 值的那一行,对应的场景亮度是同一个——只是达到该亮度所用的 (t, gain) 组合不同。
这就是多目切换的理论基础:切换时从旧 sensor 读出当前 BV,直接用这个 BV 去索引新 sensor 曝光表中 BV 最接近的那一行,两路画面亮度就一致,无需重新收敛。
二、标定要求(使 BV 尺子成立的前提条件)
2.1 iso_base 标定必须覆盖整个模组(sensor + 镜头)
Sv = log2(gain_total × iso_base / 3.125),iso_base 标定的本质是让"标称 ISO"等于"模组的等效感光度"。- 标定时若用带镜头的整模组对着标准光源/灰卡标定,镜头透过率(T 值与 F 值的差异,不同镀膜可差 5%~15%)就被吸收进 iso_base 了。
- 若只标 sensor 不带镜头,则镜头透过率差异没有被吸收,而 Av 只按 F 数计算(Av = log2(F²)),不反映 T 值——这时两模组的 BV 会有
log2(T_A/T_B)的固定偏差。
标定流程建议:
1. 整模组(sensor + 镜头 + IR-cut)对标准亮度场景(如标准灰卡 + 标准光源照度); 2. 固定一组 (t, gain),实测输出 luma; 3. 反推 iso_base = 使 luma 等于目标亮度所需的标称 ISO; 4. 多个 (t, gain) 组合重复验证线性度。2.2 每款镜头的 Av 必须用真实 F 数
- 生成各模组曝光表时,Av 必须换成各自镜头的实际光圈值:
- F/1.8 → Av = log2(1.8²) ≈ 1.70
- F/2.4 → Av = log2(2.4²) ≈ 2.26
- F/2.8 → Av = log2(2.8²) ≈ 2.97
- 如果所有表都用同一个写死的 Av,BV 就不对应同一亮度了。
2.3 iso_base 标定精度
- 标定误差 ±5% 对应约 ±0.07 stop 的 BV 偏差,通常可接受,但要在产线标定中控制住。
三、仍然会残留的差异(无法被 iso_base 完全消除)
- 光谱响应差异:ISO(iso_base)是按标准光源标定的(ISO 12232 通常用标准 illuminant)。不同 sensor 的光谱响应、IR-cut 滤光片截止特性不同,在非标定光源下(如暖光 LED、含近红外的场景)等效感光度会偏离标定值,导致 BV 出现随光源光谱变化的偏差。这是多目切换时白平衡也要做映射的同一个根源。
- 表本身的离散化:BV 目标网格是 0.1 stop,且离散的 (N, gs, gd) 格点不能精确命中每个目标。但每行记录的 BV 是实际计算值,所以按 BV 索引时用的是真实值,不受网格量化影响——只是两表中"最接近的行"可能相差零点零几 stop。
- 统计路径差异:运行时 AE 测量当前 BV 通常用
BV_meas = Tv + Av − Sv + log2(luma_meas / luma_target)之类的映射,luma 统计的定义(ROI、加权、Y 通道计算方式)必须在两个 sensor 上保持一致,否则测量出的 BV 本身就不可比。
四、切换实现流程(按 BV 索引)
1. 产线/出厂标定: 每模组 i 标定 iso_base_i (整模组) 和 F_i (真实光圈), 生成各自曝光表, 表中每行记录实际计算的 BV。 2. 运行时切换 (模组 A -> 模组 B): a. 读模组 A 当前收敛行: BV_cur (或由 t/gain 现算 BV = Tv + Av_A − Sv_A); b. 在模组 B 曝光表中找 BV 最接近 BV_cur 的行; c. 把该行的 (t, a_gain, d_gain) 直接写入模组 B 并置更新标志下发; d. 等 2~3 帧让 exp/a_gain 隔帧生效后, 再切换显示通路; e. 后续由模组 B 自己的 AE 闭环做微小修正 (限步长, 防修正过冲)。 3. 不查表时的等价连续换算: EV_new = EV_old × (iso_base_A / iso_base_B) × (F_B² / F_A²) (iso_base 为整模组标定时, F² 项已被吸收, 去掉) 再按模组 B 的约束四段式分解 (时间→模拟增益→数字增益)。两种方式物理上同源:查表法用离散 BV 网格索引,连续换算法用公式直接折算,标定项一致。
五、验证方法
把两个模组同时对着同一均匀光源(灰板充满视场),各自跑 AE 收敛后读出各自收敛行的 BV:
- 若两者 BV 差 < 0.1 stop → iso_base 标定良好,可直接按 BV 索引切换;
- 若存在固定偏差→ 检查是否漏了镜头透过率(整模组重标 iso_base)或 Av 用错;
- 若偏差随光源色温变化→ 光谱响应差异所致,切换时需按色温对 BV 做小幅补偿,或接受该偏差并靠切换后的限步长收敛消除。
六、总结
只要 iso_base 是按"整模组 + 真实 F 数"逐款标定的,各曝光表中的 BV 就代表同一把"场景亮度尺子",相同 BV 对应相同亮度,多目切换时直接按 BV 索引即可实现亮度平稳过渡;残留的只有光谱响应差异带来的、随光源变化的小偏差,可由切换后限步长收敛消除。