图像 Gamma 校正

张开发
2026/5/7 11:55:11 15 分钟阅读

分享文章

图像 Gamma 校正
1. gamma校正的起因人眼感知光线的特殊性对于现实世界的光的强度来说描述光的强弱是根据光子在单位面积上的光子数量来描述的这是物理规则这是没错的光的亮度强度是和光子数量成正比的。但是对于人眼来说由于人眼的特殊构造0.1倍光子数量的感知亮度并不是等于0.2倍光子数量感知亮度的一半也就是说眼睛感知亮度不是和光子数量成固定比例的即眼睛感知亮度和光子数量之间的关系为非线性关系。为了把这两者的亮度关系说清楚我们先定义几个名词物理亮度表示光的强度用光子数量乘以1个常量系数产生出来的值也就是说光子数量与光的亮度这里说的是物理亮度不是眼睛感觉到的亮度成正比。感知亮度眼睛感觉到光的亮度光子进入眼睛视网膜让大脑产生亮的程度。物理线性以物理光子数量描述的线性数值空间此空间值范围为[0.0, 1.0]0.0表示全黑最暗1.0表示全白最亮。感知线性以光子进入人眼产生的感知亮度描述的线性数值空间此空间值范围也是[0.0, 1.0]0.0表示全黑1.0表示全白。我们把物理光子的亮度划为11个等级0-10分别对对应着由完全黑到完全白每个等级递增0.1然后我们也把人眼感知亮度也按同样的规则划分11个等级如下图所示上图中上排是物理线性数值亮度下排是感知线性数值亮度。这两者在各自的数值空间是线性的。对上排来说0.2表示的光子数量是0.1表示的光子数量的2倍。对下排来说0.2的感知亮度是0.1的感知亮度的2倍。注意因为我们要对比两种亮度的关系所以把上排中的光子数量转换成了感知亮度即以颜色方块显示出来如果不转换到同一个空间中就没法对比不是吗如何转换下面会有讲述的。上排的1.0的颜色值是精确对应着下排1.0的颜色值即全亮的物理光子表现出来的感知亮度就是感知线性空间的最高感知亮度。我们先看下排下排的数值是在感知线性空间上的没错0.2处的亮度是0.1处的两倍0.5处就是中间亮度也是1.0亮度的一半可以看到0.5的数字都没有显示出来是因为字体颜色就是用0.5的颜色画的。每一个亮度比上一级的亮度的增量都是0.1这就是和我们眼睛感觉的一样的。再来看上排我们可以看到上排起步0.1处就有比下排起步0.1处明显亮很多其亮度在下排的[0.3, 0.4]之间的一个值但是接下来虽然光子数量都是以0.1倍的增加表现出来的亮度也一直是在增加但是亮度的增值却一直在递减0.2处的亮度居然和感知线性空间的0.5的亮度差不多因为0.2处也没有显示出来“0.2”这个数值0.3处的亮度在感知线性空间的[0.5, 0.6]之间的一个亮度值。通过上排的光子数量和光子表现出来的亮度分析得出物理亮度和感知亮度是非线性的具体来说是是幂律关系。2.gamma校正的方法当我们拿照相片对着场景中拍摄时光线从镜头进入照相机我们人眼看到的场景亮度是感知亮度场景的光子进入照相机照相机镜头是物理光学器材只能接收光子无法接收什么感知亮度值这些光子是构成了物理亮度如果就按照这么个流程的话那么照相机中保存场景图片的值是光子数量相关的一个值即是物理亮度值然后这个物理亮度值不做任何修改直接通过照相机的屏幕发射出来我们人眼接触到这些由屏幕发射出来的光子正好是可以产生和直接看场景一样的感知亮度完美看起来似乎很完美真的可以这样吗下面把这个流程用流程图过一遍假设相机中图片直接存物理亮度信息的流程上面这个流程看起来相当完美实际上是通不行的是因为我们保存图片的精度有问题而精度问题又是由物理亮度造成的。ISP在将图像编码为我们常用的8位图像之前会进行一次所谓的色调重建的过程。而且这个过程不仅仅是对图像的压缩保存需要对图像的显示也是需要的当我们对图像进行编码时需要符合人类的感知曲线优化编码效率。简单说我们分配较少的bit数给人类较难区分的图像亮区分配更多的bit数来突出人类更加敏感的图像暗区对于显示设备也是一样。无论显示设备的伽马特性如何它们都需要伽马编码来最大限度地提高信号的视觉质量。它会执行所谓的Gamma校正过程最终使得我们看到的依然是线性的显示图像。以上也就介绍了为什么我们看到的RAW图像很暗。因为经过我们前面处理后的RAW图像依然是线性的显示设备的Gamma校正过程会进一步压低暗区使得我们看到很暗的图像——这就是为什么我们现在需要进行Gamma编码。参考文献为什么要对图像做Gamma校正如何做详解 gamma 校正 - 知乎

更多文章