NSDT工具推荐Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包

对于任何认真从事色彩工作或电影和电视母带处理的人来说,掌握Gamma编码是一项重要的知识,但它也可能是最令人困惑的主题之一,因为我们人类的视力与大多数电子设备的工作方式截然不同。 Gamma编码和传递函数的全部工作都是基于向我们的人眼提供图像,该图像针对我们如何看待世界而不是计算机如何看待世界进行了优化。

1、Luma

了解Gamma的第一步是理解术语Luma以及它与数字图像世界的关系。 当我们谈论亮度(luminance)信息时,我们谈论的是场景在去除颜色后的亮度值。 当这个场景通过胶片或数字图像捕捉时,它被称为Luma。

左:具有亮度和颜色(色度)值的彩色图像 右:仅显示亮度数据的同一图像

2、Gamma

当我们谈论Gamma时,指的是如何映射位于黑色和白色之间的亮度值。 Gamma定义了我们如何处理这些中间色调值。 这最终也会对颜色产生影响,但颜色不是这里的主要目标。 在电视和电影领域,Gamma配置文件根据其传输位置而变化。 例如,计算机屏幕具有与电视不同的Gamma配置文件,数字电影投影仪也使用不同的Gama配置文件。 因此,了解你的内容将在哪里被看到变得至关重要,因为它将影响你应该掌握的Gamma配置文件。

为了更好地理解Gamma的效果,以下是同一图像在各种常见Gamma配置文件下解释时的外观:

sRGB(原始)、Gamma 2.2、Gamma 2.4和Gamma 2.6的对比

使用被其他明亮元素包围的小屏幕在互联网上突出显示这些差异本质上是一件棘手的事情,但如果你仔细观察,你会注意到,随着我们的Gamma配置文件的数量不断增加,我们的中间色调变得更暗。 特别要注意稀疏的烟雾,例如舞者小腿左侧的烟雾,其外观变暗。 同样重要的是要注意,Gamma的变化不会改变图像的黑点或白点,它们只会改变位于黑色和白色之间的亮度值。

虽然这些差异可能看起来极其微妙,但随着图像尺寸的增加,它们会变得更加明显。 当图像占据整面墙时(例如在电影院环境中),你可以看到相当显着的变化。

那么为什么我们有不同的Gamma分布以及它们从何而来?

3、Gamma的起源

正如本文开头所提到的,当今需要Gamma的主要原因是电子传感器观察世界的方式与我们人眼的方式非常不同。 也就是说,电子传感器在线性光中观察世界,而我们优先考虑黑暗区域的信息,相反,在明亮区域也不需要太多信息。 然而,当研究Gamma的历史时,Gamma编码还有另一个主要目的,那就是 CRT(阴极射线管)。

由于 CRT 是电视早期存在的唯一合适的显示设备,它的显示方式和对光的响应产生了Gamma编码的需要。 巧合的是,CRT 以与我们的眼睛类似的非线性方式响应光线。 CRT 需要大量电能才能产生暗图像,但随着屏幕光输出的增加,能量需求不会以线性方式增加。 相反,他们会执行图中所示的操作:

正如您所看到的,需要相当多的能量输入才能获得 CRT 最大光输出的一半。 但是,要显示剩余 50% 的光输出,需要的能量要少得多。

那么,当来自相机的图像被传递到 CRT 显示器时会发生什么呢?

如你所见,我们遇到了问题。 由于 CRT 显示器不能以线性方式再现光线,因此生成的图像比相机记录的原始场景暗得多。 那么我们该如何解决这个问题呢? 理想情况下,我们希望这条线是直的,以便再现相机观察到的线性光,并且我们可以看到场景的原始状态。 答案是逆Gamma。

4、逆Gamma

逆Gamma是抵消 CRT 响应影响的一种方法。 虽然它不一定是数学倒数,但其总体目标是预先校正Gamma配置文件的作用。 这意味着记录的图像比现实生活中出现的亮度更高,因此当Gamma曲线穿过它们时,它们会被降低到我们希望看到的样子。 通过将 1 除以Gamma曲线(本例中为 2.2),可以轻松计算出数学反函数。 即 2.2 的逆Gamma为 1 / 2.2 = 0.45,如下图所示:

然而,实际上许多反函数并不是精确的数学反函数,它们通常会进行一些调整。 有时,这可能是因为相机制造商可能想要改变其传感器的动态范围记录方式,或者在掌握不同观看条件的情况下可能会改变所需的逆Gamma函数。

​就像正常的Gamma曲线一样,逆Gamma不会改变黑点或白点,但会改变所有的中间色调值。 在反函数的情况下,它这样做是为了预期下游将应用Gamma函数。

应用逆Gamma函数后的图像会是什么样子?

​因此,我们要做的是应用逆Gamma函数,然后应用正常Gamma函数,并使该组合形成原始场景的所需表示:

