Gamma校正
問題:什么是Gamma曲線矯正?Gamma曲線矯正是什么意思?
Gamma曲線是一種特殊的色調曲線,當Gamma值等於1的時候,曲線為與坐標軸成45°的直線,這個時候表示輸入和輸出密度相同。高於1的Gamma值將會造成輸出亮化,低於1的Gamma值將會造成輸出暗化。總之,我們的要求是輸入和輸出比率盡可能地接近於1。在顯示器、掃描儀、打印機等輸入、輸出設備中這是一個相當常見並且比較重要的概念。在計算機系統中,由於顯卡或者顯示器的原因會出現實際輸出的圖像在亮度上有偏差,而Gamma曲線矯正就是通過一定的方法來矯正圖像的這種偏差的方法。一般情況下,當用於Gamma矯正的值大於1時,圖像的高光部分被壓縮而暗調部分被擴展,當Gamma矯正的值小於1時,圖像的高光部分被擴展而暗調部分被壓縮,Gamma矯正一般用於平滑的擴展暗調的細節。
圖1 CRT顯示器的亮度響應曲線圖
圖1顯示的是一般CRT顯示器的亮度響應曲線,可以看到其輸入電壓提高一倍,亮度輸出並不是提高一倍,而是接近於兩倍,顯然這樣輸出的圖像同原來的圖像相比就發生了輸出亮化的現象,也就是說未經過Gamma矯正的CRT顯示器其Gamma值是小於1的。
沒有經過Gamma矯正的設備會影響最終輸出圖像的顏色亮度,比如一種顏色由紅色和綠色組成,紅色的亮度為50%,綠色的亮度為25%,如果一個未經過Gamma矯正的CRT顯示器的Gamma值是2.5,那么輸出結果的亮度將分別為18%和3%,其亮度大大的降低了。
圖2按圖進行曲線補償
為了補償這方面的不足,我們需要使用反效果補償曲線來讓顯示器盡可能地輸出同輸入圖像相同的圖像,所以這個時候顯示器的輸入信號應該按照圖2所示的曲線進行補償,這樣才能在顯示器上得到比較理想的輸出結果。
圖3理想狀態下的曲線
一般的反效果可以直接被賦予存儲在幀緩存中的圖像,使之Gamma曲線呈非線性,也可以通過RAMDAC進行這種反效果補償(或者說是Gamma曲線矯正)。這樣我們就可以在顯示器上看到同我們輸入的圖像接近的圖像了(如圖3)。當然圖3所示的曲線只是理想狀態下的情況,在實際應用中我們並不可能得到如此完美的曲線,所以不同的廠商之間所競爭的就是誰能做到最接近於這個效果。
顯示器的gamma值是用於定義一個顯示器的顯示特性的數學方法,是決定顯示器從黑色到白色的值。簡單的說,當顯示一個顏色從黑到白時(也就是0到1),顯示器的電壓也要隨之變化,但這個變化不是線性的。因為顯示器的物理特性決定了如果電壓的變化是線性的,顯示出來的亮度就不是線性的,這時,顯示的亮度就會很暗。所以,為了保整顯示出來的亮度是正常(線性)的,就需要對顯示器的電壓變化加以校正,這個值就是我們通常所說的gamma值。通常情況只有在調整HDRI圖片時和在做動畫渲染時會用到。
γ校正(Gamma Correction,伽瑪校正):所謂伽瑪校正就是對圖像的伽瑪曲線進行編輯,以對圖像進行非線性色調編輯的方法,檢出圖像信號中的深色部分和淺色部分,並使兩者比例增大,從而提高圖像對比度效果。計算機繪圖領域慣以此屏幕輸出電壓與對應亮度的轉換關系曲線,稱為伽瑪曲線(Gamma Curve)。以傳統CRT(Cathode Ray Tube)屏幕的特性而言,該曲線通常是一個乘冪函數,Y=(X+e)γ,其中,Y為亮度、X為輸出電壓、e為補償系數、乘冪值(γ)為伽瑪值,改變乘冪值(γ)的大小,就能改變CRT的伽瑪曲線。典型的Gamma值是0.45,它會使CRT的影像亮度呈現線性。使用CRT的電視機等顯示器屏幕,由於對於輸入信號的發光灰度,不是線性函數,而是指數函數,因此必需校正。
在電視和圖形監視器中,顯像管發生的電子束及其生成的圖像亮度並不是隨顯像管的輸入電壓線性變化,電子流與輸入電壓相比是按照指數曲線變化的,輸入電壓的指數要大於電子束的指數。這說明暗區的信號要比實際情況更暗,而亮區要比實際情況更高。所以,要重現攝像機拍攝的畫面,電視和監視器必須進行伽瑪補償。這種伽瑪校正也可以由攝像機完成。我們對整個電視系統進行伽瑪補償的目的,是使攝像機根據入射光亮度與顯像管的亮度對稱而產生的輸出信號,所以應對圖像信號引入一個相反的非線性失真,即與電視系統的伽瑪曲線對應的攝像機伽瑪曲線,它的值應為1/γ,我們稱為攝像機的伽瑪值。電視系統的伽瑪值約為 2.2,所以電視系統的攝像機非線性補償伽瑪值為0.45。彩色顯像管的伽瑪值為2.8,它的圖像信號校正指數應為1/2.8=0.35,但由於顯像管內外雜散光的影響,重現圖像的對比度和飽和度均有所降低,所以現在的彩色攝像機的伽瑪值仍多采用0.45。在實際應用中,我們可以根據實際情況在一定范圍內調整伽瑪值,以獲得最佳效果。
今天有個朋友問γ校正的用處,這里簡單說一下:
伽馬校正最初是由於顯示器的陰極現象管(也就是物理上所說的示波管的陰極射線版)的成像扭曲引起的,為了不使畫面失真所以就用先特殊算法進行校正,此之謂γ校正。
γ校正的原理是修改顯示系統的配色方案,本來顯示系統輸出的r g b電子槍線性的根據顯存中的各個顏色值輸出對應的控制電壓,但是通過伽碼校正可以把某個顏色值對應的輸出電壓調整高或調整低。達到校正顯示系統色澤的目的。同時可以用軟件的方法校正,就是對一副圖片設定某個顏色的顏色值變換成新的顏色值的對照表,然后用新的顏色值取代原來圖片中對應的顏色就行了呀。比如你先編寫一個控制rgb各個分量對應關系的曲線調節器,在曲線調節器里面調整控制曲線設置原來顏色多少對應目標顏色多少,然后根據設定的關系,修改要調整色澤的圖片每一個像素的顏色就可以了。
數學公式可以深刻和精確的把握一個概念,卻不能表達概念的物理意義和本質含義,本貼試圖擺脫數學公式的陳述和推導,用言語來解釋gamma的本質含義。
1什么是gamma?
對於CRT顯示器,輸入電壓信號將在屏幕上產生亮度輸出,但是顯示器的亮度與輸入的電壓信號不成正比,存在一種失真,如果輸入的是黑白圖像信號,這種失真將使被顯示的圖像的中間調偏暗,從而使圖像的整體比原始場景偏暗,如果輸入的是彩色圖像信號,這種失真除了使顯示的圖像偏暗以外,還會使顯示的圖像的色調發生偏移。gamma就是這種失真的度量參數。對於CRT顯示器,無論什么品牌的,由於其物理原理的一致性,其gamma值幾乎是一個常量,為2.5。(注意,gamma=1.0時不存在失真),由於存在gamma失真,輸入電壓信號所代表的圖像,在屏幕上顯示時比原始圖像暗。
2 gamma概念的演化
gamma本來是顯示器的輸出圖像對輸入信號失真的度量參數。
2.1 gamma概念的第一演化(系統gamma和顯示器gamma)
由於存在顯示失真,這樣的圖像不能應用,所以需要校正這種失真。上文講到,對於顯示器來說,gamma值是常量,不可改變,所以校正過程就只能針對輸入的圖像電壓信號了。這種校正就是將正常的圖像電壓信號向顯示器失真的相反方向去調整,既然失真使圖像的中間調變暗,那么在圖像電壓信號輸入到顯示器之前,先將該電壓信號的中間調調亮,然后再輸入到顯示器,這樣就可以抵消顯示器的失真了。
由於顯示器的gamma值是常量,所以這種校正的幅度也是相對固定的,這種校正幅度的度量參數也叫gamma,這是gamma概念的第一次演化,為了區別這兩種不同的概念,此處的gamma又叫做系統gamma(因為對圖像電壓信號的校正過程發生在電腦系統中),顯示器的固有的gamma又叫做顯示器gamma。
2.2 gamma概念的第二次演化
顯示器gamma表示一種失真,系統gamma表示一種校正,這兩者共同之處是都表示對原始信號的一種變換,所以gamma概念發展到這里,其一般性含義已經又兩層含義,a表示對原始信號的一種變換, b表示這種變換的度量參數。
2.3 gamma概念的第三次演化(文件gamma)
既然gamma的一般性含義是對原始信號的一種變換,可想而知,文件gamma也一定表示一種變換,這是一種什么樣的變換呢?
從宏觀上講,被照相機拍攝的物體的亮度是連續變化的,如果將亮度連續變化的被攝物體的圖像轉換成數字文件(計算機文件)時,無論用數碼相機還是掃描儀,都要面臨用離散的數值去近似表示連續的物理量的問題。具體來說,一個8位的二進制數字文件,如何編碼才能比較精確的表示反差很大的一幅圖像?
這要從人的視覺原理說起。人的眼睛感覺到亮度增加一級的時候,光強(光的能量)將增加一倍,同樣,當人的眼睛感覺到亮度減小一級的時候,光強將減少一半。就是說,人的眼睛感覺到的亮度的成比例的線性變化,是由光強的倍數變化引起的。如果將一段連續變化的亮度從暗到亮等差分成a b c d e f g 七段,那么這七段亮度對應的光強不是1 2 3 4 5 6 7,而是1 2 4 8 16 32 64。打個數學比方,人眼感覺到的亮度是等差數列,而光強的物理實在是等比數列!為何如此,因為這樣可以確保人眼即適應高亮度的陽光下的景物,又能在夜晚看清星光下的獵物,這是大自然的造化。
數碼相機或掃描儀的感光元件,將會把光強變成電信號,然后由模-數轉換器件轉換成數字信號,繼而再存儲為數字文件。為了便於討論,以黑白圖像為例,一個黑白圖片數字文件中每個象素用一個8位二進制編碼表示,8位二進制編碼只有256個量級,從0到255。就是說,一幅圖片,最亮的地方用255表示,最暗的地方用0表示。這里有一個問題需要我們思考一下:比最亮處(編碼255)暗一級的象素的編碼值是多少?
答案是128,因為人眼感覺暗一級,光強將減小一半,這樣感光元件的輸出電壓值將減小一半,從而模-數轉換器件得到的數字值也是255的一半,即128。
依此類推,比最亮的象素(編碼255)暗兩級的象素的編碼值是64,暗三級是32,暗四級是16,暗五級是8,暗六級是4,暗七級是2,暗八級是1。於是矛盾就出現了:
第一問題是,亞當斯將曝光區分為11個等級,這種8位二進制編碼方法無法表示11個分區,只表示了9個分區,分別對應的二進制編碼值是0-1,1-2,2-4,4-8,8-16,16-32,32-64,64-128,128-255。
更嚴重的是第二個問題,最亮的分區(128-255)占有8位二進制編碼256個量級的一半量級資源,即占有128個量級,分別是128,129,130,……,253,254,255。而最暗的分區只占有8位二進制編碼256個量級中的兩個量級,分別是0和1,比最亮分區暗四級的分區只占有8位二進制編碼256個量級中的8個量級,分別是8,9,……,15,16。這表明這種編碼方法在最亮的分區中,表達的亮度細節非常的豐富,超過人眼的識別能力(人眼在亮處可以識別1%的亮度變化),可是在較暗的分區中,表達的亮度細節就少的可憐了,會出現馬賽克!
所以需要對感光元件的輸出的電壓值在模-數轉換時做一種變換,使得較暗的分區占有的二進制編碼量級多一些,較亮的分區占有的二進制編碼量級少一些,從而不至於使圖像暗處出現馬賽克,也使亮部占有的量級剛好滿足人眼的最大識別能力。這樣編碼的數字文件可以較好的表示反差很大的一幅圖像。文件gamma是表示這種變換的度量參數。Windows系統,WWW和sRGB規定文件gamma值為2.2。
2.4 gamma概念的第四次演化
a表示對原始信號的一種變換,泛指顯示器gamma,系統gamma,文件gamma。
b表示這種變換的度量參數。
c 在不同的上下文環境中,會特指顯示器gamma,系統gamma,文件gamma三個概念中的某個具體概念,注意領會。
2.5概念總結(四種gamma)
2.5.1 gamma
gamma在不同的上下文環境中,有不同的含義,一個意思是表示對原始信號的一種變換,另一個意思是表示這種變換的度量參數,還可能表示顯示器gamma,系統gamma,文件gamma三個概念中的某個具體概念。
2.5.2 顯示器gamma
是顯示器的物理屬性,固定的,不變的,不可校正的。顯示器gamma在不同的上下文環境中,有不同的含義,一個意思是指顯示器的輸出圖像對輸入信號的失真,另一個意思是指這種失真的具體數值。
2.5.3 文件gamma
對一個給定的數碼相片文件,按照相關標准規范,這個gamma是一個定值,所以無需對其校正。如果出於某種特殊需要,一定要改變某數碼相片文件的gamma值,這種改變也不能稱作“校正”,而是稱作“變換”。
2.5.4 系統gamma
系統gamma所表示的變換,是計算機系統在讀取了照片數字文件之后,在輸出到顯示器之前的一種變換,對於windows系統它存在於顯卡中,是可調節的,可校正的。
3 在使用計算機處理數碼相片時總要提到 gamma 校正,這里的 gamma 校正過程校正什么?
由於顯示器 gamma 和文件 gamma 是固定不變的, gamma 校正過程是校正計算機的系統 gamma !, 使得顯示器 gamma 、系統 gamma 、文件 gamma 三個變換的疊加為 1.0, 從而使最終顯示器的圖像和原始場景一樣,不存在失真。
這就好比密碼通信,文件 gamma 是加密過程,系統 gamma 和顯示器 gamma 是文件 gamma 的一種反作用,是解密過程,最后看到的結果和原始信息一樣。