色彩校正中的 gamma 值是什麼?

一直聽到這個詞就是不知道什麼意思,也沒找到特別好的介紹。


視頻封面線性工作流—在線播放—優酷網,視頻高清在線觀看視頻

以上視頻是我一年前對Gamma的理解,最近有了更多體會,故把答案推翻重寫,和大家分享一下。


我打算拋開計算機圖像、顯示器發展史等因素,從邏輯上推出一個「廣義的Gamma」,這樣其實是觸及了問題的本質。把人對畫面的認知,和Gamma出現的必然性都推理出來。


先上結論:


「廣義Gamma」的產生,原因有二:

  1. 人眼對自然亮度感知是非線性的。(韋伯定律)
  2. 我們用來記錄/展示畫面的媒介上,灰階預算是有限的。(無論紙張還是屏幕)

為了在灰階預算有限的前提下,協調自然亮度主觀灰階感受這二者的映射關係,Gamma就產生了。

第一節:韋伯定律

(註:存疑,解釋請看第五節第一段,但不影響本文閱讀,您可以按順序先看下去)

韋伯定律,即感覺的差別閾限隨原來刺激量的變化而變化,而且表現為一定的規律性,用公式來表示,就是△Φ/Φ=C,其中Φ為原刺激量,△Φ為此時的差別閾限,C為常數,又稱為韋伯率。

解釋成人人都懂的大白話就是:人對自然界刺激的感知,是非線性的,外界以一定的比例加強刺激,對人來說,這個刺激是均勻增長的。


為什麼會有韋伯定律?人不是物理測量儀器,我們用感知是不可能測出某事物具體的物理量的,但是我們可以通過比較,來感知世界


以光為例,若在一小黑屋中,點亮了一支蠟燭A,這支蠟燭對屋內的貢獻是顯著的,在視覺上也感受到極大的明度提升。但是若是屋內已經點亮了1000支蠟燭,此時再點亮一支蠟燭B的話,從物理能量貢獻上,這支新蠟燭B與蠟燭A的物理貢獻是一樣大的,但是在人的視覺中,B引起的「明度」變化,遠遠不如A。


為什麼?很好理解啊:對於某事物,同樣的變化量△a,總量少的時候,變化顯著,容易被人感知,事物總量大了,再變化同樣的△a,就不那麼容易被察覺了。


正因為我們在很多時候不需要知道事物客觀的物理量,而是要描述它們的增減關係,所以必須是靠比較來描述,才比較合理,以等比數列增加的物理量,對人的感知來說,是均勻的,比如:

  1. 音樂的音階,是符合十二平均律的,音調的頻率以等比數列增加,人聽起來是均勻升調。兩個八度之間頻率翻一倍。
  2. 聲音的強度是按照「分貝」來描述,倍數增加的音量聽起來是均勻增加的。
  3. 拍照片,描述明亮程度用的是「檔」,曝光物理上大一倍,認為是亮了一個級別。
  4. 里氏地震級數,每增加一級,釋放的物理能量大32倍。

類似這樣的例子太多太多了。


另外有一個家喻戶曉的笑話,實際上直戳這類描述體系的反直覺之處,絕大多數人根本沒意識到,我們以為是均勻增加的量,其實不是線性增加的。


笑話是這樣講的:據說人所能感受到的疼痛分為了10級,1級是被蚊子叮了,10級呢,是孕婦分娩。有人就問了,那什麼是11級疼痛呢?答「11級疼痛就是孕婦分娩的時候被蚊子叮了」。哈哈一笑之餘,有人質疑過這個說法嗎?

現在你懂了韋伯定律,就知道所謂「分娩的時候被蚊子叮」不可能是11級疼痛,由於分娩已經是10級劇痛,此時被蚊子叮所帶來的感受變化量微乎其微,疼痛程度仍然是10級。那麼什麼是11級疼痛呢?一定是「N個孕婦分娩的痛苦以科技手段讓同一個人同時承受」,才是11級。

第二節:中灰


對於中灰的定義,我不敢妄下,我只說我個人的解釋:


「中灰就是人眼能分辨的所有灰階的中間點。」


怎麼理解?我一直以《粉刷匠的故事》,來解釋中灰的意義:


假如你是一位粉刷匠,你擁有充足的白油漆和充足的黑油漆,那麼現在要求你完成一個任務:


把黑白油漆混合成各種不同灰度的油漆,並且把它們排成一排,直到形成黑到白的均勻過渡。


在理想的情況下,會發生什麼樣的情況?你會不斷地調出灰色的油漆,並且把它和已有的油漆相比較,如果它是一個新灰色,你就會把它插入隊列,如果是重複的灰色(肉眼難以分辨,達到了你灰階分辨能力的極限),你就會把它丟掉。


最終,功夫不負有心人,你面前的灰階將會形成從黑到白的均勻過渡,此時的灰油漆種類將會是幾百個甚至更多,那麼最中間那一個,就是中灰的油漆:

這裡粉刷匠為了管理這些好不容易調出來的灰油漆,把它們賦予了合理的編號,根據油漆在隊列中的位置,粉刷匠定義純黑油漆編號為0.0,純白油漆編號為1.0,那麼中灰油漆的編號自然落在了0.5上。與此同時我們還可以得到的推論就是:不管油漆的總數有多少,編號0.0-0.5之間的油漆種類數目,和編號0.5-1.0之間的數目是一樣的,因為從定義上,中灰就是隊伍的最中間那個顏色。我們繼續定義比中灰暗叫暗區,比中灰亮叫亮區,那麼(在低動態範圍下,)人眼可分辨的暗區灰階的數目和亮區灰階的數目是一樣多的。這樣的一個連續的灰階體系可謂完美,用來描述畫面再好不過了。

第三節:物理反射率檢測


面對這樣一個完美的從黑到白過渡的油漆顏料體系,我們如果去檢測一下中灰油漆的反射率,再把它和純白油漆的反射率相比較。若我們定義白油漆的反射率是100%,黑油漆的反射率是0%,你會發現,中灰油漆的反射率不是直覺中的50%,而是一個在20%上下徘徊的數值。


生活中早有這種類似的東西,比如攝影師的灰卡,反射率是白卡的18%:

(據簡單的搜索,灰卡的反射率是白卡的18%還涉及其他原因,18%實際上是17.68的近似值,而17.68是312.5的平方根,具體請閱讀相機拍攝使用灰卡的方法)


在本文中,我舉灰卡的例子不是想告訴你們中灰色的物理反射率已有定論,事實上它沒有也不可能有,在不同顯示媒介和不同的光照的情況下,心目中中灰所對應的反射率是不太一樣的。我舉這個例子只是想拿一個大家看得見摸得著,並且符合國際標準的參照物,來說明:人心目中看起來中灰的色塊,其物理亮度值大約在白色塊的20%左右


根據韋伯定律,這件事是好理解的,下圖是非常粗略的示意圖:

此圖原點是黑色,1,1點是白色,你可以這麼理解此圖:當整體環境較暗,微小的亮度增長也會在人的心目中是顯著的明度提升,當物理亮度達到白色的20%左右的時候,人的心目中已經感受到中灰色的概念。而剩下的一半高光區的灰階,需要用白色80%的物理能量才能照亮成白色。

這一節你只需要記住一個結論,雖然不太精確,但是絕對不會錯得太離譜,這是我個人輔助理解Gamma校正的法寶:


視覺感受的中灰色是白色反射率的20%左右。(註:白色為低動態顏色1.0)


再換成更不精確但更好用的話就是:自然界的0.2,在心目中的地位是0.5。

第四節:「灰階預算很緊張!」


我管這個故事叫《灰色蠟筆的故事》


粉刷匠改行了,他要去做蠟筆,這個蠟筆的要求很特殊,是灰階蠟筆。蠟筆不像油漆可以調出連續的顏色,而是只能調出離散的,有代表性的幾個灰階。


現在如果生產一套暢銷蠟筆,但是灰階預算超緊張,只允許你放進去3支不同灰階的蠟筆,你會選擇哪幾個有代表性的灰色進行生產呢?


我想最合理選擇的就是黑、白、中灰了吧,用它們可以儘可能多的描述畫面的灰階過渡,而這三支筆,借用之前的編號體系,他們的灰階編號分別為:0.0、0.5、1.0。反射率分別為:0%、20%、100%

現在放寬要求,這套蠟筆可以是4色一盒,那麼編號0.0、0.33、0.66、1.0的四支蠟筆入選。反射率分別為:0%、9%、40%、100%

如果是5色一盒呢?則編號0.0、0.25、0.5、0.75、1.0的蠟筆入選。反射率分別為:0%、5%、20%、53%、100%

有人要問了,老韓你先等會兒吧,不同灰度蠟筆的物理反射率你是怎麼知道的?


查這張曲線圖啊,從縱坐標挑選蠟筆的顏色,橫坐標上就是它相對於白色的反射率了,中灰是20%左右的情況下,其他的數據位置也都是可以推算的:

那麼這張曲線圖是不是準確,可就非常關鍵了。曲線圖是靠什麼定義的呢?我們來到下一節:


第五節:廣義Gamma


兄弟們,我不賣關子了,上文這個0-1區間的曲線,就是所謂的Gamma曲線。我們若定義黑是0,白是1,那麼在0-1區間,我們是可以用一個冪函數來描述客觀自然數值和主觀心理感知的對應關係的(等比數列通項公式就是冪函數):

註:知友指出韋伯定律是對數函數,無法直接轉化到冪函數,知友 @TA123 提出,這裡大概應該用 Stevens" power law,來取代韋伯-費希納定律的解釋,Stevens#x27; power law 描述的也是物理刺激強度與感受強度的關係,而其形式是一個冪函數,這個描述方法經常被認為取代了韋伯-費希納定律,因為它描述了更廣泛的感覺。我覺得這個解釋很可能是正確的。至於對數和冪函數有沒有內在聯繫,能否轉化,希望數學好的知友能夠給出一些幫助。)

Gamma取值不同的時候,冪函數圖像是如下規律:

Gamma=1,斜45°直線,不校正,輸出=輸入;


Gamma大於1,曲線下壓,輸出值小於輸入值;


Gamma小於1,曲線上拱,輸出值大於輸入值。


生產蠟筆的時候,我們輸入一個主觀概念:「我想要一支編號0.5的蠟筆」,輸出了一支蠟筆,其反射率是20%左右。那這個Gamma是大於1的下壓Gamma,它把0.5映射成了0.2。


欣賞蠟筆畫的時候,輸入眼睛的亮度正比於顏料在畫紙上實際的物理反射率,「輸出值」就是我們心目中主觀感受的灰階。此時的Gamma上拱,小於1,可以把自然界的0.2的反射率,映射成心目中的0.5灰階。


看懂了嗎?廣義Gamma實際上描述的就是自然現實的物理量和主觀視覺灰階的映射關係。這個關係是非線性映射。


從這個觀點看的話,廣義Gamma無處不在,而且極具啟發性:

我們最熟悉的鉛筆素描,使用黑色鉛筆塗抹暗部,白色是由白紙留白形成,那麼其畫面上的中灰部,鉛筆覆蓋率是多少?答案是80%,留下20%的紙面,這20%的反光,在我們心目中看起來是中灰色的概念。


此時灰階和誰形成了Gamma關係?「心目中的灰階」對應「鉛筆塗抹的工作量」。也就是說,人們只憑目測,天生就可以把自然界的畫面,映射成正確的顏料覆蓋率,在這個過程中,全憑視覺的主觀判斷。視覺感受主導了一切。說白了,媒介上的灰階分布,人是通過目測來調的

第六節:數字攝影和屏幕


第四節中,3色一套、5色一套的蠟筆我們如果想得明白,那麼推廣到我們生產一盒256色的灰階蠟筆,它們的反射率和蠟筆編號的映射關係,我們也是能想明白的:


蠟筆反射率=蠟筆編號^Gamma


256色的蠟筆想得明白的話,這256個灰階和電腦屏幕的像素有區別嗎?沒有任何區別。紙張是畫面媒介,屏幕也是畫面媒介,區別只是反射率變成了像素的光強。


屏幕光強=灰階編號^Gamma


為了把事兒說明白,我們先把8位每通道圖像的數值,換算到0-1區間。8點陣圖上0是黑,255是白,中灰色是128。換算以後,黑是0,白是1,中灰是0.5。


要注意,8位每通道圖像,灰階預算極其有限,僅有256個,如同一盒256色的灰階蠟筆。


當我們在用數字相機拍照的時候,相當於對自然界採樣,並把數據編碼到圖像文件中。

假設光照適宜的場景中有一個中灰色的物體,反射率是白紙的0.2,我們採樣到它的時候,應當把0.2的物理能量用0.454的Gamma放大到0.5的灰階地位記錄下來,這樣一來,暗部區域就分配到128個灰階了。我們充分地利用了存儲空間。


如果在拍照的時候不進行Gamma校正,那麼中灰物體會被映射為0.2記錄下來,那麼此時,暗部僅分配到50個灰階,暗部採樣嚴重不足,高光採樣冗餘。


來到屏幕上,也就是文件解碼端,此時屏幕從計算機中讀到一個0-1的漸變,也就是從黑到白的均勻過渡,圖片如下:

其中左端的色彩值是0,中間的色彩值是128(0.5),右邊是1.0的純白。解碼後,屏幕要以什麼樣的亮度顯示這些像素呢?最左邊像素關燈不顯示,是黑色,中間以白色21.8%的亮度顯示,右邊像素全開,顯示100%白色。這樣的一個圖片,在我們心目中看起來是均勻的灰度漸變。


此時屏幕的解碼Gamma是2.2,這個Gamma,會把0.5映射成0.218。


從這個角度來看。其實眼睛跟「照相機」真的挺像,我們看見自然界0.2的東西,就把它映射成0.5的地位,記到腦子裡了。

總結


總結段要說三個問題:

  1. 2.2怎麼來的
  2. 為什麼一直強調低動態圖像
  3. 如果灰階預算不緊張,會怎麼樣

Gamma=2.2怎麼來的?是實踐中目測調整出來並最終確定的,其實說良心話,只要是0.5中灰對應白色的20%左右,畫面看起來都是靠譜的,所以當年的Gamma特別多種多樣,在2.2上下浮動(1.8-2.5),1996年微軟和惠普在特定的光照條件下測試人觀看顯示器的感受,他們認為,把8點陣圖像中128號灰(0.5灰)這個抽象的、代表心目中中灰色的數值,對應以白像素21.8%的亮度顯示出來,由黑到白的漸變過渡看起來會比較均勻。最終對應的Gamma就是2.2。那麼他們定了這個標準,後世的硬體也就都往上面靠了,包括拍照的時候,編碼Gamma也就取了1/2.2=0.454。這樣能保證整個編碼解碼系統總Gamma是1,高保真,自然界中的色值能在屏幕上相對完好的再現。

凡是說Gamma 2.2來自於老式CRT顯示器物理特性的解釋,都是誤解。這個誤解一般會這麼講解Gamma的來龍去脈:當年老式的CRT顯示器內置Gamma 2.35左右,解碼的時候會把輸入信號壓暗,所以我們呢,為了保證總Gamma接近1,就要預先在編碼的時候把輸入文件的信號提亮,而且這樣一來呢,剛好順應了人眼對暗部感興趣的特點,把暗部的信息多多記錄了下來,充分利用了文件的空間,真是美妙的巧合啊。講起來順暢,聽起來也很美妙,我也曾經這麼給別人講,但是我發現我沒法說服我自己,人類就被一個老式硬體的物理特性決定了後世的工業標準?這邏輯不對。這也是我反對某高票答案,自己過來寫答案的原因。


為啥錯,比如當年要是沒有先發明CRT顯示器呢?假設我們先發明了一個物理Gamma為1的顯示器。當輸入8點陣圖像0.5的數值的時候,它還是要乖乖的把這個0.5映射成白像素的20%輸出出來。否則看起來就不是中灰,8位每通道的顯示器Gamma必須在2.2左右,跟顯示器發展史沒關係,完全是視覺效果決定的。一切都因為韋伯定律。

為什麼一直強調低動態圖像?這個其實涉及到「自然景象再現成畫面」這樣一個複雜的事情,自然界是高動態的,亮度可以非常亮,也可以有一些明亮的光源,所以我在描述中灰的物理量的時候,我不可能描述成場景中最亮的物體亮度的20%,這個最亮的概念會非常不好確定。同一個明亮的場景中,中灰紙張應該是白紙反射率的20%而不是燈泡能量的20%。我如果把高亮物體牽涉僅來,事情就亂了。但是我可以用繪畫舉例子,畫布的動態範圍是有限的,最亮不過是畫布上的留白,屏幕的動態範圍也是有限的,最亮不過是白像素。所以在低動態範圍的語境下,我可以安全的定義,中灰蠟筆的反射率是白色蠟筆的20%左右,中灰像素的亮度是白像素亮度的20%左右,而不是現實場景中最亮物體的20%。這一點是很關鍵的。

另外,一切的前提必須是:灰階預算很緊張,只有灰階有限,我們才需要考慮中灰映射給誰的問題,如果灰階足足的夠用,硬碟不要錢了,網線足夠粗,我們主流不再使用8位每通道圖片記錄亮度信息的話,Gamma是沒必要的,我們直接把自然界的0.2記錄在文件上,顯示器讀取到0.2,也直接顯示就好了——32位每通道的hdr格式就是這樣的。32位格式中,中灰就被記作0.218,所以在32位環境中拉一個0-1的漸變是這樣的,很明顯暗部被壓縮了,高光區很多:

這張圖怎麼理解?它還是0-1的均勻漸變,中間那個顏色還是0.5,只不過32點陣圖中的數值就是自然界的物理量,所以這個色帶對應的其實是現實中的反射率。左邊五分之一20%處是中灰色,中間的像素表現的是反射率為白色50%的物體看起來的灰度,這個灰度是0.5^0.454=73%灰。也就是8位下的186灰。具象的說,如果我有一支蠟筆反射率是50%,看起來就是中間這個灰度。


總之一句話:灰階有限的前提下,因為人眼對自然的非線性感知特性,我們才需要Gamma校正。


具體到生活中的現象就是:因為我們硬碟太貴,網線太細,所以地球人目前主流使用8位每通道的sRGB色彩描述體系,它灰階有限,中灰的地位必須在所有灰階的中間,記錄值為128,而不能是其物理值0.218,把物理量0.218換算成0.5灰階編號的過程,就是編碼端的Gamma校正,Gamma值為1/2.2=0.454。屏幕讀取到128顯示成21.8%的亮度的過程,就是解碼端的Gamma校正,Gamma值為2.2。整個系統Gamma為1。若是有朝一日,32位每通道文件成為主流格式,Gamma校正就會消失。自然數據不經校正直接記錄為文件數據,再不經校正直接顯示。


所以 @渣渣和 @疾風齒輪二位大大的解釋是非常簡潔有力的標準答案,我也是妥妥的給點贊,我作為一個喜歡刨根問底的硬體外行,CG愛好者,從另一個視角進行邏輯解讀,分享一下個人對Gamma問題認知的過程,以饗讀者。


感謝 @烈之斬@Ida Lin@benman@戴巍 @TA123 等朋友關於這個話題的討論,全文推翻重寫,所以還是想反饋一下給各位。


1:人眼對暗部細節比較敏感。
2:圖片文件的色階很有限。圖像的來龍去脈:自然界捕獲的圖像-&>圖像存儲和處理-&>顯示器輸出,兩頭的顏色數量都是非常豐富的,但是中間的存儲和處理出於存儲容量和渲染時帶寬的限制,24位色圖片每個通道只有2^8個色階,總共只能顯示2^24種顏色。

基於以上兩點,我們需要在整個圖像來龍去脈中儘可能保留暗部細節,亮部細節丟掉一些也無所謂。因此有了pow(color, 1/2.2)這個gamma encoding操作,使暗部細節也分到更多色階。得到一張比較「亮」的圖片存儲起來。這張圖片雖然暗部細節都保留下來了,但是不能直接看這張「亮」的圖片,那只是一個中間產物而已。我們需要顯示器做一個pow(color, 2.2)的gamma decoding操作把它壓暗,因為顯示器(特別是高端顯示器)的顏色數是遠大於2^24的,這個操作並不會在壓暗的過程中丟失暗部細節。

總結一下,gamma校正存在的本質原因是:是受限於有限存儲空間及渲染帶寬,需要在整個圖像的流轉各級轉換中儘可能保留暗部細節,以滿足人眼對暗部敏感的需求。人最終看到顯示器顯示圖像和最初從自然界捕獲的圖像大體是無差別的,只是暗部細節損失少,亮部細節損失多罷了。


之前的答案說了很多,資料也很豐富,但在原理上還沒有說通透:

簡而言之,gamma值就是對動態範圍內亮度的非線性存儲/還原演算法。


1. gamma值的存在,歸根到底,是一個解決方案,用於化解「無限的自然存在,與有限的存儲容量/傳輸帶寬」之間的矛盾。

自然界中存在的亮度範圍是巨大的:日光環境下100000勒克斯,陰天環境8000 lux,室內辦公環境300 lux,路燈下5 lux,星光0.0003 lux……

