3

简单理解伽马校正

 3 years ago
source link: https://blog.csdn.net/tkokof1/article/details/87878442
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
简单理解伽马校正_tkokof1的专栏-CSDN博客_伽马校正

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

早期的 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} output≈input2.2

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

0.218 ≈ 0. 5 2.2 0.218 \approx 0.5^{2.2} 0.218≈0.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} input→input1/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 ​input→input1/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.5→0.51/2.2≈0.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 ​value_1=0.240∗255=61.2value_2=0.243∗255=61.965​⟶clamp​61⟶clamp​61​

可以看到 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 ​value_1=0.2401/2.2∗255≈133.3value_2=0.2431/2.2∗255≈134.1​⟶clamp​133⟶clamp​134​

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK