漫谈 Gamma

发布日期:2025-03-07 14:48    点击次数:165

影像采集、屏幕显示、色彩空间等领域,有多种 Gamma 说法,众说纷纭,常让人产生困扰。

显示器 Gamma

一般认为,Gamma 一词源于 CRT(阴极射线管)显示器的响应曲线。

由于电子元件的物理特性,显示器上生成的图像亮度与显像管的输入电压并非线性关系而是幂函数关系,如下图所示。

图片

这种亮度响应曲线对应的数学公式如下:

图片

电子元件的物理特性决定了幂 Gamma 的大小,我们称这一物理特性为“显示器 Gamma” Display Gamma。

拍摄时,相机传感器线性记录下自然光强。

如果对采集到的数据进行线性编码,则这样的图像数据转换成显示器的输入电压时,将使得图像在显示器上发生失真。如下图所示。

图片

“显示器 Gamma”是 CRT 显示器本身固有的,是常量 2.2,并且不可改变(随着显示器使用时间长了有微小变化)。 

现代的液晶显示器,理论上能够直接线性输出,但为了兼容之前的影像以及传统的图像处理流程,所以在液晶显示器内部集成了 Gamma 模块,以模拟 CRT 显示器的 Gamma。

人眼 Gamma

人类在长期的进化过程,不论是味觉、嗅觉、听觉还是视觉,对外界的反应都是非线性的。

人眼为了看清暗物因此更加敏感,为了避免强光刺激则更加无感,因此形成了人眼看世界的“反应 Gamma 曲线”。

图片

如果我们将大自然的明暗关系当作一种线性关系时,人眼则通过自己的 “Gamma”看到了另一种“世界”。

因此,世界只是人眼感知到的“世界”。

比如,自然光强度为 21.8% 时,人眼对其的感觉是 50% 的中性灰,如下图所示。

图片

人眼对亮度的这种反应曲线,近似于 0.45 的 Gamma 值,即 1/2.2。在此权称之为“人眼 Gamma”。

编码 Gamma

所有的传感器采集光线时都是线性( Gamma = 1.0)的,但是从人眼观察世界的特征来看,采集的数据中需要更多的暗部信息。

如果对采集到的数据进行非线性编码,在同样的位深度(数据范围)之下,参与编码的暗部数据就会更多,而参与编码的亮部数据就相对减少。

比如,原来 0 ~ 0.5 的数据被编码到 0 ~ 0.73,从而记录了更多的暗部信息。而原来 0.5 ~ 1 的数据仅被编码到 0.73 ~ 1,相对就少了许多。

图片

三个原色通道可以有各自的 Gamma 调整曲线以及专门的暗部调整曲线。

图片

在大部分中低端相机中,Gamma 调整是基于指定的色彩空间自动完成的。

一般使用反作用于相机色彩空间的 Gamma 值,比如 1/2.2。

一些高端相机允许通过预设模式(此处常称为对数 Log曲线)来手动微调。

图片

由于不同的相机根据自家硬件特性有不同的算法,从而导致 Gamma 曲线有所不同,也决定了形成的数字图像文件中的数据有所不同。

因此,“编码 Gamma”又可称为“文件 Gamma”或“摄像机 Gamma”。

显示器的输出亮度必须呈线性(Gamma = 1.0 ),才能达到人类看自然界的同样的感觉。

图片

比如,常见的 sRGB、AdobeRGB、Rec.709等的色彩空间 Gamma 都是 2.2。

在非线性编码时使用 1/2.2 的 Gamma 进行编码,这样的影像文件数据在显示器 Gamma 2.2 的显示器上显示时就会达到线性关系,从而使得人眼看显示器上的图像与看真实世界就没了差别。如上图所示。

那么,如果编码 Gamma 不是基于 Gamma 2.2(比如 P3D65 Gamma 2.6),或者是基于对数曲线编码,那如何才能在 Gamma 2.2 显示器上正常显示呢?

线性工作流

所有的影像软件都应该基于线性数据(Gamma = 1.0 )来处理。

因此,非线性编码的数据应该要通过一个反作用的解码过程,得到线性数据后再输入到软件里处理。这样的 Gamma,又可以称为“工作中的色彩空间 Gamma”。

若要将线性数据输出到显示器,还需要加一个与显示器 Gamma 反作用的曲线,才能在显示器上看到正常的影像。

图片

若要将线性数据存储为某个色彩空间的文件,则需要使用此色彩空间的反作用 Gamma 重新编码后再保存。

图片

3D 渲染器一般是物理模拟器,以线性方式来处理数据。因此,贴图等导入到 3D 渲染器之前,如果不去除其编码 Gamma(又称“文件 Gamma”),即,不将其转换为线性数据,则在线性空间中表现为发灰。

图片

所谓“线性工作流程”,就是将非线性编码的数据转换为线性数据,然后与其它合成影像的线性数据一起在线性空间中处理。

图片

Raw 格式的影像文件,如果在显示器上显得发灰,通常是由于没有指定如何将其转换为线性数据的原因。厂家配套的 LUT 文件,其目的是使得影像文件能在特定的显示器上被正常显示。即,将非线性编码后的数据转换为线性数据,显示前再根据反作用显示器码 Gamma 进行显示输出补偿。于是,加载了相应 LUT 的 Raw 格式数据,就可在屏幕上正常显示了。“有钱的捧个钱场,好看的点下在看” 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。