很顯然,亮度級別太多太多。如此龐大的動態範圍,如果按照線性方案進行存儲,那麼存儲/傳輸的代價很昂貴。


2. 人類對於外界刺激變化程度的感受,是指數形式的(或者說感受到的是外界物理量變化的對數)。例如,10倍的聲音我們感受到10分貝的變化,100倍的聲音對應20分貝感受變化,1000倍對應30分貝感受……

人們對於物體明亮程度的主觀感受,也遵循指數規律。1盞燈→2盞燈產生的亮度變化感受,與2盞燈→4盞燈的變化感受是相同的,也就是說2倍物理亮度改變讓我們感受到1「檔」變化,4倍物理亮度改變產生2「檔」感受改變,8倍亮度對應3「檔」主觀改變……

根據實驗測定,人類對明亮程度的主觀感受,線性對應於物理亮度的2.2次方(實際測試結果為1.8-3.5不等,與測試環境的明暗程度有關,也與受試人群有關。)


3. 綜合1、2兩點,非線性存儲方案就是很自然的結論,gamma=2.2就成了影視業的業界標準,並進而成為電腦、IT界的事實標準。

(這種方案有點類似於IEEE浮點數的存儲方案:單精度浮點數只用了4個位元組,就表示出了10e-38到10e+38的巨大動態範圍(此處不考慮0和負數),且在整個動態範圍內其相對誤差基本固定)


4. gamma值的變換分為兩個部分

·
實際亮度→內部存儲(或信號傳輸):存儲數值≒物理亮度的1/2.2次方。在限定條件下,這保證了低亮度的分辨精度,降低了高亮度的量化存儲開銷,從而在總體上獲得了最佳效果(亦即小的存儲/傳輸代價,大的動態範圍,最多的線性主觀感受級別)。這個環節對應於攝像、sRGB圖片存儲過程。

·
內部存儲(或信號傳輸)→顯示還原:顯示物理亮度≒存儲數值的2.2次方。這個環節對應於攝像、sRGB圖片的顯示(還原)過程。


---------------------------


原理性介紹完畢,下面是一些對gamma使用的細節性介紹:


在目前電腦體系中,一般圖片使用sRGB方案,其灰度級別0、1、2…255,對應於線性的主觀亮度感受(物理亮度則是非線性的)。

使用gamma=2.2是正確還原大多數圖片的必要選擇。(鑒於環境明暗的影響,實際上根據環境亮度而在1.8-2.5範圍內調整gamma值有其道理)


對於完整的攝製(繪圖)→存儲/傳輸→顯示還原,其整體gamma應接近於1,所謂所見即所得。

當整體gamma不為1時,就類似於音響加了均衡器,可能更適合用戶口味但不保真。


本機製作的圖片/視頻還原時,在本機上會保持原樣,與gamma值無關。

但考慮到交換/傳輸到其他機器上,則兩個機器gamma值相同時才會有同樣的還原結果。所以本機gamma值還是設為2.2為好。(不考慮交換的請隨意,用戶至上^_^)


對一個現有圖片,在指定顯示器上還原時,其總體明暗範圍固定。

為觀察圖片細節,調整顯示gamma值是為了讓某些細節更清晰,代價是讓另一部分不容易分辨細節。

·
當調大gamma時,表現為總體提亮,原暗部佔據更多明暗範圍、易於分辨細節,原亮部變得更亮(白茫茫,佔據明暗範圍減小)且細節分辨變得困難。

·
當減小gamma時,表現為總體壓暗,原亮部佔據更多明暗範圍、易於分辨細節,原暗部變得更暗(黑乎乎,佔據明暗範圍減小)且細節分辨變得困難。


純黑(亮度0)、純白(亮度255)的交錯網點進行模糊,其平均亮度為50%。在gamma=1的機器上,這與灰度128是接近的;在gamma=2.2的環境下,這與灰度186是接近的(這是gamma=2.2規則所決定的,也可勉強理解為硬性規定)。


電腦顯示系統的亮度動態範圍有限,所以黑屋子的背景是黑色,黑屋子裡黑紙上的黑色鋼筆字還是黑色;白牆是白色,白熾燈、閃光燈、正午太陽也還是白色。這些不在討論範圍之內。


(以上均以灰度作為介紹,RGB單通道的gamma值基本類似)


高票答案已經把Gamma解釋的很透徹了,試著從其他角度說說,權作補充。

1. 一個典型的完整圖像處理系統主要包括攝像採集部件、存儲傳輸部件和顯示輸出部件。這三個部分中都可以引入Gamma的概念。按照國際組織ITU的標準如sRGB,常見的攝像部件中Gamma處理過程稱為Gamma預校正,推薦值為1/2.2=0.4545...,而顯示部件中Gamma推薦值為2.2。兩者相抵最終呈現給觀察者的系統Gamma則等於1。但作為一名工程師,個人看法(純屬個人看法)是:其一,標準制定主要是面向生產商,解決市面產品(攝像機和顯示器)的兼容性問題,顯示部件未必一定得是2.2,只是市面上佔多罷了;其二,只要你能保證整個系統的最終Gamma值為1,又何妨一定要限制攝像機是0.45、顯示器一定是2.2呢?蘋果的Macintosh的Gamma值不就沒遵從這些值么,人家的系統做成封閉的,最後給你一個總Gamma=1也就行了唄。事實上業內也都承認蘋果的系統在色彩管理上也是做的最好的。

結合這個圖我小個結:不管圖像處理流程多複雜,Gamma值的確定視該系統最終的用途而定:如果你通過攝像機採集、處理並最終是給用戶通過顯示器看的,中間各環節的Gamma值你自己定,滿足最後總Gamma等於1就行(當然,不等1也可以,見下述),因為直接進入用戶眼睛的就是線性光,沒經過什麼Gamma變換(這和光進入人眼後的對數型感知不是一回事哦);如果你只是想搞個感測器(如攝像機),模擬一下人眼感知,那好,就設個1/2.2吧,這個高票答案中解釋了為甚麼是2.2.

===========不感興趣的可以return的分割線===============

2. 上面那段其實還隱藏了幾個問題:

  • 總Gamma不等於1可不可以?

當然可以,如果最後是人來做主觀評估,系統的總Gamma值其實稍微大一點點更好,因為暗部略微拉低點,會起到畫面對比度增強的效果,看起來沒準你更喜歡。所以以下會看到系統總Gamma不等1的情況,按照 @韓世麟 同學的說法,就是會用到沒經過補償至2.2的顯示器,也就希望不必糾結於這個問題了。

  • 不是說三個組成部件中都有Gamma么,怎麼只是提到了Scanner/Camera和Display,沒說那個傳輸存儲處理部件啊?

別急,下面會提到。只是我們平時遇到的情況多是不考慮傳輸存儲部件(如電腦,下稱中間部件)的情況,也就是輸入中間部件的都是經過Gamma預校正的信號,如輸入電腦的照片和電影視頻,這些都是照相機或攝像機採集生成的。但在計算機圖形學、平面設計、遊戲設計等領域應該會用到中間部件的Gamma。看下圖:

