深入理解color model(顏色模型)

什么是顏色

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


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

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

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

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

三種視錐細胞(S、M和L類型)對單色光譜刺激的反應

( 橫坐標為光的波長,縱坐標為產生信號的強度)

能夠引起視錐細胞活動的光波長范圍 :312.3nm至745.4mn(可見光)

這里有一個重要的理論:我們可以用3種精心選擇的單色光來刺激視錐細胞,模擬出人眼所能感知的幾乎所有的顏色(例如紅綠光的混合光,和單色黃光,刺激視錐細胞產生的視神經信號是等效的),這就是三色加法模型。所以說"三原色"的原理是由生理因素造成的。

顏色的數字化

根據上面的理論,只需要選定三原色,并且對三原色進行量化,那就可以將人的顏色知覺量化為數字信號了。三色加法模型中,如果某一種顏色(C),和另外一種三色混合色,給人的感覺相同時,這三種顏色的份量就稱為該顏色(C)的三色刺激值。對于如何選定三原色、如何量化、如何確定刺激值等問題,國際上有一套標準——CIE標準色度學系統。

CIE(國際照明委員會)是位于歐洲的一個國際學術研究機構,1931年,CIE在會議上根據之前的實驗成果提出了一個標準——CIE1931-RGB標準色度系統。

CIE1931-RGB系統選擇了700nm(R) 546.1nm(G) 435.8nm(B) 三種波長的單色光作為三原色。之所以選這三種顏色是因為比較容易精確地產生出來(汞弧光譜濾波產生,色度穩定準確)。

CIE1931-RGB 三刺激值曲線,根據人類視覺實驗結果繪制。

從上圖可以看到,三個顏色的刺激值R、G、B如何構成某一種顏色:例如580nm左右(紅綠線交叉點)的黃色光,可以用1:1(經過亮度換算..)的紅綠兩種原色混合來模擬

CIE所做顏色匹配實驗的原理圖

注意上面的曲線坐標有一部分是負值,這是由顏色匹配實驗產生的。如上圖,有些光譜色(左邊)用三原色(右邊)來匹配時,無論怎樣調節三原色,都不能使兩個視場達到匹配,必須在光譜色(左邊)添加適量的原色才行。這就是上面刺激值曲線中,紅色出現一部分負值的原因。

如果要根據三個刺激值R、G、B來表現可視顏色,繪制的可視圖形需要是三維的。為了能在二維平面上表現顏色空間,這里需要做一些轉換。顏色的概念可以分為兩部分:亮度(光的振幅,即明暗程度)、色度(光的波長組合,即具體某種顏色)。我們將光的亮度(Y)變量分離出來,之后用比例來表示三色刺激值:

這樣就能得出r+g+b=1。由此可見,色度坐標r、g、b中只有兩個變量是獨立的。這樣我們就把刺激值R、G、B轉換成r、g、Y(亮度)三個值,把r、g兩個值繪制到二維空間得到的圖就是色域圖。

根據CIE1931-RGB模型繪制的rg色度圖

上圖中,馬蹄形曲線就表示單色的光譜(即光譜軌跡)。例如540nm的單色光,可以看到由r=0、g=1、b=(1-r-g)=0三個原色的分量組成。再例如380-540nm波段的單色光,由于顏色匹配實驗結果中紅色存在負值的原因,該段色域落在了r軸的負區間內。自然界中,人眼可分辨的顏色,都落在光譜曲線包圍的范圍內。

CIE1931-RGB標準是根據實驗結果制定的,出現的負值在計算和轉換時非常不便。CIE假定人對色彩的感知是線性的,因此對上面的r-g色域圖進行了線性變換,將可見光色域變換到正數區域內。CIE在CIE1931-RGB色域中選擇了一個三角形,該三角形覆蓋了所有可見色域,之后將該三角形進行如下的線性變換,將可見色域變換到(0,0)(0,1)(1,0)的正數區域內。即假想出三原色X、Y、Z,它們不存在于自然界中,但更方便計算。

得到的結果就是下圖:

CIE1931-XYZ色度圖

注意這里的顏色只是示意,事實上沒有設備能完全還上面所有的自然色域

這個圖有些有意思的性質:

該色度圖所示意的顏色包含了一般人可見的所有顏色,即人類視覺的色域。色域的馬蹄形弧線邊界對應自然界中的單色光。色域下方直線的邊界只能由多種單色光混合成。

在該圖中任意選定兩點,兩點間直線上的顏色可由這兩點的顏色混合成。給定三個點,三點構成的三角形內顏色可由這三個點顏色混合成。

給定三個真實光源,混合得出的色域只能是三角形(例如液晶顯示器的評測結果),絕對不可能完全覆蓋人類視覺色域。

這就是CIE1931-XYZ標準色度學系統。該系統是國際上色度計算、顏色測量和顏色表征的統一標準,是幾乎所有測色儀器的設計與制造依據。


常見顏色模型

顏色模型就是描述用一組數值來描述顏色的數學模型。例如coding時最常見的RGB模型,就是用RGB三個數值來描述顏色。通常顏色模型分為兩類:設備相關和設備無關。

設備無關的顏色模型:這類顏色模型是基于人眼對色彩感知的度量建立的數學模型,例如上面提到的CIE-RGB、CIE-XYZ顏色模型,再比如由此衍生的CIE-xyY、CIE-L*u*v、CIE-L*a*b等顏色模型。這些顏色模型主要用于計算和測量。

設備相關的顏色模型:以最長見的RGB模型為例,一組確定的RGB數值,在一個液晶屏上顯示,最終會作用到三色LED的電壓上。這樣一組值在不同設備上解釋時,得到的顏色可能并不相同。再比如CMYK模型需要依賴打印設備解釋。常見的設備相關模型有:RGB、CMYK、YUV、HSL、HSB(HSV)、YCbCr等。這類顏色模型主要用于設備顯示、數據傳輸等。

下面就對這些顏色模型一一作出解釋。


CIE-RGB

正如上面寫的,這個模型是由真實的人眼顏色匹配實驗得出的模型,RGB分別表示那三個固定波長的光的份量。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CIE-RGB立體色域


CIE-XYZ

上面也有,就是根據CIE-RGB進行變換得到的顏色模型,XYZ分別表示三個假想色的光的份量。通常簡寫為XYZ顏色模型。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CIE-XYZ的立體色域


CIE-Yxy

該模型由CIE-XYZ衍生得來。其中,, Yxy中的Y表示光的亮度。這個模型投影到x-y平面上即上面的CIE1931-XYZ色度圖。其中x、y分量的取值范圍是[0,1]。有時該模型也被稱作CIE-xyY。


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CIE-xyY立體色域


CIE-L*u*v* 和 CIE-L*a*b*

CIE1931-XYZ的模型沒有給出測量兩個顏色差距(色差)的方法,顏色差距在色度圖上也是不均勻的。因此CIE基于CIE-XYZ進行非線性壓縮,設計了能在色度圖上直接測量色差的均勻色度圖,叫做CIE UCS色度圖(1960和1976各有一版),旨在將色彩均勻化。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CIE1976 UCS(uniform chromaticity scale) 色度圖


根據CIE UCS色度圖,CIE建立了CIE1976-L*u*v*顏色模型,簡稱CIELUV。其中L*表示亮度,u*、v*是色度坐標。L*取值范圍是[0,100],u*和v*取值范圍[0,1]。

CIE-L*u*v*用于自己能發光的光源,例如顯示器。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CIE-Luv立體色域圖


稍后CIE又跟據CIE UCS色度圖建立了CIE1976-L*a*b*顏色模型,簡稱CIELAB或者Lab。 L*表示亮度,a*、b*是色度坐標(a*是紅/綠軸,b*是黃/藍軸)。L*取值范圍是[0,100],a*和b*取值范圍[0,1]。

CIE-L*a*b*用于表示反射、透射的物體的顏色。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CIE-L*a*b立體色域


注意,還有一個顏色模型叫做Hunter1948 L,a,b,是由HunterLab公司制作的。雖然和CIE的Lab模型有些關聯,但其實現不一樣。一般情況說Lab顏色模型,都是指CIE-Lab模型。

CIE-L*C*h

CIE LCH采用了和CIE L*a*b*相同的顏色空間,但用貼近人認知的方式表達色彩。其中L*表示明度(Lightness,該值定義和Lab模型一樣),C*表示飽和度(Chroma),h°表示色調(Hue)。C*和h°即用L*a*b*中的a*b*分量換算得到。

CIE L*C*h°立體色域圖(該圖色域應該和L*a*b*是重合的,可以對比一下)


RGB

最常見的顏色模型,設備相關。三個數值代表R、G、B分量,取值均為[0,255]。

RGB顏色模型( 一般設備的RGB僅能表現CIE-XYZ很少一部分)