5、完整的链条

Gamma是一个很快就会变得令人困惑的话题,因为你同时需要考虑人眼、各种电子设备以及将所有这些连接在一起的信号路径。 我们的最终目标是再现原始场景的最佳表示,因此让我们快速浏览一下信号链,以便了解这些不同的Gamma操作的应用位置。

下面就是原始场景在人眼中的样子,我们的目标是为普通人再现一个近似的场景:

当摄像机记录场景时,它会应用逆Gamma函数来抵消 CRT 电视接下来将应用的Gamma 2.2:

具有逆Gamma函数的图像被广播到电视上。 然后,由于 CRT 技术中固有的Gamma曲线,CRT 电视会输出校正后的图像。 现在,该图像是人眼观看场景的合理近似值:

6、Gamma校正的当前目的

众所周知,自从 CRT 电视发明以来,电影、视频和技术已经发生了巨大的变化。 摄像机仍然具有线性读取光线的传感器,但数据现在可以保存为各种格式,例如 RAW 和对数数据函数。 因此,逆Gamma运算不一定像以前那样硬编码到摄像机的输出格式中。 此外,CRT 已成为过去的遗物。 从那时起,我们开始转向 LCD、OLED、数字投影和激光显示技术。

那么,有人可能会合理地问——现在为什么要为Gamma烦恼呢? 如果我们对显示设备有更多的控制权,为什么我们不能坚持使用 1.0 的传递函数,以便我们的输入等于输出,并且信号链中不需要混乱的转换? 好吧,我们可以,但要以一种不会在阴影中引入称为“色带”的问题的方式做到这一点,就需要在超出显示器和消费存储介质当前能力的位深度上进行操作。

事实是,基于 CRT 的技术所需的Gamma对于图像质量来说确实有一个非常好的巧合的好处 - 即它在图像的阴影中编码更多的细节,而在图像的明亮区域中编码更少的细节,这正是我们更喜欢以人类的方式看待。 虽然 CRT 在产生深色阴影时可能需要电力,但我们的人眼却需要黑暗区域的视觉信息。 让我们进一步探讨这个主题,因为它对于理解 HDR 图像中使用的Gamma和其他传递函数的当前用途至关重要。

7、Gamma提高图像质量

我们的人眼非常擅长看到阴影,但不太擅长区分非常明亮区域的细微差别。 这与相机传感器不同,相机传感器对光具有线性响应,并平等地优先考虑所有区域。 由于内容是为人类消费而设计的,因此使用优先将数据放置在我们认为最重要的区域的系统是有意义的。 虽然反Gamma操作对于处理 CRT 固有的Gamma响应是必要的,但该反函数具有双重好处 - 在传输之前将阴影提升到更高的值,这意味着所有阴影都被给予更多的空间/带宽以准确地获得其值被捕获。

尽管 CRT 的响应会将其纠正回场景最初的样子,但这些附加值可以通过传输,并且仍然提供阴影着色的额外准确性。 因此,Gamma编码继续被使用,因为它使我们能够保留更多我们喜欢的有用信息,同时避免编码超出亮值所需的精度。 这减少了所需的处理能力和存储量。 这还意味着分配给无线广播的频谱可以使用Gamma编码比线性编码传输更高质量的图像。

下面是 8 位Gamma编码图像与使用线性亮度值创建然后再次传输回Gamma以便在当前眼前的显示器上查看的图像的外观对比。 这是一个很好的例子,说明了为什么我们在可交付成果的传输和存储中不使用线性亮度值。

仔细观察底部栏的阴影范围,你会发现渐变开始表现出明显的条带。 这是因为线性编码比人眼更优先考虑明亮区域的准确性,而这是以牺牲准确性较低的阴影为代价的。 如果我们要对电视使用线性光编码,那么除非我们使用更高的位深度,否则我们观看的大部分内容都会出现我们上面看到的阴影带问题。

8、Gamma是人类视觉的最佳传递函数吗?

因此,Gamma校正实际上是在 CRT 对能量输入的响应的基础上定义的,这就提出了一个问题:Gamma真的是人类观看图像的最佳传递函数吗? 既然我们不再受 CRT 显示器的限制,是否还有另一种曲线可以更好地服务于人类视觉? 随着高动态范围 (HDR) 图像的出现,杜比公司对此进行了一些研究。

9、Barten Ramp

Barten Ramp 是一个非常方便的图表,它绘制了大多数人在将潜在 HDR 图像一直映射到 10,000 尼特时可以开始看到渐变中的条带(即每个阴影之间的步骤)的位置。 绿色区域表示看不到条带,但红色区域表示可以看到条带,因此存在问题。

对于图像质量,我们希望图像始终保持在 Barten 阈值以下。 然而,如上图所示,为了使用标准Gamma传输函数实现这一点,我们需要允许每个通道 15 位。 如果我们只为每个通道分配 10 位,则较暗的区域仍然会出现条带伪影。 除了每通道 15 位对于商业系统的要求非常高(对于消费系统更是如此!)之外,它也是一种非常低效的数据使用; 图像的中间和明亮部分分配的数据远多于所需的数据。 13 位 Log 编码图像也保持在 Barten 阈值以下,但阴影编码效率低下,其中分配的值多于所需值。

​我们真正想要的是一条保持在 Barten 阈值以下的曲线,并尽可能接近该曲线,以保持最佳的编码效率。 这就是ST.2084,也被称为PQ传递函数。

10、PQ EOTF (ST.2084)

感知量化 (PQ:Perception Quantization) 传递函数专门设计用于最大限度地提高人类视觉的亮度编码效率,因此得名。 如下所示,它允许信号覆盖 0.001-10000 尼特,同时仅使用 12 位,没有可察觉的条带或步进伪影。

EOTF 是电光传递函数的缩写。 Gamma 也是一个 EOTF,但自从 HDR 图像被开发用于消费者观看以来,该术语的使用确实有所增加。 不要让这个名字吓到你,它真正指的是用于在电信号和我们的眼睛看到的光学信号之间进行转换的传递函数 - 因此是电光信号。 当摄像机记录场景时,可能会出现反函数,在这种情况下,它被称为 OETF(光电传递函数)。

由于 PQ 在如此宽的亮度范围内的效率,它被 HDR10、HDR10+ 和杜比视界 HDR 标准使用。 HDR10 品种以每通道 10 位的方式使用它,而杜比视界以每通道 12 位的方式对其内容进行编码,这使其始终保持在 Barten 阈值以下。 虽然乍一看,HDR10 和 HDR10+ 使用 10 位 PQ 函数(因为它位于 Barten 阈值之上)似乎是一个奇怪的选择,但在现实世界中,颗粒和噪声等图像特征会破坏条带伪影,因此 10 位信号并不像看上去那样有问题。

这里还应该提到的是,BBC 开发了另一种 EOTF,其工作原理与 PQ 的 HDR 功能不同。 称为混合对数Gamma(HLG)。 它使用将传统Gamma编码与对数编码系统相结合的传递函数来处理图像的最亮部分。 这使得一个信号能够同时包含 SDR(标准动态范围)和 HDR 图像,从而能够向后兼容现有电视机。 由于这种向后兼容性,许多人希望 HLG 作为广播混合了 SDR 和 HDR 显示器的 HDR 内容的首选 EOTF。

11、今天的传递函数

现在似乎是快速浏览一下当今使用的不同传递函数的最佳时机,因为它们根据颜色空间和可交付成果的预期目的地而变化。 应该注意的是,虽然这里列出的是常见的做法,但可以强制颜色空间使用备用传递函数 - 它们不会强行捆绑在一起。 色彩空间和传递函数是独立的操作,但通常使用特定色彩空间的图像按照惯例也会使用特定的传递函数。

色彩空间 传递函数 解释
sRGB sRGB sRGB 实际上有一个专门为其创建的传递函数。 实际上,它非常接近 2.2 的伽玛函数。
Rec.709 Gamma 2.2-2.4、BT.1886 Rec.709 没有指定要使用的传递函数,但实际上它通常在 gamma 2.2-2.4 之间。 BT.1886 规范形式化了一个略有不同的函数,看起来与 Gamma 2.4 非常相似,但保留了一些更极端的阴影细节。
P3-D65 PQ 供消费者使用的 P3 通常用于 HDR 内容,在这种情况下,通常最常采用 PQ 曲线。 对于标准动态范围,您应该与您的预期交付检查他们期望收到的传递函数。
P3-Theatrical 2.6 对于数字影院用途,指定伽玛为 2.6
Rec.2020 Gamma 2.4、BT.1886、PQ 和 HLG 对于 SDR 内容,最有可能使用 2.4 或 BT.1886 的 Gamma。 对于 HDR 内容,可能会使用 PQ 或 HLG 传输函数。

12、结束语

在本文中,我们了解了Gamma是什么、它为何存在以及它如何影响图像。

从 CRT 显示器的必要开始,Gamma编码几十年来一直充当次要目的—即它更有效地使用给定的位深度来优先考虑和编码对人类重要的视觉细节。

随着供消费者观看的高动态范围图像的出现,新的传递函数已经创建。 当以每通道 12 位运行时,PQ EOTF 能够对 0.001-10000 尼特的范围进行编码,且没有明显的条带。

HLG 是一种结合了Gamma和对数编码的替代 HDR EOTF,在 HDR 广播领域具有广阔的前景。


原文链接:UNDERSTANDING GAMMA

BimAnt翻译整理,转载请标明出处