密度与对数空间
胶片对光的响应不是线性的,而是对数式的。正因如此,光学密度而非原始亮度才是胶片反转的自然域:等量的密度差对应等量的摄影档(stop),OpenEnlarge 中的每一个滑块都在这个空间内工作。
光学密度
密度衡量的是胶片层对光的阻挡程度。让光穿过胶片,若只有十分之一到达另一侧,则该层的透过率为 0.1。比尔–朗伯定律将透过率与密度联系起来:
T = 10−D
密度 D = 1 的胶片透过率恰好为 T = 0.1(入射光的十分之一);D = 2 时为 T = 0.01。每增加一个整数密度单位,阻光量就增大十倍 —— 这种十倍关系与对数自然对应。OpenEnlarge 直接从扫描值计算密度:
D = log₁₀(片基 / 扫描值)
其中 片基 为从透明胶片边缘采样的像素值,扫描值 为各点的原始值。相除消除橙色片基;取对数将结果转化为密度,并钳制为不小于零,使透明胶片读数为 D = 0。
什么是「摄影档」?
摄影档(stop)是光量的加倍或减半:多一档即光子数量翻倍。在密度尺度上,每一档对应固定的增量 log₁₀(2) ≈ 0.301。反过来说,一个密度单位涵盖 1 / 0.301 ≈ 3.32 档。
这正是密度域适合图像编辑的原因。在原始线性光中,暗部与高光覆盖的数值范围天差地别 —— 亮区同样一档的变化数值极大,而暗区却极小。在密度空间中,每一档的大小处处相同。等量的滑块移动在整个影调范围内带来等量的感知变化。
白点(d_max)
负片中密度最大的点对应场景中最亮的部分——或胶片边缘完全未曝光的片头。OpenEnlarge 将此密度值称为 d_max。它按通道从待显影的胶片中求取,并锚定归一化步骤:
t = D / d_max
经此除法后,t = 0 对应负片最薄处(场景最深阴影),t = 1 对应负片最厚处(纸基白)。在当前的 Faithful 路径中,色调曲线直接作用于经固定系数缩放的原始密度 D(参见色调曲线页面),而非作用于逐帧的 t;平衡与风格层则作用于色调曲线的输出。参见确定白点,了解如何正确设置 d_max。
深入原理
密度公式为 D = log₁₀(片基 / 扫描值),钳制为 ≥ 0;片基 从透明胶片边缘采样,扫描值 为原始像素值。一个密度单位约等于 3.32 摄影档(因为 log₁₀(2) ≈ 0.301,1 / 0.301 ≈ 3.32)。白点归一化为 t = D / d_max,其中 d_max 为各通道负片的最大密度值。OpenEnlarge 中的曝光是以黑点为支点的对数域乘法 —— 在 Faithful 模式下,曝光滑块每移动一单位约对应 1 档/EV。