主题
线性光与伽马:图形处理为什么在线性空间做
这一页解决一个具体困惑:为什么同一张图,在不同软件里缩放、模糊、混色的结果会不一样。 答案通常是同一个 —— 它们在不同的空间里做了运算。
本页按三段式走:先把两个"亮度"分清(概念)→ 再学会判断与设置(会用)→ 最后把"为什么会偏"推导出来(原理)。
📌 本页在"色彩管线"上的位置:本页负责运算空间这一环(为什么处理要在线性光下做)。 灰阶与 EOTF 见 灰阶与 EOTF; 管线全图与可补性矩阵见 偏色与补偿。
一、概念:两个"亮度"不是一回事
| 概念 | 含义 |
|---|---|
| 编码值(图像文件里的 0–255) | 为了存储与传输做了非线性变换的值 |
| 线性光(实际光强比例) | 物理上的光强,翻倍就是真的翻倍 |
两者之间是一次幂函数关系(指数即通常说的伽马)。加这个变换,是为了让有限位深在暗部更省、更精细 —— 因为人眼对暗部的差别更敏感(见 人眼视觉基础)。
⚠️ 关键后果:编码值上的"中灰"不是光强的"一半"。所以直接在编码值上做算术,结果会偏。
传递函数在链路两端各管一段(术语容易混,先分清):
内容编码 编码侧把光转成电信号存储 —— 光 → 电(OETF 类)
↓
线性光 合成与处理应在此进行
↓
显示端 把电信号还原成光 —— 电 → 光(EOTF / PQ / HLG)- 编码侧负责"用有限码位尽量装下感知上重要的信息";
- 显示端负责"把码值还原成应有的光",也就是通常说的 EOTF 与灰阶跟踪;
- 本页关心的是中间那层:处理链有没有在正确的空间里算。
二、会用(一):怎么判断"这段在错的空间里算"
| 运算 | 在编码值上做 | 正确做法(线性光下) | 实际表现 |
|---|---|---|---|
| 缩放 / 重采样 | 边缘变暗或发亮 | 先转线性再缩放 | 细线条缩放后"变细"或发灰 |
| 模糊 | 亮部扩散不足、暗部过度 | 线性下混合 | 光晕与过渡不自然 |
| 抗锯齿 | 边缘偏暗("黑边感") | 线性下加权 | 文字与斜边显脏 |
| 半透明混色 | 混合结果偏暗 | 线性下混合 | 玻璃与烟雾类效果失真 |
| HDR 合成 | 高光滚降不自然 | 线性下合成再映射 | 高光层次丢失 |
四类可以自己做的验证(用内容去问链路的"空间问题"):
① 细线 / 单像素线条:缩放或缩放后再看,是否"变细、发灰、断裂"
—— 空间错误最先在线条类内容上暴露
② 黑白渐变:看台阶分布是否与预期一致(错的空间+映射会重排台阶)
③ 半透明叠加:玻璃 / 烟雾 / 粒子效果,看是否整体偏暗
④ HDR 高光滚降:太阳、灯泡、金属反射,看高光是否"糊成一片"✅ 一句话:只要涉及"两个光强的加权平均",就应该在线性空间做。 伽马空间的算术会系统性地压暗亮部的权重(推导见第五节)。
⚠️ 这类问题的特征:不是"偏色",而是亮度的分配不对 —— 判据上表现为渐变台阶、边缘发脏、暗部细节丢失(见 色深与量化)。
三、会用(二):设置清单(按环节)
| 环节 | 该确认什么 | 常见错误 |
|---|---|---|
| 内容 / 制作侧 | 内容标称的空间(sRGB / BT.709 / P3 / HDR 格式) | 把广色域素材当 sRGB 处理 |
| 系统 / 软件 | 是否启用色彩管理;缩放与合成在哪个空间做 | 关掉色彩管理后仍按"颜色准"评价 |
| 显卡 / 播放器 | 输出范围(有限 / 全)、缩放方式、是否二次处理 | 双重缩放导致锐度与台阶变化 |
| 显示器 | 色域模式、伽马 / EOTF 设定、增强项是否在动 | 用"增强"去补内容侧的错误 |
| 链路 | 色度抽样、色深、是否 DSC | 抽样被降到 4:2:0 而不知情 |
两条顺序原则:
① 先修"解释",再修"显示" —— 内容标称的空间与显示器色域模式要匹配,
否则后面所有调参都在补偿一个错的起点
② 伽马 / EOTF 的选择以标准与制作环境的规定为准(口径见 [灰阶与 EOTF](grayscale-and-eotf.md),
数值出处见 [标准值总表](standards-values.md))—— 不要用"看起来更亮"来选四、会用(三):什么时候"改运算空间"才是正解
| 现象 | 该不该动运算空间 |
|---|---|
| 缩放到非整数倍后细线变细、发灰 | ✅ 多半是缩放器的空间问题 |
| 模糊 / 景深过渡生硬、发白 | ✅ 合成空间问题 |
| 半透明叠加整体偏暗 | ✅ 混合空间问题 |
| 整体色偏、白点不对 | ❌ 属白点与映射问题(见 白点与色温) |
| 暗部台阶 | ⚠️ 可能是位深/LUT/映射,也可能是空间(见第六节) |
| 亮度不够、对比不足 | ❌ 属亮度与背光层(见 背光与调光) |
⚠️ 误诊代价:把"空间问题"当"色准问题"去调白点,会把本来正确的颜色调偏; 把"色准问题"当"空间问题",会去改缩放与合成,问题却一点没动。
五、原理:为什么会偏(可推导)
① 为什么要加伽马:把码位按"感知"分配
若码值线性对应光强:暗部很多码位对应人眼几乎分不出的差别 → 浪费
伽马编码后:暗部每个码值对应的光强差更小 → 同样的位深,感知上更均匀所以伽马不是"为了好看",而是在有限位深下提高感知效率的工程选择。
② 推导:为什么在编码值上取平均会偏
取两个极端值:0(黑)与满值(白)
在线性光下取中点 → 光强应为 50%
把它换算回编码值(按常见 2.2 关系)→ 约 0.73 满值,而不是 0.5 满值
反过来:编码值取中点(0.5 满值)→ 对应的光强明显低于 50%结论:编码值上的算术,等于给暗部加权(暗部在编码轴上占的"长度"更多)。 所以凡是要做加权平均的操作(缩放、模糊、抗锯齿、半透明混合、HDR 合成), 都该先转到线性光再算、算完再转回去。
③ 为什么显示端要用"反向"的传递函数
| 环节 | 方向 | 作用 |
|---|---|---|
| 编码侧 | 光 → 电 | 用有限码位装下感知上重要的层次 |
| 显示端 | 电 → 光 | 还原成应有的光;决定灰阶跟踪是否准确 |
| HDR | 电 → 光(PQ / HLG) | 需要覆盖更大动态范围,用不同的映射思路 |
④ 为什么"黑位增强 / 对比度增强"会破坏伽马
这类功能改的是映射链(把某段灰阶重新分配),并不增加面板能力 —— 结果是灰阶跟踪相对目标曲线偏移:暗部被抬亮、层次被压缩,与校准时的曲线不一致。
六、判据与验收要记录的条件
| 必记 | 为什么 |
|---|---|
| 缩放方式与倍率 | 整数倍与非整数倍的算法不同 |
| 处理链所在的空间 | 决定边缘与过渡的表现 |
| 内容标称的空间与传递函数 | 与显示端是否匹配 |
| 显示端传递函数与模式 | EOTF 决定最终光输出 |
| 位深与链路抽样 / 压缩 | 台阶与量化的另一条来源 |
| 是否启用 HDR 合成 | 混合空间不一致会放大问题 |
七、常见误区
| 误区 | 事实 |
|---|---|
| 伽马只是"亮度曲线",调调就行 | 它决定运算空间,影响缩放与合成结果 |
| 位深够高就不会有台阶 | 台阶也可能来自运算空间与映射链 |
| 只有显示器是可调环节 | 播放器、缩放器、合成与系统级色彩管理都在链上 |
| 线性光只与 HDR 有关 | SDR 的缩放、半透明混合同样受影响 |
| "看起来更亮"就是伽马选对了 | 显示端传递函数要与内容标称、制作环境匹配 |
| 开了增强再校准也一样 | 增强改的是映射链,会与校准结果互相抵消 |
📋 判据接口:本页属色彩与视觉类 —— 依此页结论做判定时,除通用条件外还必须附带 判据字段集 · 色彩与视觉类 所列字段(共 7 项):这个"颜色对不上"是偏差、是范围,还是观察条件? 缺任一项,结论不可复核,只能作降级表述。
关键概念速查
通用术语见 统一速查(由统计生成,只在一处维护)。
| 术语 | 含义 |
|---|---|
| 编码值 / 线性光 | 文件里的数值 / 物理光强,两者是幂函数关系 |
| 线性空间运算 | 加权平均类操作应在光强比例下做 |
| 编码侧传递函数 | 光 → 电,把感知层次装进有限码位 |
| 显示端传递函数 | 电 → 光,决定灰阶跟踪与最终光输出 |
| EOTF / PQ / HLG | 显示端的几类"电 → 光"映射思路 |
相关文档
灰阶与 EOTF —— 显示端那一半的口径与判据
色深与量化 —— 台阶的另一条来源
色彩深度与色彩管理 —— 位深与色彩管理实践
图像处理引擎 —— ② 处理层轴心:处理链在哪一步动画面
结论登记表 —— 本页核心结论编号:C-010
数据来源:本页内容整理自公开标准规范、厂商公开资料与行业通用实践,仅供参考;具体以官方规范原文与厂商官方资料为准。