反转流程

每个像素都经历相同的逐通道处理链:八个阶段将原始扫描值转化为成品正片。理解每个阶段,就能明白每个滑块究竟在调什么。

1. 钳制与读取线性扫描值

流程从扫描仪输出的原始线性值开始 —— 这个数值与穿透胶片的光量成正比。在后续任何计算之前,数值先被钳制到有效范围;超出范围的数据会污染所有下游计算。

2. 去除片基

胶片的透明边缘并不是中性的 —— 它携带橙色片基。OpenEnlarge 对该橙色片基进行采样,再逐通道将其从每个像素中除去。这一步去掉了片基,仅保留图像的染料密度。参见片基校准

3. 转换为密度(对数域)

将片基值除以扫描值后取以 10 为底的对数,即可得到密度D = log₁₀(片基 / 扫描值)。密度被钳制为不小于零,因此透明胶片读数为 D = 0(无染料)。在对数域中工作意味着等量的密度差对应等量的摄影档(stop)——这是胶片的自然单位。参见密度与对数域

4. 缩放至色调曲线

在色调曲线施加之前,原始密度 D 会先乘以一个固定系数。在 Faithful 路径(即当前的活动路径)中,该系数为与帧无关的常数(FAITHFUL_SCALE = 1 / 0.700 ≈ 1.429),直接作用于 D,使整卷胶片的每一帧都采用相同的色调标尺,而与各帧的单独曝光无关。逐帧白点 d_max 的概念依然存在(它为曝光滑块提供中性起始点),但 Faithful 色调曲线并不对其进行归一化:t = D / d_max 的形式仅属于 Filmic 路径。缩放后,D = 0 仍对应片基 —— 场景中最深的阴影 —— 而充分曝光的密度则映射至曲线的白点。

5. 平衡

白平衡将中性点移位,使场景中的灰卡在正片中呈现为灰色。OpenEnlarge 提供两种模式:曲线后的 von-Kries 增益(将各通道除以白点采样值),或模拟放大机彩色头的「减色头」模式 —— 在色调曲线之前对各通道密度施加增益,对应光学放大机的色彩控制方式。参见色彩与白平衡

6. 色调曲线

色调曲线将归一化密度 t 映射为显示亮度。Faithful 曲线采用固定比例的密度-亮度变换,伽马 ≈ 1.590,膝点 ≈ 0.892 以上渐近肩部,且采用与帧无关的密度比例,使整卷胶片的色调保持一致。参见色调曲线

7. 风格层

一条平缓的归一化 tanh S 形曲线增强中调对比度,并对高光部分进行柔和压缩,不产生过曝截断。风格层锚定在 0 → 0 和 1 → 1,因此不会移动黑点或白点 —— 仅重塑中间调。Faithful SDR 输出的强度固定为 2.0。

8. 显示编码

结果是一个 0–1 范围内的线性光值,可直接输出至屏幕。最终钳制去除超出色域的溢出值,随后将数值交由显示系统处理。流程中不额外应用伽马编码 —— 系统色彩栈会负责处理。

Scan linear ÷ Base ÷ orange mask log D density domain ÷ d_max normalize t Balance WB / color head Tone gamma+shoulder Look S-curve Display clamp → screen
从左至右的八阶段反转链。每个像素的每个通道都按顺序经过所有阶段。
深入原理

密度公式为 D = log₁₀(片基 / 扫描值),钳制为 ≥ 0;一个密度单位约等于 3.32 摄影档。白点归一化为 t = D / d_max,其中 d_max 为帧内各通道的最大密度值。Faithful 色调曲线使用固定密度比例 FAITHFUL_SCALE = 1 / 0.700 ≈ 1.429:该比例在曲线前施加于原始密度,使其与帧无关 —— 整卷胶片每一帧的色调完全一致。伽马 ≈ 1.590,膝点 ≈ 0.892 以上渐近肩部。风格 S 形曲线为强度 2.0 的归一化 tanh,锚定 0 → 0 和 1 → 1。曝光为以黑点为支点的对数域乘法(每单位约 1 档/EV)。CPU 路径与 GPU(Metal)路径执行完全相同的数学运算,因此应用内的实时预览与导出文件精确一致。

下一篇:密度与对数域 →

OpenEnlarge —— 开源胶片扫描编辑器 · MIT 许可