单帧 —— 高级面板

「单帧」标签页的高级面板是在「基础」面板完成整体曝光与平衡设置之后,进行精确色调与色彩工作的场所。它包含三个部分:色调曲线编辑器(主曲线与逐通道点控曲线,以及参数化区域滑块)、颜色分级色轮(三向色轮与全局色轮),以及颜色混合器(八段色相频段 × 色相/饱和度/明亮度)和点颜色定位。本页逐一描述每个控件、它写入的参数,以及背后的引擎数学原理。

OpenEnlarge 单帧标签页高级面板,展示色调曲线编辑器、颜色分级色轮和颜色混合器部分
「单帧」标签页高级面板 —— 色调曲线、颜色分级和颜色混合器,各部分均可折叠。

色调曲线编辑器

色调曲线部分(字段组以 tc_* 为前缀)提供一个点控曲线编辑器和四个参数化区域滑块。两者共同合成单一的逐通道色调查找表,该查找表在「基础」色调控件和 OKLab 饱和度之后、颜色分级之前施加。

编辑器顶部的通道选择器是一排四个彩色圆点:主通道(浅灰色,tc_curve)、红色(tc_red)、绿色(tc_green)和蓝色(tc_blue)。点击某个圆点即切换到对应的可视与可编辑曲线。在主通道模式下,背景直方图显示三个通道;切换到 R、G 或 B 后,仅显示该通道的直方图。曲线上的控制点可拖动,拖动时编辑器显示输入/输出读数。四条曲线初始均为对角恒等线(0→0, 1→1),点击色调曲线「重置」按钮后恢复该恒等状态。

曲线编辑器下方有四个参数化区域滑块,无需手动放置控制点即可提亮或压暗特定的影调区间:

  • 高光 —— 色调范围最亮的四分之一,在显示空间中心位于约 0.875。字段:tc_highlights
  • 亮部 —— 中上四分之一,中心约 0.625。字段:tc_lights
  • 暗部 —— 中下四分之一,中心约 0.375。字段:tc_darks
  • 阴影 —— 最暗的四分之一,中心约 0.125。字段:tc_shadows

四个区域滑块均为 −100 至 +100(0 = 无效果)。它们在信号链中先于点控曲线起作用。色调曲线查找表的完整流程为:参数化区域 → 主点控曲线 → 逐通道点控曲线。合成后的查找表在 OKLab 饱和度之后于修整过程中逐像素施加。Faithful 反转曲线在整体流程中的位置,详见 色调曲线

深入原理

参数化区域数学(finish.rs):每个区域滑块值(从 −100..100 预缩放至 −1..1 单位)以抛物线隆起的形式施加到输入色调值 v

v += region_value · REGION_GAIN · max(0, 1 − ((v − center) / REGION_WIDTH)²)

常量:REGION_GAIN = 0.25REGION_WIDTH = 0.22,四个中心点为 REGION_CENTERS = [0.125, 0.375, 0.625, 0.875],分别对应 [阴影、暗部、亮部、高光]。抛物线隆起具有有限支撑(在中心点 ±REGION_WIDTH 之外为零),因此每个滑块只影响自身所在区间,几乎不影响相邻区间。

与「基础」面板的重要区别:「基础」面板的高光和阴影控件使用 smoothstep 架型权重(v += hl · 0.18 · smoothstep(0.5, 1.0, v)),在极端处最强,且跨越整个半段色调范围。参数化区域滑块使用以四个特定色调位置为中心的窄抛物线隆起——两者在本质上是不同的区域选择方式。「基础」控件与参数化区域独立作用,以叠加方式合成。

合成查找表:tone_luts() 构建大小为 256 的三张查找表。对每个输入索引 x:依次施加四个参数化隆起 → 查找主曲线 → 查找逐通道曲线。所得三张查找表(R、G、B)在修整过程(OKLab 饱和度步骤之后)逐像素采样。

颜色分级