通常設備(例如筆記本的液晶顯示屏)能表現的色域大概是下面這樣。

OSX中ColorCync工具 將普通RGB顯示到Yxy立體色域中


CMYK、CMY

這個顏色模型常用于印刷出版。CMYK表示青(Cyan)品紅(Magenta)黃(Yellow)黑(BlacK)四種顏料。由于顏料的特性,該模型也是與設備相關的。相對于RGB的加色混色模型,CMY是減色混色模型,顏色混在一起,亮度會降低。之所以加入黑色是因為打印時由品紅、黃、青構成的黑色不夠純粹。

通常其能表現的色域很小,如下圖。

OSX中ColorCync工具 將普通CMYK顯示到Yxy立體色域中

HSL、HSV

HSL和HSV的顏色模型比較相近,它們用來描述顏色相對于RGB等模型顯得更加自然。電腦繪畫時,這兩個模型非常受到歡迎。

HSL和HSV中,H都表示色相(Hue)。通常該值取值范圍是[0°,360°],對應紅橙黃綠青藍紫-紅這樣順序的顏色,構成一個首尾相接的色相環。色相的物理意義就是光的波長,不同波長的光呈現了不同的色相。

HSL和HSV中,S都表示飽和度(Saturation)(有時也稱為色度、彩度)即色彩的純凈程度。例如龍袍的金黃色飽和度就比屎黃色高。對應到到物理意義上:即一束光可能由很多種不同波長的單色光構成,波長越多越分散,則色彩的純凈程度越低,而單色的光構成的色彩純凈度就很高。

兩個顏色模型不同的就是最后一個份量。

HSL中的L表示亮度(Lightness/Luminance/Intensity)。根據縮寫不同HSL有時也稱作HLS或HSI(就是說HSL、HLS、HSI是一回事)。

HSV中的V表示明度(Value/Brightness)。根據縮寫不同,HSV有時也被稱作HSB(就是說HSV和HSB是一回事)。

至于亮度和明度的區別,可以看下面的圖。一種純色的明度是白色的明度,而純色的亮度等于中灰色的亮度。

下面的圖能更好的對比HSL和HSV的區別:在圓柱體外圍是純色(紅黃綠藍紫...)HSL中,這圈純色位于亮度(L)等于1/2的部位,而在HSV中是在明度(Value)等于1的部位。

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

YUV、YCbCr(YCC)、YPbPr、YDbDr、YIQ

這些顏色模型大都是用在電視系統、數位攝影等地方。其中的Y分量都表示的是明亮度(Luminance、Luma)。

YUV顏色模型中,U、V表示的是色度(Chrominance/Chroma)。YUV是歐洲電視系統所采用的顏色模型(屬于PAL制式),顏色被分為一個亮度信號和兩個色差信號進行傳輸。

YCbCr(簡稱YCC)中,Cb和Cr藍色(blue)和紅色(red)的色度。YCbCr是YUV的壓縮和偏移的版本。

YPbPr類似YCbCr,與之不同的是,YPbPr選用的CIE色度坐標略有不同。一般SDTV傳輸的色差信號被稱作Cb、Cr,而HDTV傳輸的色差信號被稱作Pb、Pr。

YDbDr也類似YCbCr,同樣也是色度坐標不同。YDbDr是SECAM制式電視系統所用的顏色模型。

YIQ。。嗯也和上面的類似。。是用在了NTSC制式的的電視系統里。。

全球電視系統制式分布,PAL用YUV、SECAM用YDbDr、NTSC用YIQ

其他顏色模型

除了上面這些比較常見的顏色模型,其他的顏色模型還有LMS、RYB、RAL等等,比較小眾所以懶得查了。。但這其中有一個很有意思的顏色模型:Pantone。

Pantone公司是一家專門開發和研究色彩而聞名全球的權威機構,為各個行業提供專業色彩選擇和精確的交流語言。他們最知名的產品當屬PANTONE色卡,提供了一系列的標準色。一套PANTONE色卡可不便宜。。如果感興趣,可以到AppStore上看看PANTONE的作品,There's an App for that...

顏色模型之間的轉換

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

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

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

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

為了能將RGB映射到真實的視覺顏色空間XYZ中,需要預先定義一些常量。

根據上面的CIE-XYZ色域圖的介紹,給定三個光源,最終能覆蓋的色域只能是三角形,所以這里需要定義R、G、B在XYZ色域的絕對位置。例如下圖就是sRGB定義的R、G、B在色彩空間中的絕對位置。這樣就建立的RGB到XYZ的線性關系。

