定义
Gamma correction, gamma nonlinearity, gamma encoding, or often simply gamma, is the name of a nonlinear operation used to code and decode luminance or tristimulus values in video or still image systems.[1] Gamma correction is, in the simplest cases, defined by the following power-law expression:
Vout = A * Vin ^ γwhere A is a constant and the input and output values are non-negative real values; in the common case of A = 1, inputs and outputs are typically in the range 0–1. A gamma value γ < 1 is sometimes called an encoding gamma, and the process of encoding with this compressive power-law nonlinearity is called gamma compression; conversely a gamma value γ > 1 is called a decoding gamma and the application of the expansive power-law nonlinearity is called gamma expansion.
传统意义上的伽马校正
由于图像采集或显示设备在光电转换的时候电压与明亮度的关系是非线性的,在最终呈现图像之前需要修正,故产生了伽马校正。
现实世界中几乎所有的CRT显示设备、摄影胶片和许多电子照相机的光电转换特性都是非线性的。这些非线性部件的输出与输入之间的关系(例如,电子摄像机的输出电压与场景中光强度的关系,CRT发射的光的强度与输入电压的关系)可以用一个曲线表示,称为伽玛曲线(Gamma Curve)。以传统CRT(Cathode Ray Tube)屏幕的特性而言,该曲线通常是一个乘幂函数:
Y=(X+e)γ
其中,Y为亮度、X为输出电压、e为补偿系数、乘幂值(γ)为伽玛值,它用来衡量非线性部件的转换特性。这种特性称为幂-律(power-law)转换特性。改变乘幂值(γ)的大小,就能改变CRT的伽玛曲线。按照惯例,“输入”和“输出”都缩放到0~1之间。其中,0表示黑电平,1表示颜色分量的最高电平。对于特定的部件,人们可以度量它的输入与输出之间的函数关系,从而找出γ值。典型的Gamma值是0.45,它会使CRT的影像亮度呈现线性。使用CRT的电视机等显示器屏幕,由于对于输入信号的发光灰度,不是线性函数,而是指数函数,因此必需校正。
数字图像处理中的伽马校正
在编解码的时候引入伽马校正,为了压缩。由于人眼视觉特性决定了对于较高的明亮度范围可以丢弃一些细节,而剩下了的较低的明亮度范围则要尽可能保留细节。下图是人眼对明亮度的近似视觉特性曲线
伽马校正也可以实现图像对比度增强。下图阐释了人眼的同时对比特性:
3幅图中,中间方块的亮度一样,但是在暗背景中看起来亮,在亮背景中看起来暗。原理就是上面的幂函数曲线。利用这条曲线,可以增强较暗(或曝光不足)的图像的对比度;反过来,取指数大于1,则可以增强过亮(或过曝)图像的对比度。
编程
grayval = pow( grayval/maxval+EPS_VAL , gamma); //maxval是最大灰度值,EPS_VAL是零阈值,gamma是校正因子
val1 = pow(abs(diff/MAXVAL+EPS_VAL), gamma); //差分图像