1. 程式人生 > >光與色的故事--顏色模型淺析

光與色的故事--顏色模型淺析

光與色的故事

               ---顏色模型淺析

1.光的故事

       光是一種電磁波,同聲波相類似,包含了不同頻率分量。不同的是,電磁波能夠在真空中傳播。電磁波通常是由一種頻率或多種頻率構成。比如非常高頻率的電磁波構成了微波;非常低頻率的構成了無線電波。然而,人眼能夠察覺到的電磁波頻率是非常窄的一個範圍,頻率範圍大概在429TH到750THz(1 THz = 1 TeraHertz = 10^12 Hz)。而其他頻率的電磁波是不能夠被人眼所感知的。


      單色光是由一種頻率構成的光。(但是大部分情況下,光是由多種頻率構成的多色光)。單色光在人眼看來是一種純色,不可能是白色或是洋紅色。既然單色光是由一種頻率構成的光,那麼單色光的波形能夠用sine表示為:

Sine的高度代表的是光的亮度強度,一個週期的長度代表的是光的波長,波長同頻率的倒數相關。光的傳播速度為300000000m/s,那麼根據光速與波長和頻率的關係,可知:


     每一種頻率所對應的波長為300000000/f,因此,我們可以得出,人眼能夠感受到的光的波長大概是在400nm到700nm之間。

      可見光光譜表示所可有能夠被單色光表示的顏色。有些光源,像鐳射和鈉燈發出的是單色光,但是,一般光源都是發射出多色光。比如太陽光包含了所有顏色的光譜。這意味著紅色、黃色、綠色、藍色以及紫色的加和看起來就是白色。從物理學概念將,其組合並不是真正的白色,上述顏色的加和是由許多不同sine曲線所表示的,只是被人腦所反映為白色。因此,顏色一定程度上來說是屬於心理學的範疇,而不是物理學的範疇。

     光波是由許多不同頻率的sine曲線所加和而成。每一種sine曲線都有其自身的頻率和振幅。頻譜顯示的了每一種頻率的振幅。如下圖是一種黃色LED等的頻譜圖。

      頻譜圖中最高分量為主頻分量,也即是從該頻譜,人眼所能觀察到的顏色。如果黃色LED燈能夠用單色光表示,那麼它的頻譜圖表示為:

      上述兩種頻譜圖所表示的光源,對人眼來說,都表示的是黃色。這個現象揭示了一種有趣的事實:不同頻譜的光,對人眼來說,有可能代表的是一種顏色。如果人眼能夠區分出不同顏色頻譜的微小差別,那麼人眼能夠觀察到無數的顏色。但是,人眼的工作模式是並不是這樣,人眼把所有光源的頻譜主要分為三種顏色的訊號分量:紅色、綠色、藍色分量,這三種顏色分量的所有組合即構成了人眼所能觀察到的顏色。

2.顏色的故事

Wiki是這樣說的:顏色或色彩是通過眼、腦和我們的生活經驗所產生的一種對光的視覺效應。嗯,簡單點說,顏色就是人對光的一種感覺,由大腦產生的一種感覺。感覺是一個很主觀的東西,你怎麼確定你看到的紅色和我看到的是一樣的呢?這個視訊解釋的很不錯。我們需要先假設正常人對於同一種光產生的感覺基本是一致的,討論才能繼續下去。

     人的視網膜上佈滿了感光細胞,當有光線傳入人眼時,這些細胞就會將刺激轉化為視神經的電訊號,最終在大腦得到解釋。視網膜上有兩類感光細胞:視錐細胞和視杆細胞。

      視錐細胞大都集中在視網膜的中央,每個視網膜大概有700萬個左右。每個視錐細胞包含有一種感光色素,分別對紅、綠、藍三種光敏感。這類細胞能在較明亮的環境中提供辨別顏色和形成精細視覺的功能。

      視杆細胞分散分佈在視網膜上,每個視網膜大概有1億個以上。這類細胞對光線更為敏感(敏感程度是視錐細胞的100多倍),一個光子就足以激發它的活動。視杆細胞不能感受顏色、分辨精細的空間,但在較弱的光線下可以提供對環境的分辨能力(比如夜裡看到物體的黑白輪廓)。

      當一束光線進入人眼後,視細胞會產生4個不同強度的訊號:三種視錐細胞的訊號(紅綠藍)和視感細胞的訊號。這其中,只有視錐細胞產生的訊號能轉化為顏色的感覺。三種視錐細胞(S、M和L型別)對波長長度不同的光線會有不同的反應,每種細胞對某一段波長的光會更加敏感,如下圖所表示的是三種視椎訊號對單色光譜刺激的反應。這些訊號的組合就是人眼能分辨的顏色總和。

座標為波長,縱座標為所對應波長單色光的刺激相應程度

1、L視椎細胞在可見光譜的長波段達到最大峰值

2、M視椎細胞在可見光譜的中波段達到最大峰值