先解釋四列:第一列是採集部件(掃描儀、攝像機、照相機等輸入設備)的Gamma值;第二列是你看到的圖片或視頻的存儲值(顯示前放在顯卡的幀buffer中);第三列是應用到存儲buffer的查找表(實際就是顯卡Gamma變換LUT表,可為1);第四列就是顯示部件(你的顯示器)的Gamma值(需要注意:上圖中顯示器2.5一律是未補償Gamma值,沒準你用的滿足sRGB標準的顯示器,那就該是2.2了)。


第一行就是在電腦上看視頻看電影時你會經歷的Gamma變換歷程,第一列Gamma Correction當然是攝像機里已經完成的0.4545...變換,你的播放器和你的顯卡都不會再做其他處理(中間環節省略),直接跳到顯示器播吧(總Gamma就是1.25,如果顯示器Gamma是2.2則總Gamma就是1了)。當然如果你在電腦上做個設計,但未用到幀緩存中的查找表或將其設為Gamma=1,則也歸入此類。


第二行就是真正做平面設計人員們情況了。圖片圖形都是你自己生成的,所以採集端Gamma=1,幀緩存Gamma設為1/2.2(可理解為你的軟體如Photoshop中設定的Gamma Correction),然後顯示Gamma為2.5,最後總Gamma=1.14。


第三行SGI工作站,現在用的人少了吧,反正我沒用過。


第四行蘋果的Macintosh系統,它家的掃描儀Gamma=1/1.72,它家的QuickDraw軟體存放生成的RGB值,用到幀緩存Gamma=1/1.45,然後送到它家2.5的顯示器,出來總Gamma結果是1.0。這才是完全封閉的系統,每個環節都可控。


==============要去睡覺的分割線=============


好吧,最後我也得承認我是在都書袋子,以上各圖來自Charles Poynton的《The rehabilitation of gamma》,加入了我自己的一些理解,如有謬誤請糾正為盼。


http://www.poynton.com/PDFs/Rehabilitation_of_gamma.pdf


Gamma Correction的概念的確比較抽象,但在計算機圖形學中非常重要。一般的解釋,比方說已有的答案中,往往忽略兩個背景知識:人類的視覺特性和古老的 CRT 顯示器。在我看過的所有資料中,都沒有人提到過,Gamma 的廣泛應用很大程度上是因為一個神奇的巧合。

從字面上看,Gamma指的是指數運算中的指數。比方說 A 的2.2次方,Gamma 指的就是2.2這個數字。計算機圖形學中顏色值,特別是 RGBA 值都是用0到1的浮點數表示。顏色的 Gamma 矯正本質上就是一系列介於0到1之間的浮點數進行指數運算,通常來說這個數字是2.2。

為什麼要進行矯正?為什麼是2.2?

從人類的視覺特性說起。人類的視覺系統進化出了一個特性,黑暗環境下的辨識能力要強於明亮環境,這可能有助於我們及時發現黑暗中隱藏的危險。如果有興趣,可以在計算機上繪製一條從白到黑的漸變條,你會發現明顯黑色部分的色階要多於白色部分。這並不是你的顯示器問題(當然也有可能真的是你的顯示器太差……),而是因為我們對於暗色的分辨能力遠超過亮色。那麼在有限的計算機顏色(民用顯示器和操作系統中黑色到白色256個色階)中,亮色和暗色均勻分布的話,那亮色部分就會精度過剩而暗色部分就會精度不足。如何解決這個問題?進行 Gamma 矯正。

上圖中的紅色虛線就是圖像的 Gamma 矯正曲線,一般都是2.2的倒數,0.454545..。觀察矯正以後的曲線,原來0到0.5的區間被擴展到了0到~0.73,相應的大於0.5的區間被壓縮到只有原來的一半左右。這樣通過一次簡單的計算,我們達到了不增加數據量的前提下提高可辨識精度(Perceptual precision)的目的。可能從來沒有人告訴過你,存儲在你硬碟上的圖像,都是矯正過的,如下圖,中間那個。

當然有人可能會問,矯正以後豈不是喪失了很多亮部的細節,也不合算呀。這個問題取決於存儲的數據格式,一般的格式都有足夠多的冗餘精度,足有保存矯正前後的所有細節,但是對於某些特定的壓縮格式,比方說遊戲普遍使用的 DXT 壓縮格式,精度只有6Bit,也就是64階,Gamma矯正後很多細節永久喪失了(當然壓縮演算法也會丟失很多)。

現在我們知道了對圖像進行 Gamma 矯正的本質上的原因——因為我們的眼睛。那麼為什麼是2.2的倒數?

因為老式的 CRT 顯示器。

陰極管顯示器有一個物理特性——輸入值和輸出值呈現指數關係,這個指數是2.2。也就是說,當你輸入0.5的亮度,在屏幕上得到的不是0.5,而是0.5的2.2次方,約等於0.218。仍舊是這個圖:

下面的曲線就是 CRT 顯示器的 Gamma 曲線。

當我們在 CRT 顯示器上顯示一張 Gamma 矯正過的圖像,也就是上面的那根曲線,就會獲得所期望的線性圖像——中間那跟灰色的直線。你看,對圖像進行Gamma 矯正即可以獲得我們想要的精度,又能在 CRT 顯示器上正確顯示,這豈不是一個美好的巧合?

事實上我們之所以選擇2.2的倒數進行圖像矯正,那是為了迎合 CRT 顯示器的特性。如果顯示器的 Gamma 值不是2.2,那麼圖像矯正 Gamma 值也需要相應變更,比方說早年的 Mac 操作系統都是使用1.8的 Gamma 值。現代的 LCD 顯示器已經不再具有這個特性,但是生產廠商仍舊會加入模擬 Gamma 曲線的硬體功能,也就是說所有顯示器都期待軟體輸出 Gamma 矯正過的圖像。

總結一下,所謂 Gamma 矯正就是對顏色進行指數運算。對圖像進行矯正是為了獲得符合人眼特性的可辨識精度。矯正使用的Gamma 值取決於顯示器,現代系統基本上都統一使用2.2。

Gamma 矯正的確是一個隱藏的比較深的問題,別說普通人,長久以來遊戲界也一直沒有重視。計算機圖形學中的演算法普遍需要輸入值處於線性空間,而讀入的圖像卻都是矯正過的——處於 Gamma 空間。最終得到的計算結果自然也是不正確的。當然遊戲圖像往往可以通過美術師的人為修改來得到符合期望的圖像,但從數學上來說,這是錯誤的……而且整個行業錯了幾十年,直到這幾年這個問題才被重視起來,產生了所謂了 Gamma Corrected Pipeline。

左側是一張真實的照片,右側上方是線性空間(正確)的運算結果,下方是 Gamma 空間(錯誤)的結果。這種錯誤的結果我們用了很久……

3D 圖像的渲染本質上是對真實世界進行模擬,近幾年(特別是2014年)興起的 Physically Based Rendering 特彆強調貼圖材質燈光的統一性和物理真實的渲染效果,自然不能容忍在整個系統的底層存在不正確的 Gamma 矯正這樣的大烏龍……

要達到這樣的實時渲染效果,Gamma 一定要搞對……希望我這個回答能讓讀者徹底搞清楚 Gamma Correction 的來龍去脈。如果仍舊有疑惑,請留言。


了解很少,只能簡述供參考。

色彩管理中提到的「Gamma 校正」,一般是指在色值(或信號數值)的編碼 / 解碼過程中,對數值進行的非線性處理——簡而言之,對輸入數值進行一次冪運算(可能會再乘以某個係數),然後得到輸出數值。上述冪運算中使用到的冪值,通常記作 gamma (γ)。

一個最簡單的例子:
V_{out} = V_{in}^{2.2}

這個關係式中,數值「2.2」就是一個解碼 gamma 值,常見於輝度(luminance)校正。


上頭的答案都很抽象與專業,我回答一下通俗的。
伽馬值,簡單來說就是灰度。這是早期顯示器與人眼的光學研究的一種適應參數。一般遊戲裡面你弄到眼睛看得舒服就好了。
你可以像調整亮度對比度這些放一起調整就好了。


後學末進才疏學淺,試圖用不那麼抽象的方式聊聊我理解的顏色空間。

必然有誤與疏漏,懇請各位大大指正,拜謝。

參考了 @韓世麟 以及參與本題目的所有大大~。

以及
【圖形學】我理解的伽馬校正(Gamma Correction)
[Unity3d]總結Gamma Space與Linear Space
Unity3D - 顏色空間 (Color Space)

一、顏色空間

  • 做圖形相關工作的大多都見過顏色空間這麼四個字,它裡面包含Gamma顏色空間和線性顏色空間。

線性空間:顏色按線性漸變的空間

Gamma空間:暫時理解為顏色不按線性漸變的空間

——這不是廢話嘛,問題來了:

  • 線性空間好理解,顏色按線性漸變。
    • 你可以理解為一個為一個純黑墨水池子,每次往裡加一滴(等量)純白色顏料,顏色逐漸變淺,直到純白。記錄下每次的色值,你就得到了一個從黑到白的線性漸變。
    • 使用線性漸變的顏色空間,咱們就叫他線性空間。
  • 既然有線性空間,就一定有不是線性的空間——Gamma空間。

二、Gamma是啥

正式講Gamma是啥之前,咱們先做一個有趣的對比試驗:

(一)第一步

  1. 這是我在PHOTOSHOP中新建一個文件,如下圖:
  2. (話說你要是不信我的圖,你自己也可也去PS里建一個~)
  • 圖1:500*150 / 解析度75 / 顏色模式RGB 8位 / 背景白色
  • 然後從左(黑)到右(白),水平拉一條漸變,起點終點位於畫布左右兩端。

來讓我們進行如下操作:

  • 找出圖1中你認為的明暗分界線的大概位置。說的直白一點,你認為亮部和暗部大概從哪裡分割比較合適。
  • 我估摸著大多數人選擇的位置應該是下圖紅線(或差不多)的位置吧?

  • 在圖1里,我們之所以選擇了一個大概在中間的位置做明暗分界線,是因為我們認為紅線左面(暗部)和紅線右面(亮部)的信息一樣多。
    • 因為最左面是純黑,最右面是純白,而且咱們對這個漸變過程的體驗也挺自然。
    • 對於黑,白,漸變過程自然這三點咱們應該都沒什麼異議。
    • 所以自然暗部亮部信息一樣多,否則就是漸變不自然嘛~
  • 現在,和你的大電腦擊掌慶祝吧!巧了,它也是這麼認為的。你們在圖1的明暗分界線這一點上,達成了令人驚喜的共識。
  • 你問我怎麼知道電腦也是這麼認為的?當然是一系列縝密優雅又符合邏輯的數學運算————跟著我進行如下騷操作:
    • 打開你的大QQ,用它的截圖工具的大箭頭,瞄準圖1最(「最!」敲黑板)左面,最黑的地方,觀察箭頭數值,是不是RGB(0,0,0),嗯,記在心裡或本兒上。
    • 好,咱們再去最(敲黑板)右面,最白的地方,大箭頭瞄準它,是不是RGB(255,255,255)?差那麼1-2個數的,一定是你自己擼多了手抖吸不準,也別較這個真兒了,無所謂的,差不太多就得了。
    • 現在咱們去紅線附近吸一吸~注意別傻乎乎的去吸紅線的紅色,要吸紅線附近的灰色,咱們觀察的是從黑到白的漸變,跟紅沒關係。你在紅線低端或者頂端吸都行。
    • RGB數值是多少?是不是RGB(128,128,128)左右?
    • 重點來了!縝密優雅又符合邏輯的數學運算來了!現在我們知道從黑到白是從0-255的過程,那麼我們開始計算——255+1(+1是為了0,0,0佔去的那1位,也就是說黑到白經過了256個過程),再除以2,我們得到了這個漸變的中間點,咔嚓——結果正好是128!
    • 驚不驚喜,意不意外?————把這個128,128,128記在心裡,他就是你和你家大電腦都認為的明暗分界線,也就是中間亮度。這個結果合情合理符合邏輯。
  • 這時,相信你一定有一個疑問,為什麼是256?這就要說到這張圖片的格式了——RGB8位,這個格式是電腦用來存儲圖片的,你可能聽說過的sRGB也是8位的。
    • 8位代表了什麼?8代表2進位的2的8次冪,就是256。也就是說它代表三原色(紅綠藍RGB)的色階最多只有256(從0到255)種,就是256種紅,256種綠,256種藍,用這麼多的顏色我們能調成256 X 256 X 256 = 16777216種顏色。怎麼樣,夠你折騰了吧?說實話,並不是所有人都能分辨出256種不同的紅,反正我是不能~
  • 那為什麼要有8點陣圖?因為8點陣圖的色彩夠你折騰了啊!在這麼多色彩給你折騰的前提下,佔用的存儲空間也比較小啊!
    • 再觀察圖1,注意圖一邊框下部的:文檔:219.7K,看到木有,還不到1/4MB啊!一張500*150大小的圖還不到1/4MB啊!你拿8點陣圖網路傳輸、做個貼圖渲染什麼的,存儲空間成本和效率成本都比較好啊。
    • 所以!(敲黑板),拿頁游,手游舉例,等一系列對圖像品質要求不高的平台,我們使用的貼圖都是8位的,你聽說過的sRGB也是8位的,沒聽說過就無視。因為8位占空間小,色彩表現能力(數量)又符合平台需求,渲染效率更符合平台能力(比如適合網路傳輸,適合手機GPU渲染等)。
  • 好了,說了這麼多,你得到了兩個新姿勢!
    • a. 從黑到白的明暗分界線的色階是RGB(128,128,128)。
    • b. RGB8位是什麼,有什麼用。
    • c. 我有姿勢我自豪。

(二)第二步

  • 既然是對比試驗,就一定要有對比對象,下面我們來進行第二步:
  • 下面是我在PHOTOSHOP中新建的另一個文件。
  • 如下圖:(建議你照著我的,去PS里再建一個~一會可能用得到)。
  • 圖2:500*150 / 解析度75 / 顏色模式RGB 32位 / 背景白色。
  • 然後從左(黑)到右(白),水平拉一條漸變,起點終點位於畫布左右兩端。

