ISO_BASE 的物理含义、确定方法,以及为什么单目取 1 也能正常工作
一、ISO_BASE 在公式中的角色
在APEX系统中,具体可以参考APEX(The Additive System of Photographic Exposure)系统简介
SV 公式:
SV = log2(gs × gd / Q10² × (ISO_BASE / 3.125))它的本质是把"总增益"换算成"等效 ISO"再取 log2 挡位:
ISO_effective = ISO_BASE × (gs × gd / Q10²) SV = log2(ISO_effective / 3.125) = log2(ISO_effective) - log2(3.125)(APEX 标准里 SV = log2(ISO/3.125),3.125 = ISO 100 对应的归一化常数。)
所以ISO_BASE 的物理定义是:传感器模拟增益 = 1.0x、数字增益 = 1.0x 时,这套成像系统等效于标准摄影 ISO 的多少。它是一个标定常数,把"芯片内部的增益倍数"和"摄影学意义的 ISO"这两个刻度对齐。
二、原理上如何标定 ISO_BASE
ISO(如 ISO 12232 标准中的饱和感光度 ISO_S)的定义是:
ISO_S = 78 / H_sat其中 H_sat 是使传感器输出刚好饱和(满阱/满量程)所需的曝光量(lux·s)。因此标定流程是:
- 测饱和曝光量 H_sat:用已知照度 E 的均匀光源(积分球/标准灯箱),逐步增加曝光时间 t,找到像素刚好满量程(如 10-bit 下 1023)时的照度×时间,即 H_sat = E × t_sat。
- 算出增益 1.0x 时的基准 ISO:ISO_BASE = 78 / H_sat。例如某 sensor 满阱对应 H_sat = 1.2 lux·s,则 ISO_BASE = 78/1.2 = 65——这正是你脚本注释里 “base ISO 65 (calibrated)” 的来源。
- 验证:也可以用标准灰卡法(测 ISO_speed:在 f/2.0、1/50s 下拍 118% 反射率灰卡,调 ISO 使输出达到中灰目标值),两种方法结果应接近。
工程上更常见的简化做法:用 AE 目标亮度反推——在已知照度场景下,让画面收敛到目标灰度(如 18% 灰对应目标亮度),记录此时的 (t, gs, gd),代入 BV = TV + AV − SV 反解出使 BV 等于理论场景亮度值的 ISO_BASE。这就是"calibrated"的含义:它不是算出来的,是用一台已知照度的标定环境实测出来的。
三、为什么 ISO_BASE = 1 也能"正常工作"
关键在于ISO_BASE 在整张表的生成中只出现在 SV 里,而 SV 只通过 BV = TV + AV − SV 影响行序。逐项分析它的实际影响:
1. 它是一个常数偏移,不改变任何选择逻辑。
生成算法中所有决策量都是差值:
- BV 阶梯:
targets(k) = BV_MAX − 0.10×(k−1),起点 BV_MAX 本身就是用同一个 ISO_BASE 算出来的; - 步长窗口检查:
step = lastBV − BVc,ISO_BASE 在 lastBV 和 BVc 中同号出现,完全抵消; - 平台分配:
j = max{j : BRIGHT_j ≥ target},BRIGHT 和 target 都含同一个偏移; - 排序键(largest N / highest gs / |BV−tgt|):|BV−tgt| 中偏移同样抵消。
数学上:设 ISO_BASE 换成另一个值,相当于 SV 整体平移 Δ = log2(ISO_BASE_new/ISO_BASE_old),于是所有 BV 同时平移 −Δ。整张表选出的 (N, gs, gd) 序列逐行完全相同,只是注释里打印的 SV/BV 数值整体平移了 Δ 挡。
2. 表的"自洽性"保证它无害。
这张表是自参考的:AE 运行时测得场景 BV,查表选行。只要"测 BV 的公式"和"生成表的公式"用同一个 ISO_BASE,偏移就在两边抵消——场景亮度被映射到同一把尺子上。ISO_BASE=1 时,SV 的含义从"ISO 挡位"退化成"总增益挡位"(SV = log2(gain_total) + 常数),BV 的含义从"绝对场景亮度(ISO 100 等效)“退化成"相对场景亮度”。尺子刻度平移了,但刻度间的距离(0.1 stop 阶梯)和查表结果一点没变。
3. 什么时候 ISO_BASE 必须是真实标定值。
只有当 BV 需要跨系统对齐时才必须标定:
- 多摄/多模组一致性:两个模组的 ISO_BASE 不同,若各自用 1,同一场景算出的 BV 不同,切换摄像头时 AE 会跳变;
- 与外部对接:把 BV/ISO 上报给上层算法(人脸检测曝光建议、双摄融合、与 MTK/其他平台的 AE 参数移植)时,需要绝对 ISO 语义;
- EXIF 输出:照片 EXIF 里的 ISO 字段要写真实 ISO,必须用标定值换算;
- 跨镜头 AV 变化:如果不同表用不同光圈(如 f/2.2 预览 vs f/2.8 录像),AV 和 SV 的标定基准必须一致,否则两表 BV 无法衔接。
四、结论
- 原理上:ISO_BASE = 78/H_sat,通过测传感器增益 1.0x 时的饱和曝光量(或灰卡法)标定,它把芯片增益刻度对齐到摄影 ISO 刻度。
- 表生成时取 1 能工作:因为 ISO_BASE 只是 BV 的一个常数平移,而生成算法的所有判据(步长窗口、平台分配、排序)都是 BV 的差值,偏移全部抵消;且 AE 查表时用同一公式测 BV,自参考闭环使偏移在查表侧再次抵消。取 1 唯一的代价是注释里的 SV/BV 失去绝对 ISO 语义——表内相对关系和最终选出的参数完全不受影响。
- 建议:若这套表只服务于单模组自闭环 AE,ISO_BASE=1 足够;若涉及多模组切换、EXIF ISO 上报或跨平台移植,应按上述方法标定真实值(如 65),并保证生成表与运行时测 BV 使用同一值。