3、S視椎細胞在可見光譜的小波段達到最大峰值

      黃色頻率位於紅色和綠色頻率之間,大概在600nm波長左右,從上述三種視椎細胞對單色光頻譜的相應可知,黃色頻率的光會同時刺激紅色和綠色視椎細胞,此時,人腦會根據,同時刺激紅色和綠色視椎細胞的情況,把轉換這個訊號轉換為黃色。

      假設照射到人眼中的光只有兩種頻率:紅色和綠色,它們也會同時刺激紅色和綠色視椎細胞,因此這種光也會被人腦所解釋為黃色,即使這種光的而頻率中不包含任何黃色頻率分量。這就是為什麼不同頻譜的光,對人眼來說,有可能代表的是一種顏色。

      白色光包含了所有的頻率,因此,當白光入射到視網膜的時候,三種類型的視椎細胞都被刺激了,人腦把這種紅色、綠色、藍色視椎細胞都被刺激的情況,把這種光解釋為白色。

      上述解釋了不同光入射到視網膜的時候,是如何被解釋為不同色彩的。同時也能解釋入射光的強度改變光的亮度:如果輸入訊號夠強,人腦解釋為入射訊號可能為非常明亮的紅色…,如果輸入訊號非常弱,則解釋為基本為黑色。飽和度是根據三種視椎訊號刺激的相對強度而定,如果紅色訊號非常非常強,藍色和綠色訊號也非常強,那麼顏色會表現出相對較低的飽和度,表現為淡紅色;相反,如果紅色訊號非常強,而藍色和綠色訊號非常弱,那麼所表現出來的顏色則為非常鮮豔的紅色。

3.顏色模型

3.1 RGB顏色模型

      RGB模型工作原理工人眼的工作原理很相似。RGB模型定義了三個變數,分別是紅色、綠色、藍色,這三種分量就好比於人眼中的三種視椎細胞。RGB模型是一種最為重要的模型,被廣泛應用於諸如電腦顯示屏、電視顯示屏等電子裝置中。如果你用放大器檢視電腦顯示屏中白色區域,你能夠觀察到白色確實是由紅色、綠色、藍色組成。這意味著電腦顯示屏所發出來的白光不同於太陽光所發出來的白光,太陽光所發出來的白光包含了所有可見光頻率,而電腦顯示器所發出來的白光只是包含了三鍾頻率分量。對人眼來說,區分不出這兩種白光的差異。

      三基色是這樣的三種顏色,它們相互獨立,其中任一色均不能由其它二色混合產生。它們又是完備的,即所有其它顏色都可以由三基色按不同的比例組合而得到。

RGB模型基於理論是:所有可能的顏色都能由紅色、綠色、藍色疊加而成。紅色、綠色、藍色為三基色,RGB為這三基色所組成的加色系統模型。其規律為:

紅+綠=黃
紅+藍=紫
藍+綠=青
  紅+藍+綠=白

      RGB模型不是很直觀,以下表格是RGB模型中常見的RGB值。

      根據這個表,我們可以大致知道,當RGB分量分別為128,0,0的時候表示的暗紅色,255,128,192表示為粉紅色,16,16,16表示的暗灰色。上述表格中的16進位制數表示的是在HTML中使用的顏色程式碼。如果我們以R=x,G=y,B=z建立座標系的話,可以得到以下RGB模型三維圖:

      在客戶現場或公司除錯的時候,不同手機、不同電腦顯示器顯示ISP傳輸來的同一幅影象,往往色調、顏色方面有很大的差異。前面已經提到所有這些電子顯示裝置都是使用的RGB模型,那麼可能是由於不同電子裝置關於RGB模型引數得設定存在差異,比如色調設定的不同、飽和度設定不同等,導致了ISP輸出同樣的影象,在不同裝置中顯示的確實不同的效果。

      如上一小節所述,許多電視、電腦顯示屏顯示的顏色都是通過紅色、綠色、藍色三種顏色不同強度的組合而成。由不同強度組合所構成的最終顏色其紅色、綠色、藍色成分的多少並不是很直觀。特別是對於沒有經驗的使用者和那些減性顏色模型的使用者來說,並不是很容易理解最終的顏色,R、G、B成分究竟各佔多少百分比,另外,無論是加性顏色模型,還是減性顏色模型同人眼對顏色的工作原理是不一樣的。

      比如說,假如我們有一個RGB顯示模型,可以通過三個不同的滑條控制其大小範圍在0-255之間,每一個滑條只控制其中一個分量,如果起始顏色為橙色,sRGB 值為R=217,G=118,B=33,為了得到亮度和飽和度為其一半的顏色,我們必須控制滑塊,使其R減少31,G減小24,並增加59B分量,即表示為:

       RGB模型中,為了得到某種顏色必須進行RGB分量的調整,但是三種分量調整的幅度和方向,對於沒有經驗的使用者來說,根本就不知道該如何調整各個分量的大小,不是很直觀易懂。

        為了適應更傳統和直觀的顏色混合模型,計算機圖形學的先輩們發明了一些諸如HSL、HSV等更加直觀的顏色混合模型。這也是為什麼除了RGB模型之外,還需要發展處這麼多不同其他的顏色模型。但是為了能夠在計算機螢幕上顯示影象,必須把其他顏色模型轉換為RGB顏色模型。HSL、HSV描述顏色相對於RGB等模型顯得更加自然。電腦繪畫時,這兩個模型非常受到歡迎。