咱們都知道了一個從黑到白的漸變里,明暗分界線的色階是RGB128,COMEON,咱們在圖2里找到這個點!

  • 掏出QQ截圖的大箭頭,瞄準圖2,在上面移動箭頭,找RGB(128,128,128)。

    • ……傻了吧?無語了吧?糾結了吧?為什麼不在中間了?而是出現在了約等於漸變過程0.2的位置?
    • 為什麼明暗分界線跑到了0.2的位置,少了的30%的暗部去哪了,相應的多了30%的亮部又是什麼鬼?而且這個漸變過程看起來好像不自然啊,白的那麼多,黑的太少了!
    • 好的,你提出了三個問題,暗部減少,亮部增多,漸變不自然。

(三)下面我們依次回答這三個問題:

  • 1. 暗部去哪了:
    • 暗部沒減少,反倒增多了。
    • 因為圖片格式變成了32位,它有了更多的色階來表現顏色。
    • 你不應該再用QQ吸管,而是應該去PS里建一個32位RGB圖片觀察色板。
    • 它不再是RGB0-255,而是變成了0.0000-1.0000。
    • 代表了RGB三原色的更多色階。
    • 你之前劃分的暗部仍然在紅線的左側,那128個暗部色值都沒有消失。
    • 相反,32點陣圖提供了更多的色階來表現暗部,數量也遠大於128。具體數量不需要關心,也不是2的32次方,感興趣的可以自行查閱32位RGB,不在本文展開。
    • 也就是說32位格式下,使用了0.2的空間,表現了8位格式下佔一半的暗部,不僅如此,還附送了多得多的暗部細節,因為色階變多了嘛,雖然作為人類,我們可能感受不到那麼多色階變化..。
  • 2. 亮部增多了:
    • 沒錯,確實多出來許多的亮部信息。
    • 32位格式下,多出來的亮部信息,包含8位原本的亮部信息,以及大量你可能難以區分的亮部信息。
    • 至於原因,下文看完就懂了。
  • 3. 漸變不自然
    • 「黑少白多,漸變不自然」————那是你以為。
    • 這才是自然界中真實的漸變,因為這才是線性的,每次滴入等量白色顏料的從黑到白的漸變。
    • 之所以你會覺得漸變不自然,是因為人類的眼睛對暗部的變化更為敏感(至於理論方面的依據,請自行搜索,本文只說結論)。

(圖中的英文意思是:基本相同。)

    • 綜上所述,你之所以會認為一個線性的漸變過程「不自然」,是因為你對亮部的細節變化不敏感,或者難以察覺。因此得出了「黑少白多,漸變不自然」的結論。
    • 也就是說,你覺得32位下的線性漸變,亮部區域出現了過多的冗餘信息。

(四)通過32位的線性漸變,我們得出了一個什麼結論:

  • 原本我們在8點陣圖中找到的明暗分界線RGB(128,128,128)在自然界的線性漸變中,大致處於前20%的位置,即0.2的位置。
  • 之前的8點陣圖1欺騙了我們,它如實的把你認為的0.5老老實實的記做了0.5,而不是實際的0.2。它出了問題。
  • 跟著我唱:「你說黑不是黑,你說的白是什麼白~~」。

(五)8點陣圖為什麼要騙我

  • 8點陣圖君:
    • 我也不想啊,我要是把你認為的明暗分界線轉(0.5)換成實際線性漸變記成0.2,色階不夠用啊。
    • 你們人類對於暗部敏感,我要是把你認為的0.5,記成0.2,那暗部色階就只有256*0.2=50個左右的色階來存儲暗部,50個左右,明顯不夠用啊。
    • 然後餘下的色階卻要用來表現你們人類可能感受不到的亮部,太浪費啊。色階有限啊。
    • 所以我只能把你認為的明暗分界線就記做0.5,然後去掉一部分你們感受不明顯的亮部色階,以此換來跟多的暗部色階存儲空間,來適應你們人類的感受啊。

(六)8點陣圖怎麼把那個實際的0.2,轉換成0.5的?

  • 當然不是直接的把0.2記成0.5就行了。
  • 0.2-0.5的轉換過程本質上是一個全局提亮的過程,這個過程被稱作Gamma校正。

三、遲來的正文

(一)Gamma校正

  • Gamma校正被使用在8位RGB圖中。
  • 用來解決在有限的存儲空間中保存儘可能多的人類感受敏感的色彩內容。

(二)Gamma怎麼校正

  • Gamma校正的方式就是採樣時,和輸出到顯示器給人類看時,對亮度進行的調整.
  • 採樣時 Gamma=1/2.2 調亮Gamma
  • 顯示時 Gamma=2.2 調暗Gamma
  • 下圖:配合後文說明看下圖 , 彩色曲線為Gamma曲線

  • 實際亮度(X軸)=&>內部存儲(Y軸) 存儲數值 = 物理亮度的1/2.2次方
    • (即對應使用1/2.2位置的Gamma曲線)
    • 假設實際亮度X軸為0.2,存儲數值將為0.2的1/2.2次方,即Y軸0.5
  • 內部存儲(X軸)=&>顯示還原(Y軸) 顯示的物理亮度 = 存儲數值的2.2次方
    • (即對應使用2.2位置的Gamma曲線)
    • 假設內部存儲X軸為0.5,顯示物理亮度將為0.5的2.2次方,即Y軸0.2

(三)Gamma校正與8點陣圖

  • 看完上面的說明,有點抽象了吧?沒關係,咱們直接說結果。
  • 8點陣圖使用的顏色就經過Gamma校正過的顏色。
  • 經過Gamma校正後,得到了更多的暗部存儲空間,犧牲掉了一些不重要的亮部存儲空間。
  • 它把你認為的0.2通過Gamma校正成了0.5,因為Gamma校正本身是一個非線性的調整過程(觀察Gamma曲線圖:Gamma為1,即是中間那條直線,表示未校正,那麼Gamma為1時,漸變是線性的。其他的不是直線,不是直線你就當他是非線性,好理解吧?)。
  • 那麼問題來了:顯示器顯示8點陣圖片時,我們已知現在主流顯示器的色彩要大於8位,多數都是32位真彩色,那麼請問,顯示器接受到8點陣圖片存儲的0.5時,顯示的是32位顏色中(以圖2位例)0.5位置的顏色,還是0.2位置的顏色。
  • 沒錯,顯示器顯示的時候也經過了一次Gamma校正,它把0.5又變成了0.2.
  • 如果不經過這一步,直接輸出0.5,因為顯示器是32位的,那麼你在屏幕上得到的將是位於圖2中間位置的那個顏色,你會說這個顯示器有問題,顏色不準確,亮瞎了。
  • 綜上所述,我們用了一大圈,總算明白了8點陣圖為什麼是非線性的。

四、Gamma色彩空間與線性色彩空間與渲染

  • 色彩空間簡單的理解就是我們在創作一張圖片時使用的顏色表。
  • 線性色彩空間就是沒經過Gamma校正的顏色表 - 如圖2。

  • 非線性的色彩空間就是經過Gamma校正的顏色表 - 如圖1。

