跳转至

伽马值、灰度系数

数码图片记录和呈现的过程

  1. cmos通电曝光,产生模拟电信号

  2. 经过模数转换,产生raw数据

    • raw并非图片的编码
    • raw记录的亮度信息是线性的
    • raw没有位深度,没有伽马编码,没有色彩空间
  3. raw信息ISP处理

    • 用插值算法算出拜尔阵列中每个像素的RGB值
    • 将计算好的RGB值映射到一个色彩空间中
    • 对线性变化的RGB值应用伽马曲线,输出 = 输入^(1/2.2)。将线性的光线数据转换位非线性的图像数据,以匹配人眼视觉和显示设备的特性
  4. 压缩为JPG储存

为何应用伽马曲线编码

参考文献Understanding Gamma Correction

人眼的特性

人眼对光强度的感知不是线性的。人眼对暗部区域的亮度变化更敏感,对亮部区域的亮度变化更迟钝。而对于数码相机,两倍数量的光子击中传感器时,它接收到两倍的信号(“线性”关系)

示例图表1.png

线性色域的50%亮度与人眼认为的中间灰

线性50.png 对数50.png

韦伯-费希纳定律认为刺激强度与刺激引起的感觉幅度,呈对数函数的关系。
史蒂文斯则用幂律描述了更广泛的感觉比较范围,直至零强度。

Text Only
1
sense = k * phisic^ ( 1/ gamma )

图像处理中gamma值通常取2.2,k值作为一个可选的缩放系数,通常为1

Text Only
1
v_out = v_in^ ( 1/ 2.2 )

位深度的限制

位深度规定了每个颜色通道可用的亮度级别数量
一个8bit(位)深度的图像,每个通道只有256个亮度级别
若我们将仅有的256个亮度级别,平均地分配给线性的raw数据。0代表纯黑,1,2,3,...均匀增加亮度,而255代表最亮
那么对于人眼来说,5到6变亮了20%,而200到201只增加了0.5%
暗部区域将会出现明显的色阶断裂 。而亮部的变化则过于细微,难以分辨。大量数据位被浪费在了亮部区域
因此,位深度低的图像更依赖伽马曲线,通过一个非线性的转换过程,重新分配这256个数值等级

线性的raw数据

线性的raw数据

使用32级(5位)进行线性编码

使用32级(5位)进行线性编码

应用伽马曲线编码

应用伽马曲线编码

伽马曲线的编码和矫正

  1. 图像伽马
    • raw转换为JPEG或TIFF等格式时,应用伽马曲线重新分配亮度等级
    • 以更有效地利用位深度
    • 伽马曲线压缩了亮部的信息,图像伽马也可以被视为伽马压缩,显示伽马可以被视为伽马扩展
  2. 显示伽马
    • 补偿图像伽马,使得图像回到正确的颜色上,否则图像会比正确的颜色更亮
    • 业界大部分已采用2.2的标准伽马值
    • 显示器具有一个原生伽马值。在CRT显示器上是2.5,显卡只需要对其应用1.1的,就可以实现2.2的整体显示伽马。而液晶显示器的数据并不一致,需要更多的校正
    • 除了显示器,伽马值还可以以类似的方法作用在打印机上
  3. 系统伽马
    • 应用于图像的所有伽马曲线的净值,包含了图像伽马和显示伽马的综合作用
    • 为了忠实地表现正确的图片,应当使得系统伽马接近一条直线,也就是使得gamma=1.0
    • 如果系统伽马校准不足,会使得画面偏亮,对比度偏低。反之,如果过度补偿了,画面会变暗,对比度更大

非必须和不适用情况

  • 伽马曲线不是必须的。如果线性的raw图像在线性的显示器上展示,我们仍会看到正确的图像
  • sRGB色彩空间在非常低的亮度呈线性,在较高亮度的指数则为2.4。伽马值为2.2的简单幂函数只是整体近似sRGB的曲线

灰度系数

PhotoShop的色阶工具中
中间滑块下方对应的数值1.00,是当前图像的灰度系数
也就是当前图像的系统伽马值
中间滑块永远对应50%亮度
调节色阶,实际上是通过调节50%亮度对应的位置,来可视化的调节系统伽马值