摘要:
伽馬校正相關的資料說明很多,但其中不少內容都寫的比較繁雜,令人難以理解, 本文嘗試簡單解釋一下伽馬校正的相關內容~
早期的 CRT 顯示器存在非線性輸出
的問題,簡單來說,你給 CRT 顯示器輸入(input)一個0.5
(**
注意,輸入範圍為[0,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
所以當你輸入0.5
時,輸出即為:
0
.
2
1
8
≈
0
.
5
2
.
2
其中2.2
這個指數即為伽馬(gamma)值
,而顯示器的這種非線性輸出過程則稱為伽馬展開(gamma expansion)
.
為了能夠得到正確的輸出,我們必須對輸入進行補償,方法就是對輸入進行一次指數為1 / 2.2
的冪次運算,這個補償的過程便是伽馬校正(gamma correction)
, :
i
n
p
u
t
→
i
n
p
u
t
1
/
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
所以為了讓顯示器正確輸出0.5
, 我們需要對0.5
進行伽馬校正,實際給顯示器的輸入約為0.73
:
0
.
5
→
0
.
5
1
/
2
.
2
≈
0
.
7
3
看到這裡你可能會有個疑問:既然伽馬校正起源於早期 CRT 顯示器的非線性輸出問題,而我們現在基本已經淘汰掉這些顯示器,並且當今的顯示器已經可以做到線性輸出了(輸入0.5,輸出也是0.5
),那麼我們是不是可以直接廢棄伽馬校正了呢?
答案可能有些出人意料 :我們仍然需要進行伽馬校正!
原因有些巧合 : 伽馬校正除了可以解決早期 CRT 顯示器的非線性輸出問題
, 同時還可以幫助我們"改善"輸出的影象質量
:
人眼對於較暗(接近0)的亮度值比較敏感,對於較亮(接近1)的亮度值則不太敏感,假設我們現在使用一個位元組(能夠表達整數範圍[0,255])來儲存亮度值(之前都忽略了亮度值(輸入值)的表示問題,這裡需要考慮
),並且我們要儲存0.240
和0.243
這兩個亮度值,如果不進行伽馬校正,則有:
v
a
l
u
e
_
1
=
0
.
2
4
0
∗
2
5
5
=
6
1
.
2
v
a
l
u
e
_
2
=
0
.
2
4
3
∗
2
5
5
=
6
1
.
9
6
5
⟶
c
l
a
m
p
6
1
⟶
c
l
a
m
p
6
1
可以看到0.240
和0.243
的儲存數值都是61
,所以這兩個輸入的實際顯示效果其實是一樣的(細節差異丟失了).
但如果我們進行一次伽馬校正,則有:
v
a
l
u
e
_
1
=
0
.
2
4
0
1
/
2
.
2
∗
2
5
5
≈
1
3
3
.
3
v
a
l
u
e
_
2
=
0
.
2
4
3
1
/
2
.
2
∗
2
5
5
≈
1
3
4
.
1
⟶
c
l
a
m
p
1
3
3
⟶
c
l
a
m
p
1
3
4
0.240和0.243
的儲存數值變為了133
和134
,所以這兩個輸入的實際顯示效果便區分開了(細節差異保留了).
實際上,伽馬校正增大了較暗數值的表示精度,而減小了較亮數值的表示精度
,人眼又恰好對較暗數值比較敏感,對較亮數值不太敏感,於是從視覺角度講,輸出的影象質量就被伽馬校正"改善"了.
基於這個原因,我們仍然需要進行伽馬校正,而既然我們進行了伽馬校正,當今的顯示器也便保留了非線性輸出(伽馬展開)的功能,頗有些因果倒置的意思.
更多資料