简单理解伽马校正

69 篇文章 6 订阅
63 篇文章 1 订阅

伽马校正相关的资料说明很多,但其中不少内容都写的比较繁杂,令人难以理解, 本文尝试简单解释一下伽马校正的相关内容~

早期的 CRT 显示器存在非线性输出的问题,简单来说,你给 CRT 显示器输入(input)一个 0.5(注意,输入范围为[0,1]), CRT 显示器的输出(output)并不是 0.5,而是约等于 0.218,输入与输出间存在一个指数大概为 2.2 的幂次关系:

o u t p u t ≈ i n p u t 2.2 output \approx input^{2.2} outputinput2.2

所以当你输入 0.5 时,输出即为:

0.218 ≈ 0. 5 2.2 0.218 \approx 0.5^{2.2} 0.2180.52.2

其中 2.2 这个指数即为伽马(gamma)值,而显示器的这种非线性输出过程则称为伽马展开(gamma expansion).

为了能够得到正确的输出,我们必须对输入进行补偿,方法就是对输入进行一次指数为 1 / 2.2 的幂次运算,这个补偿的过程便是伽马校正(gamma correction), :

i n p u t → i n p u t 1 / 2.2 input \rightarrow input^{1 / 2.2} inputinput1/2.2

经过伽马校正后,显示器便能够正确显示我们的输入了 :

i n p u t → i n p u t 1 / 2.2 o u t p u t ≈ ( i n p u t 1 / 2.2 ) 2.2 = i n p u t \begin{aligned} & input \rightarrow input^{1 / 2.2} \\ & output \approx (input^{1 / 2.2})^{2.2} = input \end{aligned} inputinput1/2.2output(input1/2.2)2.2=input

所以为了让显示器正确输出 0.5, 我们需要对 0.5 进行伽马校正,实际给显示器的输入约为 0.73 :

0.5 → 0. 5 1 / 2.2 ≈ 0.73 0.5 \rightarrow 0.5^{1 / 2.2} \approx 0.73 0.50.51/2.20.73

看到这里你可能会有个疑问:既然伽马校正起源于早期 CRT 显示器的非线性输出问题,而我们现在基本已经淘汰掉这些显示器,并且当今的显示器已经可以做到线性输出了(输入0.5,输出也是0.5),那么我们是不是可以直接废弃伽马校正了呢?

答案可能有些出人意料 : 我们仍然需要进行伽马校正!

原因有些巧合 : 伽马校正除了可以解决早期 CRT 显示器的非线性输出问题, 同时还可以帮助我们"改善"输出的图像质量 :

人眼对于较暗(接近0)的亮度值比较敏感,对于较亮(接近1)的亮度值则不太敏感,假设我们现在使用一个字节(能够表达整数范围[0,255])来存储亮度值(之前都忽略了亮度值(输入值)的表示问题,这里需要考虑),并且我们要存储 0.2400.243 这两个亮度值,如果不进行伽马校正,则有:

v a l u e _ 1 = 0.240 ∗ 255 = 61.2 ⟶ c l a m p 61 v a l u e _ 2 = 0.243 ∗ 255 = 61.965 ⟶ c l a m p 61 \begin{aligned} & value\_1 = 0.240 * 255 = 61.2 & \stackrel{clamp}{\longrightarrow} 61 \\ & value\_2 = 0.243 * 255 = 61.965 & \stackrel{clamp}{\longrightarrow} 61 \end{aligned} value_1=0.240255=61.2value_2=0.243255=61.965clamp61clamp61

可以看到 0.2400.243 的存储数值都是 61,所以这两个输入的实际显示效果其实是一样的(细节差异丢失了).

但如果我们进行一次伽马校正,则有:

v a l u e _ 1 = 0.24 0 1 / 2.2 ∗ 255 ≈ 133.3 ⟶ c l a m p 133 v a l u e _ 2 = 0.24 3 1 / 2.2 ∗ 255 ≈ 134.1 ⟶ c l a m p 134 \begin{aligned} & value\_1 = 0.240 ^ {1 / 2.2} * 255 \approx 133.3 & \stackrel{clamp}{\longrightarrow} 133 \\ & value\_2 = 0.243 ^ {1 / 2.2} * 255 \approx 134.1 & \stackrel{clamp}{\longrightarrow} 134 \end{aligned} value_1=0.2401/2.2255133.3value_2=0.2431/2.2255134.1clamp133clamp134

0.2400.243 的存储数值变为了 133134,所以这两个输入的实际显示效果便区分开了(细节差异保留了).

实际上,伽马校正增大了较暗数值的表示精度,而减小了较亮数值的表示精度,人眼又恰好对较暗数值比较敏感,对较亮数值不太敏感,于是从视觉角度讲,输出的图像质量就被伽马校正"改善"了.

基于这个原因,我们仍然需要进行伽马校正,而既然我们进行了伽马校正,当今的显示器也便保留了非线性输出(伽马展开)的功能,颇有些因果倒置的意思.

更多资料
  • 17
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值