(一)渲染時使用的顏色空間

  • 在下剛學Unity,所以只能拿Unity舉例:
  • 在Unity渲染中,存在兩個顏色空間
  1. Gamma(非線性)顏色空間
  2. Linear(線性)顏色空間
  3. 現在再來看這兩個顏色空間應該不陌生了吧,至少我們知道他們表達的是什麼意思。
  4. Gamma顏色空間里使用的是一個進過校正(閹割)過的顏色表。
  5. Linear顏色空間里使用的是一個線性的完整的顏色表。

(二)渲染

  • 渲染是一個很複雜的過程,涉及步驟有許多,不在此展開討論。
  • 但無論多複雜的過程,多複雜的燈光、材質等等亂七八糟的東西,它始終離不開圖片,顏色。
  • 圖片是通過顏色空間中的顏色創作出來的,那它就一定存在著一個問題,是否經過Gamma校正。

(三)Linear顏色空間

  • 在Unity中,如果使用Linear顏色空間,除非對指定圖片選擇了ByPass sRGB(忽略sRGB,你理解為忽略Gamma校正),否則所有的圖片都會默認變成sRGB格式。
  • 這樣做的目的是把你在Gamma顏色空間里創作的圖片裡面的顏色給校正到正確的32位顏色,再參與GPU渲染計算。
  • ByPass sRGB的意思就是直接使用這個0.5,不用再校正了,除非你是在線性顏色空間里創作的圖片,否則不建議這麼干。
  • 然後,GPU再把結果Gamma校正一次,0.2-0.5,這樣做的目的是:顯示器不管你到底幹了什麼,他老人家是一定要在最後Gamma校正一次的(0.5-0.2)。
  • 顯示器按照接受到的值進行Gamma校正(0.5校正到0.2)給你看。
  • 在這個空間里進行渲染,因為使用的是線性的顏色空間,因此你會得到非常真實的表現效果。
  • 但是,因為色彩豐富的同時,帶來的各項成本,如硬體渲染能力的需求也會增加。

(四)Gamma顏色空間

  • 在這個顏色空間內渲染,GPU不會再Gamma校正,而是直接使用存儲的值參與渲染計算,因為大家使用的都是閹割版的顏色嘛。
  • 但是在這個空間里進行的渲染,因為使用的是閹割過的Gamma顏色空間,因此你會得到不符合真實表現的效果。
  • 在最終輸出到顯示器的時候,仍然會經過Gamma校正,將渲染後的0.5,表現成0.2給你看。
  • 因為使用了較少的顏色(相對於線性顏色空間),因此會得到比較好的渲染效率以及較低的渲染能力需求。但是圖像會存在失真(偏暗,因為亮部細節表現不夠)等一系列問題。
  • 下圖這種現象的成因,就是本文討論的內容。
  • Gamma顏色空間的亮部信息缺失,造成了數值上升時亮度變化過快,畫面迅速變白。


說人話的簡要原理解釋如下:
假設人的亮度識別範圍是1度-9度,如果一張圖上的點亮度都在1到3度,那麼這個圖會太暗,我們可以把原亮度都平方一下,那就變1-9度的亮度,看起來就比原來亮多了,舒服多了。
同時原來的2變成4,2.5變成6.25,原來0.5度的亮度差變成2.25度的亮度差,意味著我們可以比原來更清楚的看到更多細節。
實際的演算法和人眼的識別範圍,包括顯示器特性等,可才看高票答案。


樓上一些答案已經被回答者自己臆想,加了很多自己的想法,不敢苟同。如有興趣可自行研究參考文獻(圖片中已有標註):

參考文獻:

維基百科 Gamma correction(英文版)

Poynton"s Gamma FAQ and Color FAQ

網址 http://www.poynton.com/Poynton-color.html

Cambridge in colour

網址 http://www.cambridgeincolour.com/tutorials/gamma-correction.htm


Peachpit

Color Correction in Adobe After Effects CS3

可關注微信公眾號:小7的背包


在閱讀 Applications = Code + Markup: A Guide to the Microsoft Windows Presentation Foundation 裡面有這樣的內容 :

寫這個答案只是感嘆下,在知乎論壇「隨機學習知識」和自己「系統性學習」的不同。

太多以前自己看到大神的回答,原來在相關的書籍上都有很好的答案。

自學編程久已,苦已,求一天的頓悟。


之前我寫過一個關於gamma校正的筆記,並不是很專業,但自認為還是講得比較明白。
https://zhuanlan.zhihu.com/p/26644788


輸入處於灰階中心位置。但未校正前,輸出大於感官中心值,在感官中心偏右;校正後,輸出才處於感官中心位置,能和輸入線性對應。


有個問題需要指出: 「我們是可以用一個冪函數來描述客觀自然數值和主觀心理感知的對應關係的(等比數列通項公式就是冪函數)」,等比數列通項公式是一個指數函數的規律(底數是常熟,指數包含了自變數),而不是冪函數規律,所以,假設Gamma冪函數曲線是對的,但是從韋伯定律(等比通項規律)來引申出伽馬函數曲線是很牽強的。意思也就是說,假設Gamma曲線是對的,關於Gamma曲線所基於的現實原理仍未找到。


感謝各位大神的分析,我只想說一句:灰階是從0-255,共256個灰階,中間灰階是127!


gamma只是一個函數變數。
應該回歸信號處理的本質。
我拋個磚頭,專家補充。


感謝作者,讓我們這些外行也看得懂。我轉載到了 CSDN,有註明出處及作者。


正好上學期攝像課有這個作業
What is GAMMA?
Gamma is a numerical value that indicates the
relationship between the input and the output
signals of a camera/monitor, as illustrated in
the graph below. Generally, the straighter the
gamma curve becomes (γ=1), the more natural
the image appears to the human eye.
Because monitors have a gamma curve with a
value of 2.2, the camera is usually set up with
a reverse 0.45 gamma so the resultant curve is
close to a straight line. The lower area of the
curve affects dark colors while the higher area
determines the colors close to white. The
middle area represents colors in-between.
The GAMMA function mainly corrects the color
of middle areas of the curve.


Gamma值是灰階亮度值與灰階等級之間的數學關係。灰階從暗到亮分為256級的話,把亮度也分為256級,假設最暗的亮度為1,最亮的亮度為201,gamma值為2.2,那麼第5階的亮度=(201-1)*(5 / 256)^2.2 + 1,「^2.2」是2.2次方的意思【如果這點數學知識還回老師,就算了,來找我吧】


其實很簡單,就是指數,冪運算的上標。不要搞得太複雜,神秘。舉個例子對於gamma 值1.8而言就是把原有圖像的每個像素顏色進行冪運算,上標1.8.類似的還有log。。。

如果你對Color grading 很感興趣的話,應該從對 color space 的了解入手,否則,去談gamma 啊,log 啊等等都是緣木求魚。


推薦閱讀:

家居飾品色彩怎麼搭配?
光的三原色和顏料的三原色不一樣嗎?為什麼?
黑色之所以呈現為黑色是因為吸收所有光還是反射所有光還是不反射所有光?
瓷磚顏色和填縫劑如何搭配比較和諧?
光混色為什麼是加亮色?顏料混色為什麼是減亮混色?

TAG:數字信號處理 | 色彩學 |