林 凡 浙江广播电视集团
Gamma在图像系统中的应用
林 凡 浙江广播电视集团
广义上来说,伽玛是根据人眼对亮度感知的非线性和图像系统的有限灰阶所做的映射,它是非线性的。在采集端到显示端的所有环节中,均可能存在着伽玛转换,这对最后产生的图像有明显的影响。本文对Gamma在图像系统中的应用进行了阐述。
伽玛 幂函数 非线性 端到端
伽玛(Gamma或γ)这个词很常见,有很多电视机或者显示器都可以调整这个参数,专业级的设备甚至可以对RGB每个通道单独进行调整,伽玛调整可以改变整个画面的色调和亮度。对伽玛这个词也存在许多误解,导致为什么使用、什么时候使用、使用程度等不甚了解,需要进一步系统完整地进行梳理。
术语“伽玛”源于阴极射线管(CRT)设计师,是指电子枪输入信号栅极电压的幂指数。栅极电压调控着电子枪的电子流密度,这决定了荧光屏的明视度,CRT输出的明视度本身就是非线性的。显示设备的输入电压与输出电压(屏幕亮度)之间并非线性关系,而是带有幂函数的指数关系,即Vout=AVinγ(一般A为1)。一般认为,因为CRT显示器的非线性特性,为了在显示端重现景物反射进人眼的线性光,所以需要在摄像机采集端使用反向gamma来使两者的乘积为1。人类视觉对于对比度的感觉是非线性的,经典心理学试验给出了这一表达,即Weber-Fech-ner定理:人眼感觉的光线(视觉定量)近似等于亮度的0.4次方幂,这一关系近似为CRT电压亮度函数的反函数。摄像机采集端正好也符合人眼对入射光的视觉特性,即非线性,人眼对暗部细节的捕捉要明显优于亮部细节,人所感觉的中灰(黑和白的中间点)比自然界的中灰要低得多。两者的gamma响应曲线如图1所示。
如今的显示设备如LCD、OLED等,在技术上已经可以实现gamma=1,而不是像CRT那样自带非线性的幂指数,把类似CRT的gamma响应曲线做进设备中是为了兼容采集前端的gamma校正。在线性电视系统中,人眼对不同亮度噪声的敏感程度不一样,在暗部区域对噪声比亮度区域更敏感。所以模拟电视需要对亮度进行非线性处理,使不同的亮度噪声看起来一样。在拍摄时需要对信号做非线性压缩处理,然后再通过显示器的非线性还原成线性。如果不采用gamma曲线,而是一整个线性的系统,所拥有的动态范围会比采用gamma曲线的小很多。也就是说,即使显示端gamma为1,实际上也需要在采集端针对人眼对噪声的敏感做一个gamma小于1的校正来提升暗部的信号,相当于将量化级更多地分配到了较暗的区域,显然能够根据人眼视觉特性,用较少的量化级数呈现较大的动态范围。实际使用的高清摄像机使用幂函数为Rec 709中定义的0.45,即显示器幂指数2.2的倒数。
图1 Gamma响应曲线
在电视行业中,需要考虑采集端的编码gamma和显示端的解码gamma,编码gamma和解码gamma的两个值是作为端到端gamma(end-to-end gamma)共同作用于图像系统的,也被描述为端到端的传递函数。如果共同作用的结果是1,那么显示器还原的光线就跟原始场景的光线一样。理论上,乘积为1的确会让显示器精确重现原始场景的视觉条件,但实际上大部分的系统gamma取值都不是1,这是由于原始场景和显示器的观察条件存在着差异。首先是能够显示的亮度值比真实场景的亮度值差了好几个数量级,即显示器的精度根本达不到自然界的的亮度精度。其次在真实场景中,场景填充了观察者的所有视野(人眼所涉及的包括余光等),而显示的亮度往往只局限在一个被周围环境所包围的屏幕上,使得感知对比度相较于原始场景明显下降了,这时候还是用原始场景光来观看较小的屏幕显然是不合适的。实际上电影院等荧幕的呈现效果gamma就大于1,以方便观众在较暗环境下观看,相比较亮的屏幕(gamma小于1)更能使人沉浸在电影效果里。在所有广播电视系统中,gamma校正是在摄像机中完成的。使用这种摄像机得到的图像就预先做了校正,在gamma=2.5的CRT屏幕上显示图像时,屏幕图像相对于原始场景的gamma大约等于1.25。这个值适合“暗淡环境”下观看。
图2 End-to-End Gamma
实际上gamma并非单单指CRT的非线性特性,广义上来说,gamma存在于图像系统采集到重现的所有环节中。实际的图像系统是由多个部件组成的,这些部件中可能会有几个非线性部件。如果所有部件都有幂函数的转换特性,那么整个系统的传递函数就是一个幂函数,它的指数gamma等于所有单个部件的gamma的乘积。如果图像系统的整个gamma=1,输出与输入就成线性关系。这就是说,你可以设置整个系统的gamma为1,这样输入输出的结果与人眼观察到的是一样的线性光(虽然中间经过几个gamma的乘积已与原始光线不太相同,但结果是线性的),实现了真实的还原。当然也可以使系统的最终gamma不为1,根据采集设备、显示设备、图形设计软件和帧缓存查找表的gamma取值不同,相应的系统gamma值如图3所示,电视行业使用摄像机考虑的是第一行的情况。
还有一个制约系统线性的原因就是存储和处理环节。在采集端和显示端技术上都已经可以达到很高的颜色数量或者说明暗层次,只有中间环节的存储和处理能力太弱,这就是瓶颈。目前普遍使用的色彩空间是sRGB空间,在这个模式下,RGB每通道是8bit,相当于黑到白(低动态范围颜色的1.0)的亮度级数只有0到255一共才256级。用这么少的级数来代表自然界黑到白的层级未免太不够了,那么针对人眼的亮暗敏感度必须要利用gamma来调节中灰的位置,使得有限的灰阶分布能够尽量符合人眼的视觉特性。当技术发展到一定阶段,使用每通道32位的浮点数来表示自然界的亮度和颜色的时候,我们理论上就不需要灰度系数gamma了,因为我们可以在需要的时候不断增加更细分的色阶,图像数据可以和真实世界的光线强度一样保持在线性的空间,这就是HDR(高动态范围)的图像带来的好处。相比sRGB的LDR图像(每通道16bit整数型以下),HDR图像能带来更加接近真实的黑和白,能够表现出远大于(255,255,255)的亮度和无限接近纯黑的暗部。也就是说,Gamma仅应用在0~1的范围内,即仅用于8位图像和16位图像,或者说任何低于16位的图像都受Gamma的影响。注意在平常使用OCP调整gamma值的时候,需要RGB三者一起调整,单个通路的调整会带来颜色的偏差,需要三者增减相同的数值才能只带来明暗层次的变化,而不影响画面的色调。
图3 不同环节的gamma取值
因为gamma表现的实际曲线是非线性的,跟人眼的视觉特性类似,因而可以说带有gamma曲线的sRGB、ProphotoRGB、AdobeRGB等均与人眼相关,属于非线性空间。计算机的RGB空间和电视行业传输的YUV空间属于线性空间,与设备相关而与人眼无关。弄清楚这一点对图像输入输出非常重要,因为gamma空间的渲染效果和linear(线性)空间产生的实际效果有很大差别,实际上算图器或者其他设备的计算均是在线性空间中完成的。图像总是被假定为线性。gamma仅适用于图像的显示,而不适用于图像的数据。非线性应杜绝存储在图像中。如果已经存在图像中,那么这种非线性必须在它的存储格式中加以注明以方便移除来检索线性数据。所以建议的图像处理流程是需要在计算环节去掉gamma使之回归线性空间,线性计算完成之后再根据需要补偿gamma,这样产生的实际效果对机器比较友好,也符合常规计算的数学公式,更加接近实际图像的纹理变化,图4是建议的Gamma流程。
图4 建议的Gamma流程
总而言之,gamma在图像系统的采集、存储、处理、传输、显示环节中均会产生影响,细小的改变带来的可能是与预期或者实际不符的最终效果。在日常使用中,应当根据实际情况和设计需求制定不同环节的gamma,来达到相应的端到端end-toend gamma,使得画面整体的明暗程度和层次基调符合观看环境,达到预期的创作效果,从而拥有沉浸式的体验。[Real-Time Rendering, Third Edition],2008
1.Martin Kykta,Uni-Pixel Displays Inc.,Gamma,Brightness and Luminance Considerations for HD Displays,[Information Display],07/09
2.彭国福 林正浩,图像处理中Gamma校正的研究与实现,[电子工程师],2006.(02)
3.杜百川,加快媒体融合转型[R],上海,2016
4.Tomas Akenine-Moller, Eric Haines, Naty Hoffman,
5.林福宗,[多媒体技术教程],第5章 彩色数字图像基础
6.Charles Poynton,The rehabilitation of gamma,SPIE 3299, Human Vision and Electronic Imaging III,1998
7.时枫哲,浅谈Gamma校正与人类视觉的关系,[美术教育研究],2014.(22)
8.Alvy Ray Smith,Gamma,Correction,[Microsoft Tech Memo],1995