颜色分级部分为图像各影调区间的色调渲染与亮度调整提供 HSL 色轮。它在色调曲线查找表之后、颜色混合器之前施加。

顶部的模式选择器提供五种视图:三向(同时显示三个色轮——左下阴影、居中放大的中间调、右下高光),以及单独的阴影中间调高光全局视图(各显示一个放大色轮)。切换模式不改变任何参数,仅控制哪些色轮同时可见。

每个色轮编码三个值:色相(色轮上的角度,0–360°)、饱和度(距中心的距离,0–100)和明亮度(亮度增减,−100 至 +100)。各区间参数为:

  • 阴影cg_sh_huecg_sh_satcg_sh_lum
  • 中间调cg_mid_huecg_mid_satcg_mid_lum
  • 高光cg_hi_huecg_hi_satcg_hi_lum
  • 全局cg_glob_huecg_glob_satcg_glob_lum

在任意色轮上将圆点从中心拖开,即向该色相方向添加色度偏移;明亮度高于或低于零时,该区间的亮度随之升高或降低。全局色轮对所有色调同时生效,不受亮度蒙版限制。

色轮下方有两个控制区间融合方式的滑块:

  • 混合 —— cg_blending,范围 0–100,默认 50。值越高,区间蒙版重叠越多,阴影与高光之间的色彩推移呈渐变过渡而非硬切。值越低,区间分离越明显。
  • 平衡 —— cg_balance,范围 −100 至 +100,默认 0。移动阴影与高光之间的交界点:负值将交界向阴影方向移动(扩大高光区间),正值将交界向高光方向移动(扩大阴影区间)。
深入原理

色度偏移:每个色轮的色相与饱和度值通过 wheel_offset(hue, sat) 转换为零亮度 RGB 推移:计算该角度对应的纯色相 RGB,减去其亮度,再乘以 CG_COLOR_GAIN = 0.5。这产生不改变亮度的纯色度推移。逐区间明亮度滑块则单独乘以 CG_LUM_GAIN = 0.3 进行缩放。

区间蒙版:像素的亮度(l = 0.2126·R + 0.7152·G + 0.0722·B)被测量,并用于计算三个 smoothstep 权重:w_sh = 1 − smoothstep(sh_edge − softness, sh_edge + softness, l)w_hi = smoothstep(hi_edge − softness, hi_edge + softness, l)w_mid = clamp(1 − w_sh − w_hi, 0, 1)。柔和度为 softness = 0.1 + 0.3 · blending(默认 blending = 0.5 时:softness = 0.25)。区间边界:sh_edge = 0.33 + balance · 0.25hi_edge = 0.66 + balance · 0.25,均从 −100..100 滑块范围预缩放至 −1..1。

施加:每个通道的输出为 rgb[c] + w_sh·(sh_off[c] + sh_lum) + w_mid·(mid_off[c] + mid_lum) + w_hi·(hi_off[c] + hi_lum) + (glob_off[c] + glob_lum)。全局项始终以完全权重叠加(无蒙版)。感知设计原理详见 色彩与白平衡

颜色混合器

颜色混合器部分包含两个标签页:混合器(八段 HSL 混合器)和点颜色(采样驱动的定向调整)。「重置」按钮仅重置当前激活的标签页。

混合器标签页将色相圆分为八个命名频段:红色、橙色、黄色、绿色、青色、蓝色、紫色和洋红色。这些对应 API 中的 CM_BANDS 常量:["red","orange","yellow","green","aqua","blue","purple","magenta"]。频段参数命名为 cm_{频段}_{hue|sat|lum}。四种视图模式允许逐属性调整(色相、饱和度、明亮度)或同时调整全部三项(全部):

  • 色相 —— 偏移该频段内像素的色相。正值使色相顺时针旋转,负值逆时针旋转。最大偏移量为 ±30°(常量 CM_HUE_SHIFT_MAX = 30.0)。
  • 饱和度 —— 对该频段内像素的饱和度进行乘法调整。正值使色彩更鲜艳,负值使其去饱和。接近中性的像素(饱和度约低于 0.05–0.20)受到门控,效果被减弱,以防止噪点放大。
  • 明亮度 —— 偏移该频段内像素的亮度。在滑块极值处,最大提升或压暗由 CM_LUM_GAIN = 0.25 缩放,范围适中。

所有混合器滑块均为 −100 至 +100,0 为恒等。频段效果随像素色相偏离频段中心而平滑消减,使用半宽为 CM_FALLOFF_DEG = 50° 的余弦衰减。相邻频段互有重叠,不存在硬性色相边界。

点颜色标签页提供采样驱动的定向调整:点击拾取颜色吸管激活视口中的十字准星,再点击任意像素对其采样,其色相、饱和度和亮度以色样形式记录。最多可同时存在八个色样,存储为 pc_samples 数组。选中某个色样后,将显示五个滑块:

  • 色相偏移hue_shift)—— 旋转匹配像素的色相,在极值处最大 ±30°。
  • 饱和度偏移sat_shift)—— 在与混合器「饱和度」相同的 −100..100 范围内对饱和度进行乘法调整,但不施加混合器的近中性饱和度门控,因此直接作用于所选像素。
  • 明亮度偏移lum_shift)—— 提升或降低亮度,由 CM_LUM_GAIN = 0.25 缩放。
  • 扩散variance,−100 至 +100,默认 0)—— 扩大或收窄用于匹配像素与色样的饱和度与亮度容差。正值接受与采样值相差较大的像素;负值将接受范围收窄至非常接近采样值的像素。
  • 范围range,0–100,默认 50)—— 控制选择范围的色相角半宽。默认值(50)时半宽约为 32.5°;最大值(100)时达 60°;最小值(0)时收窄至 5°。

多个色样彼此独立、顺序无关:每个色样从未经修改的输入像素计算权重,所有偏移量累加后一次施加。移除某个色样(点击其 × 标记)立即去除其效果。颜色混合器与点颜色依次作用:混合器先对所有像素按频段调整,点颜色再对混合器输出进行处理。两者均在颜色分级之后运行。色彩流程的整体背景详见 色彩与白平衡

深入原理

频段权重(finish.rs):对于八个频段中的每一个,色相为 h 的像素权重为 w = 0.5 · (1 + cos(π · |wrap180(h − center)| / CM_FALLOFF_DEG))(当角距小于 50° 时),否则为 0。频段中心(度数):红色 = 0、橙色 = 30、黄色 = 60、绿色 = 120、青色 = 180、蓝色 = 240、紫色 = 280、洋红色 = 320。

混合器施加:色相偏移和饱和度调整均乘以饱和度门控 gate = smoothstep(CM_SAT_GATE_LO, CM_SAT_GATE_HI, s)CM_SAT_GATE_LO = 0.05CM_SAT_GATE_HI = 0.20),保护接近中性的像素不受色相偏移噪声影响。明亮度偏移不受门控。饱和度为乘法调整:s_out = s · (1 + weighted_sat_factor)

点颜色权重:位于 (hue_t, sat_t, lum_t) 的色样与色相为 (h, s, l) 的像素通过三个独立权重匹配:色相权重使用相同的余弦衰减,半宽由范围推导 hw = PC_RANGE_MIN_DEG + (range/100) · (PC_RANGE_MAX_DEG − PC_RANGE_MIN_DEG),其中 PC_RANGE_MIN_DEG = 5.0°PC_RANGE_MAX_DEG = 60.0°;饱和度权重 ws = clamp(1 − |s − sat_t| / pc_tol(0.25, variance), 0, 1);明亮度权重 wl = clamp(1 − |l − lum_t| / pc_tol(0.25, variance), 0, 1)。容差函数为 pc_tol(base, variance) = max(0.02, base · (1 + (variance/100) · 2.0))。综合权重为 w = wh · ws · wl

下一篇:裁剪与除尘 →

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