3.2 HSL顏色模型

     HSL顏色模型是由三個引數H(hue)、S(saturation)、L(lightness)所組成的三維顏色模型。

     Hue表明了對光的感知顏色,即這種顏色是紅色、綠色還是藍色。這種表述方式同可見光光譜的表現方式很類似,只是把可見光光譜中最右端的紫色用品紅色代替。如下圖所示:

     Hue通常取值範圍是[0°,360°],對應紅橙黃綠青藍紫-紅這樣順序的顏色,構成一個首尾相接的色相環。360度的色相同0度所對應的色相是一樣的。色相的物理意義就是光的波長,不同波長的光呈現了不同的色相。如下圖所示:

      Saturation是用離色相環圓心的距離所表示,在圓心處飽和度為0%,在色相環圓的邊緣飽和度為100%。對應到到物理意義上:即一束光可能由很多種不同波長的單色光構成,波長越多越分散,則色彩的純淨程度越低,而單色的光構成的色彩純淨度就很高。


    給定色相其飽和度可以表示為如下圖趨勢:最左端飽和度為0%,最右端飽和度為100%,居中飽和度為50%。

     Lightness表示的是光的光照強度。0%表示的是完全黑色的,50% 表示的是純色的,100%表示的是白色的。在HSL模型中,當顏色分量L=255時,不管這種顏色的色相和飽和度引數如何,其所表示出來的顏色總是白色。給定色相的亮度可以表示為如下圖趨勢:最左端為黑色,L=0%,最右端為白色,L= 100%,居中表示L= 50%,為純色。

    HLS的三維模型可以表示為:

      如上圖所示,L為50%的時候,表示的是純色顏色,,底部為L=0%的時候,所表示的是全黑,頂部為L=100%,表示的是白色。

3.2 HSV顏色模型

      HSV顏色模型同HSL顏色模型很相似。唯一的不同就是在第三個分量的表示。Value不同於Lightness,在HSV模型中,Value的最大值V=255可能表示的顏色是紅色、綠色、藍色或其他顏色,而在HSL中L的最大值L= 255時,其表示的顏色只能是白色。Value表示的是最大的顏色分量,MaxColor(R,G,B)表示三個顏色分量中的最大分量。因此(255,0,0)和(255,255,255)Value值都為255。

     在HSV模型中,對於給定的色相的Value(明度)可以表示為如下圖趨勢:最左端為黑色,L=0%,最右端為純色,L= 100%,居中表示L= 50%,為純色的一半。

    HSV的三維模型可以如下圖所示:

      下圖中,能夠很好的表面HSL、HSV這兩種顏色模型的差異。在圓柱體外圍是純色(紅黃綠藍紫...)HSL中,這圈純色位於亮度(L)等於1/2的部位,而在HSV中是在明度(Value)等於1的部位。

      將上面的圓柱體裁掉無用的部分,得到的是如下的錐形,就能更明顯的看出HSL和HSV的區別了。

     由圖可知,HSL所代表的白色是在其模型的頂部;而HSV所表示的白色是在圓心位置處。

     HSV模型能夠更好的表示飽和度,而HSL模型能夠更好的表示亮度。

      在二維影象中表示S=255時,HSL、HSV兩種顏色模型的差異為:

     左側圖表示的是HSL顏色模型二維圖,頂部為白色,因為其亮度達到最大;右側圖表示的是HSV顏色模型二維圖,頂部包含了所有的顏色,因為其飽和度為255,飽和度為0是所表示的顏色才是白色。橫向表示的是色調。

      從上面的介紹可以直到,顏色模型通常分為裝置相關和裝置不相關,轉換的時候便有很多不同。

      裝置相關的顏色模型,例如RGB、CMYK,這樣的模型只是規定了一個取值的範圍,例如RGB每個分量取值是0-255,則該值如何呈現出光來,是需要具體裝置來解釋的。這樣的顏色模型不會關聯到人眼的刺激值的具體值,它們之間的轉換相對簡單。

      裝置不相關的顏色模型,例如XYZ、Lab,這樣的模型是需要反映真實的可見顏色的,所以他們與裝置無關,但是轉換時相對較麻煩,需要很多條件。

為了在裝置相關、裝置不相關的顏色模型間互相轉換,一般是以RGB和CIEXYZ作為橋樑進行的,如下圖。

參考資料: