本篇blog主要是写一下藏在Gamma校正技术背后的原理,我尽可能地去阐述为什么会有Gamma校正这个东西,以及为什么一般的Gamma值是2.2。
前置知识:首先我们要知道,人类对于颜色的敏感度并非是线性的,对于暗色的辨识能力要比亮色的辨识能力强一些(这是进化的结果,辨识更多的暗色有助于发现隐藏在黑暗中的危险)。由于这个原因,我们在看颜色值从0到1(从黑到白)的过程中,亮度要增加一倍,我们才会感受到明显的颜色变化(变亮一倍)。打个比方:颜色值从0.1到0.2,我们会感受到一倍的颜色变化,而从0.4到0.8我们才能感受到相同程度(变亮一倍)的颜色变化。
那么在计算机中我们如何去解决这个问题呢?很简单,进行Gamma校正,我们把本来线性分布的颜色值校正为非线性分布的值,这样子就在保证了在不增加数据量的前提下提高了可辨识颜色(暗色)的精度,减少了亮色的精度(反正你也看不出来)。从另一个角度来说,这也使得颜色更加广泛(看起来更加广泛,毕竟我们对暗色的辨识度较高的,对亮色的辨识度较低,一增一减,增的多,减的少,自然就使得颜色值更加广泛了)。
这就是Gamma校正存在的原因。
以上是从人眼的角度来说的,接下来我从另一个角度(也就是显示器(监视器, moniter)的角度)来说明为什么Gamma校正的值一般是 1/2.2。我们知道,以前的显示器屏幕都是使用CRT(阴极射线管)的,这种显示器有一种物理特性:
[输出值(亮度) = 输入值(电压) ^{2.2}]
话说到这里已经很明显了吧?一般对于一个线性的颜色分布来说,显示器的输出相较于原来的颜色,都会偏色。而对于一个非线性的颜色分布来说,这种偏色可以被调整至0,于是自然而然,Gamma校正的值就成了1/2.2,它就是为了抵消CRT的显示效果诞生的。
实际上,Gamma校正的值不一定为1/2.2,它取决于显示器的材质:比如说Mac的显示器的Gamma值就为1.7,从而Gamma校正值为1/1.7。一般用2.2只不过是有历史遗留的因素(兼容CRT显示器)。
不得不说这是一种巧合:由于人眼对于暗色辨识度更高,对亮色辨识度较低,我们可以把原本大自然中线性的颜色变化值转化为非线性的颜色变化值,从而使得颜色的表示范围(也可以称之为种类)更加广泛。另一方面,CRT显示器输出值会有偏色,我们通过测定这个偏色值(Gamma值),可以将非线性的颜色变化之又原原本本地显示回来,真可谓一石二鸟。
Gamma校正具体怎么使用这里就不说了,没什么难度。
参考文章: