伽瑪校正
伽瑪校正是對像素亮度進行的非線性調整,遵循冪次律:輸出等於輸入的伽瑪次方。它之所以存在,是因為成像鏈中幾乎沒有任何環節是線性的。老式 CRT 螢幕發出的光大致與電壓的 2.2 次方成正比,而人類視覺本身也是非線性的,對暗色調之間差異的敏感度遠高於亮色調之間。伽瑪校正就是補償這些彎曲響應的槓桿,讓你拍攝、儲存與顯示的結果保持一致。
形式上,把強度正規化到 0 到 1 範圍後,轉換為 V_out = V_in 的伽瑪次方(常帶一個比例因子)。伽瑪小於 1 是一條提亮曲線,會抬升陰影,用於編碼時,好讓有限的位元預算更多花在我們眼睛仔細審視的暗色調上;這稱為伽瑪壓縮或編碼。伽瑪大於 1 則會壓暗,通常在顯示時套用(伽瑪展開或解碼)。真正的 sRGB 標準並非單一指數,而是一條分段曲線:靠近黑色處有一小段線性區,再接上約 2.4 次方的冪次律,整體等效伽瑪接近 2.2。
讓人栽跟頭的微妙之處在於:大多數影像檔案儲存的是伽瑪編碼(感知)值,而非線性光。任何在物理上把光合併起來的運算,混合兩張影像、縮放、模糊、抗鋸齒或 alpha 合成,都只有在線性值上才正確。直接對伽瑪編碼像素做這類數學運算會使漸層變暗、縮小後的影像變黯淡、並產生邊緣雜色。解法是先解碼到線性、完成運算、再重新編碼。而「伽瑪」一詞被同時用來指編碼伽瑪、顯示伽瑪與端到端(系統)伽瑪,更加深了混亂。
在未線性化的情況下縮小一張黑白棋盤格,得到的灰會看起來太暗(約 0.22 而非感知上的 0.5),因為平均是在編碼值上取的;先線性化、平均得 0.5、再重新編碼即可修正。
為何重要:在伽瑪編碼空間中進行濾波、縮放與混合是一個無聲卻普遍的錯誤。在黑與白之間、以伽瑪 2.2 編碼的 50% 灰中點,儲存值約為 0.73 而非 0.5,因此天真地對像素取平均在物理上是錯的,請先線性化。