理解gamma校正[译]

原文:
https://www.cambridgeincolour.com/tutorials/gamma-correction.htm

这篇文章是我读过的讲gamma讲的最清楚、最易懂的,来龙去脉简明扼要。翻译出来分享给朋友们。这篇文章最重要的结论:gamma编码的目的仅仅是为了图像保存–而不是为了图像展示。

Gamma是数字图像领域中非常重要的特征,但是我们对它的了解不算多,它定义了像素值和实际光强的关系。不进行Gamma处理,我们看到的数码相机照片和真实的图像会有差别(在标准的显示器上观看)。Gamma也被称为 Gamma校正、Gamma编码、或者Gamma压缩。理解了Gamma工作机制,你可以更好的进行图像编辑和图片曝光处理。

Gamma为什么有用

1. 人眼和相机对光强的敏感度有差别

对数字相机而言,光强增加到两倍,传感器接收到的信号也是两倍(呈线性关系)。但是人眼对光强的反馈是是非线性的,对弱光的反应更敏感,亮度只增加了一点儿,我们可能就感觉增加到两倍–并且随着光强增加逐步变化(呈非线性变化)

理解gamma校正[译]_第1张图片

理解gamma校正[译]_第2张图片

人眼实际的感知依赖观察环境,还受附近颜色的影响。在极端的光照场景下,比如星光下人眼和相机的感光度一致,都呈线性。

与相机相比,人眼对暗色调的变化比较敏感,这是由于人的生物学机理,使得人类的视觉系统可以处理更广泛的光强,因为户外的物体明暗范围非常广,如果无差别的处理所有的明暗色调,对人眼是过重的负担。

技术要点

Gamma公式: V o u t = V i n g a m m a Vout = Vin^{gamma} Vout=Vingamma,Vin:输入光强值,即实际光强,Vout:输出光强值

图1中的蓝色曲线是基于gamma生成的,gamma<1时,蓝色线条往上弯曲,gamma>1时向下弯曲

2. Gamma编码的图像存储效率更高

因为gamma编码重新划分了颜色层级,使得其更符合人眼的感知,使用更少的bit可以表达相同的颜色范围。对相机而言则相反,过多的bit用于描述更亮的颜色(相机对亮色相对敏感),更少的bit用于描述暗色调(相机对暗颜色相对不敏感)

理解gamma校正[译]_第3张图片

上图中gamma编码的颜色变化使用了标准gamma值1/2.2,用5位共32个值表达颜色明暗范围。

注意观察,这32个值分配到暗色调范围不足,分配到亮色范围又过多。而经过gamma编码的颜色变化基本上均匀的摊开到整个范围(“感知上是均匀的”),这也保证了之后的图像编辑处理,颜色和直方图都是基于自然的、感知上的均匀色调。

真实的图片大部分有256个值(8位),足以保证打印出来的颜色是平滑、连续的。如果使用线性编码,要避免图片色调分离(image posterization),需要8倍的色值(11位)来存储图片单个颜色。

Gamma工作流程:编码与校正

尽管有这些好处,gamma编码增加了图像保存、显示的复杂度。下一步是大家最容易困惑的点,我们讲慢一点。

要显示gamma编码的图片,必须先经过gamma校正处理,以还原出原始的图像。换句话说,gamma编码的目的仅仅是为了图像保存–而不是为了图像展示。【译者注,这是本篇最重要的观点】。第二步就比较幸运了,display gamma(显示gamma)已经被显示器、视频卡处理了,不用我们手动计算转换了

理解gamma校正[译]_第4张图片

  1. Image Gamma.用于相机或者RAW开发软件,将捕捉到的图像转换到标准的JPEG或TIFF文件,将相机捕获到的颜色值重新分配以保证在感知上更均匀。同时,给定相同的bit depth,能更高效的利用存储空间

  2. display gamma. 指视频卡和展示设备的总影响,实际有可能是一系列的gamma处理的加和。display gamma的目的是抵消image gamma,还原真实的图像,在显示器上呈现时不会变的更亮(不真实)。当然,偏大的display gamma会导致图像变暗。

  3. System Gamma. 表示整个过程中,作用于图像的所有gamma值的总效果,也被称为"viewing gamma". 为了高保真还原图像场景,system gamma应该接近一条直线(gamma = 1.0)。直线确保输入(原始的场景)和输出(屏幕展示或者打印)保持一致。有时候system gamma会略大于1.0,以提升对比度,这么做可以补偿显示器的动态范围的不足,或者补偿不太理想的观看环境及图像斑点

下面展开说明

图片gamma (image gamma)

图片的gamma通常由颜色属性定义,嵌在图片文件中。大部分的图片文件中gamma = 1/2.2(比如sRGB、Adobe RGB 1988 color),注意,RAW格式用linear gamma,然而RAW图像查看器通常也会默认使用1/2.2的gamma值,这样会看起来不那么暗。

理解gamma校正[译]_第5张图片

如果没有颜色描述文件,会假设gamma等于1/2.2。没有颜色描述的文件有PNG、GIF格式,有些JPEG图片比较特殊,没有gamma属性但是设置了"save for the web"

技术要点-camera gamma

大部分的数码相机,除开极暗和极亮的区段,记录光强是线性的,gamma值也假定是1.0。所以image file gamma是encoding gamma和camera gamma的和,而由于camera gamma权重较小通常被忽略,有些相机制造商可能会微调色调曲线以改变image file gamma

Display Gamma

当你调整显示器色调校正或对比度时,会用到Display Gamma。幸运的事,工业界达成共识,用2.2作为标准的display gamma,所以我们不用考虑display gamma设置成哪个值更好。老的苹果电脑使用过1.8,这就使得其他电脑的图片在mac 上看起来更亮一点,不过现在也统一了。

回顾下,display gamma补偿了图片文件gamma,补偿的净结果称为system/overall gamma。

用标准gamma编码图片(蓝色曲线), 不同display gamma值(红色曲线)对应的整体效果(紫色曲线)如下, 可以看到display gamma值越大图片越暗:

理解gamma校正[译]_第6张图片

上图中,假设显示器的gamma是标准值2.2。

回顾下前面讲的,image file gamma(蓝色) + display gamma(红色)等于overall system gamma(紫色)。注意,gamma值增大会造成红色曲线向下弯曲

如何理解上图。第一张图(从左至右顺序)最亮是因为display gamma(红色)对image gamma(蓝色)的校正效果为0,导致overall system gamma(紫色)向上弯曲。第二张图中,display gamma没有彻底抵消掉image gamma,导致overall system gamma曲线依然有点上扬(图片略微变亮)。第三张图中,display gamma 精确的校正了image gamma,输出线性的overall system gamma。最后一张图中,display gamma过度补偿了图片gamma,导致overall system gamma向下弯曲

overall display gamma实际上有两部分组成:

  1. 显示器/LCD 硬件造成的native gamma
  2. 视频处理器的gamma,或者设计人员增加给显示器的gamma校正

理解gamma校正[译]_第7张图片

这两部分的影响依赖显示器的类型。

CRT Monitors. 因为一些偶然的工程上的幸运,CRT的native gamma是2.5,接近于人眼的逆处理。所以经过gamma编码的图像文件直接在CRT显示器上显示,接近原始的图像。然而,制造商还是会增加一个≈1/1.1的调整系数,以保证display gamma为2.2,这个值也可以在显示器上设置。

LCD 显示器. LCD显示器就没有这么幸运。要保证display gamma为2.2经常要经过大量的校正,而且一致性也没有CRT显示器好。为此,LCD上会用到look-up table(LUT)以确保输入值能达到预想的gamma值。

技术要点

display gamma可能会有点容易混淆。这个术语经常可以换成gamma校正,因为它确实是对图像文件进行校正。但是,这两个值不一定相等。

gamma校正有时候以encoding gamma的形式定义,即对什么gamma值进行补偿,而不是实际计算用到的值。
比如说,我们用1.5的gamma校正,其实际的值是1/1.5,因为1/1.5的gamma 抵消了1.5的gamma(1.5 * 1/1.5 = 1.0).

gamma校正值越大图像越亮(与display gamma相反)【译者注,这一段描述不太清晰,感觉有点蒙的可以略过,不影响对整篇文章的理解】

其他概念 & 后续阅读

其他的要点及说明如下:

  • Dynamic Range(动态范围). 除了增加图像存储利用率,gamma编码还增加了可记录的dynamic range(给定位深). gamma可以通过提高图像对比,使得显示器、打印机管理有限的dynamic range(与原始图像相比)。

  • Gamma Correction(gamma校正). "gamma correction"实际上是一个涵盖范围很广的术语,只要有gamma相互抵消就可以叫gamma校正。所以,尽量避免使用这个术语。

  • Gamma Compression & Expansion(gamma压缩与膨胀).这个术语对应gamma的值,小于1为压缩,大于1为膨胀。所以,image file gamma可以被称为gamma压缩,display gamma可以被称为gamma膨胀

  • Applicability(适用性). 严格说,gamma指的是色调曲线,用简单的幂律(Vout = Vin^gamma)表达,但是也经常指其他的色调曲线。比如,sRGB颜色空间在低亮度区间是线性的,高亮度区间为曲线,这两段区间都不是标准的gamma幂指数,但是整体的gamma也近似为2.2

  • Is Gamma Required(gamma是必须的吗)?否,线性gamma(RAW)图像依然存在,前提是配合线性的gamma display使用,这种场景就没有利用gamma的存储优势

你可能感兴趣的:(图像处理,计算机视觉,前端,图形渲染)