下面是一些常見的RGB色彩空間:

(多說一句,通常Photoshop繪圖時,默認選擇的是sRGB,該色域可以在大多數設備上完整呈現出來。那些號稱覆蓋100%色域的上流顯示器,指的是覆蓋了AdobeRGB色域。目前沒有設備能完整呈現上圖完整的色域)

當RGB都為最大值時,該點表示白色。在XYZ色域中,白色是如何定義的CIE也有一些標準,即標準光源。不同的標準光源有著不同的色溫。詳情取看Wiki吧:Standard illuminate

如下圖,色溫曲線為下圖中的弧線。

將中間這部分放大,標準光源的定義即位于這條曲線附近。

常見標準光源含義如下:

A (2856K) 白熾燈

B (4874K) 正午直射日光

C (6774K) 北方天空光

D50 (5003K) 地平線日光

D55 (5503K) 午后的日光

D65 (6504K) 中午的日光

D75 (7504K) 北方天空光

E (5454K) 代表標準照光源D以外的其它日光

F1 (6430K) 日光熒光燈

F2 (4230K) 冷白熒光燈

F3 (3450K) 白色熒光燈

F4 (2940K) 暖白熒光燈

F5 (6350K) 日光熒光燈

F6 (4150K) 簡白日光燈

F7 (6500K) D65模擬

F8 (5000K) D50模擬

F9 (4150K) 冷白豪華熒光燈

F10 (5000K) 飛利浦TL85,Ultralume 50

F11 (4000K) 飛利浦TL84,Ultralume 40

F12 (3000K) 飛利浦TL83,Ultralume 30

RGB和XYZ轉換時,需要選定一個標準光源。通常的選擇是D50、D65。

RGB是在顯示器設備上顯示的,以電視為例,其顯像管的電壓和發出的亮度并不是線性的,例如0.5的Green亮度,顯像管可能只需要0.2的電壓。

這樣的關系曲線通常是一個乘冪函數:Y=(X+e)γ,即Gamma校正。通常電視系統的Gamma值為2.2。RGB與XYZ轉換時,該值也是一個必須的參數。

所以,根據上面這些說明,XYZ與RGB之間轉換,需要一個預定義的RGB模型、一個標準光源、一個Gamma值。。等等。。

通常情況下參數這樣選擇的:Observer:2°, Illuminant:D65, RGBModel:sRGB, Gamma:sRGB.

好了,下面就是各個模型之間的轉換方式了。


RGB與HSL之間的轉換

(r,g,b)是一個顏色RGB(紅綠藍)坐標,取值都在[0,1];

(h,s,l)是顏色的HSL(色相、飽和度、亮度)坐標,h取值范圍是[0,360)度,s和l取值范圍是[0,1]。

由RGB轉換為HSL時,設max為r,g,b中的最大值,min為r,g,b中的最小值。轉換公式如下。


注意,實際情況下,如果r=g=b時,該顏色是非彩色的,這時色相(Hue)應該無定義。

下面是RGB to HSL的C代碼,為了方便計算,傳入傳出的值范圍都是[0,1]。

由RGB轉換為HSL時,設max為r,g,b中的最大值,min為r,g,b中的最小值。轉換公式如下。


注意,實際情況下,如果r=g=b時,該顏色是非彩色的,這時色相(Hue)應該無定義。

下面是RGB to HSL的C代碼,為了方便計算,傳入傳出的值范圍都是[0,1]。


由HSL轉換為RGB時,

如果飽和度(s)=0,則顏色是非彩色的。色相(Hue)是無意義的,r=g=b=l(亮度)。

如果飽和度(s)≠0,有如下的計算方式:



下面是HSL to RGB的C代碼,為了方便計算,傳入傳出的值范圍都是[0,1]。


更多內容,相關代碼

放到了Github

參考資料

Wikipedia

http://en.academic.ru/dic.nsf/enwiki/157333

http://www.brucelindbloom.com/

http://www.handprint.com/HP/WCL/

http://www.couleur.org/

http://www.codeproject.com/Articles/19045/Manipulating-colors-in-NET-Part-1

http://www.iclcv.org/index.php?q=node/28

http://www.easyrgb.com/index.php?X=MATH

http://www.techmind.org/colour/

《色彩管理(Real World Color Management)》..這書在當當京東早已經缺貨了。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容