伽马校正(Gamma correction) 又叫伽马非线性化(gamma nonlinearity)、伽马编码(gamma encoding),是用来针对影片或是影像系统里对于光线的
辉度(
luminance)或是三色刺激值(tristimulus values)所进行非线性的运算或反运算。最简单的例子里伽马校正是由下列
幂定律公式所定义的。
其中A是一个常量,输入和输出的值都为非负实数值。一般地来说在A=1的通常情况下,输入输出的值的范围都是在0到1之间。伽马值γ< 1的情况有时被称作编码伽马值(encoding gamma),而执行这个编码运算所使用上述
幂定律的过程也叫做伽马压缩(gamma compression);相对地,伽马值γ> 1的情况有时也被称作解码伽马值(decoding gamma),而执行这个解码运算所使用上述
幂定律的过程也叫做“伽马展开(gamma expansion)”。
所以RGB中的灰度值,为了考虑到较小的存储范围(0~255)和较平衡的亮暗部比例,所以需要进行Gamma校正,而不是直接对应功率值,因此RGB值RGB颜色值不能简单直接相加,而是必须用2.2次方换算成物理光功率后才能进行下一步计算。这一点在下面的灰度计算公式中就有所体现。
注意这里的2.2次方和2.2次方根,RGB颜色值不能简单直接相加,而是必须用2.2次方换算成物理光功率。因为RGB值与功率并非简单的线性关系,而是幂函数关系,这个函数的指数称为Gamma值,一般为2.2,而这个换算过程,称为Gamma校正。
为图像进行伽马编码的目的是用来对人类视觉的特性进行补偿,从而根据人类对光线或者黑白的感知,最大化地利用表示黑白的数据位或带宽。在通常的照明(既不是漆黑一片,也不是令人目眩的明亮)的情况下,人类的视觉大体有伽马或者是幂函数的性质。如果不将图像进行伽马编码,那么数据位或者带宽的利用就会分布不均匀——会有过多的数据位或者带宽用来表示人类根本无法察觉到的差异,而用于表示人类非常敏感的视觉感知范围的数据位或者带宽又会不足。图像的伽马编码并不是必须的(甚至有的时候会适得其反),浮点数格式的颜色值已经提供了一部分对数曲线的线性估计。
亮度(luminance)是表示人眼对发光体或被照射物体表面的发光或反射光强度实际感受的物理量,亮度和
光强这两个量在一般的日常用语中往往被混淆使用。简而言之,当任两个物体表面在照相时被拍摄出的最终结果是一样亮、或被眼睛看起来两个表面一样亮,它们就是亮度相同。
幂定律(英语:power law)是一种
多项式关系。遵守这关系的多项式,会展现出
标度不变性(scale invariance)的性质。最普通的,表达两个变量之间关系的幂定律,其形式为