第二章 顏色模型
一 簡介
大家都知道,我們所說的光,屬于電磁波的一部分,這一部分通常叫做可見光譜。本章所說的顏色模型,是建立在可見光譜上的。顏色模型,又可以叫做顏色空 間;是人們解析現(xiàn)實中顏色的方法。不同的顏色模型,是從不同的應用領域發(fā)展起來的。常用的顏色模型有RGB、CMYK、HSB、YUV、Lab等。本章就 著重探討幾種常用的顏色模型。
二 RGB 顏色模型
1. RGB模型簡介
顧名思義,RGB 即 RED、GREEN、BLUE三種顏色通道的縮寫。RGB 顏色模型采用加法混色法,加法混色法的意思就是各種R、G、B三種色光,通過不同分量的疊加,來形成五彩繽紛的顏色。如圖 2-1所示。
計算機中,使用最廣泛的就是 RGB 模型了。我們的顯示器,其實就是利用密密麻麻的RGB 色塊來構成的,不過由于太小,大家肉眼分辨不出來而已。
大家都知道,計算機使用離散的數(shù)字信號來描述數(shù)據(jù),RGB 模型也不例外。每種顏色通道的離散點越多,對顏色的描述越精細,不過這也會帶來龐大的數(shù)據(jù)量;實際應用過程中,在色彩數(shù)量與數(shù)據(jù)量做了個權衡,這樣就出現(xiàn) 了幾種固定的RGB 顏色模型格式,他們分別為 RGB444,RGB555,RGB565、RGB18,RGB24,RGB32等。
2. RGB444顏色模型
RGB444 多用于嵌入式系統(tǒng)的顯示器上,R、G、B 三種顏色通道分別用四位表示,總共12位,可以產(chǎn)生 4096個顏色。大家可能記得,早期的手機就有很多是 4096色的。雖然現(xiàn)在看來效果很差,但是在當時已經(jīng)是價格不菲的了。圖2-2為 RGB444色階圖,從途中可以看出,每種顏色的跳變都是不連續(xù)的,這就是數(shù)字量化的結果。用四位表示一種顏色,也就是有16個色階,感興趣的同學可以數(shù) 一下。
3. RGB555顏色模型
RGB555 分別使用 五位表示 R、G、B的三個顏色通道,這樣可以達到32768色,即 32k色。計算機中,使用兩個字節(jié)表示這種顏色格式,表示方法如圖 2-3,最高位 X 表示沒使用。這種格式現(xiàn)在用的也不多。
圖2-4 為 RGB555色階圖,大家可以看出,這個色階的細化程度,比RGB44好了點,但是人的眼睛還是能分辨出來階梯狀。
4. RGB565顏色模型
RGB565 與RGB555相似,唯一區(qū)別的就是它使用六位表示G 顏色通道,這樣可以達到65536色,即 64k色。這種表示方法應用廣泛,我們點開windows操作系統(tǒng)的顯示屬性里面,里面的 16bit色,就是說的這一種。EVTFT 系列液晶模塊、VGA顯示驅(qū)動器也是采用這種存儲格式。
圖2-6為RGB565的色階,大家可以看出來,中間的G色階,比兩邊的R、B細膩一點,這就是用六位表示G顏色通道而只用5為表示其他兩位顏色通道的原因。
從圖2-5我們可以看出,RGB565所占用的兩個字節(jié)中,R分量存于高五位,G分量存于中六位,B分量存于低五位,根據(jù)這個特征,在C語言中,我們可以用下面的宏定義,來從RGB565數(shù)據(jù)中,分別獲取R、G、B的值。
同樣的道理,也可以通過下面的宏定義,用 R、G、B的值,來合成RGB565數(shù)據(jù)。
常用RGB565顏色定義。
5. RGB24和RGB32顏色模型
RGB24使用24位即三個字節(jié)表示RGB顏色通道;每種用一個字節(jié);計算機上大部分都是按這個來表示的,每種顏色通道有八位即256個色階;256級的變化,用人的肉眼,已經(jīng)分辨不出來每種顏色通道色階的跳變了。
RGB32也是使用24位即三個字節(jié)表示RGB顏色通道;每種用一個字節(jié);只不過他用最后一個字節(jié)表示Alpha通道。這就是所謂的真彩32位色。通俗的講,Alpha就是表示像素透明度的,0表示全透明,255表示不透明。在此之間為透明度的線性變化。
二 CMYK 顏色模型
與RGB 顏色模型一樣,CMYK顏色模型的命名方法,也是取顏色中的字母,Cyan代表青色,Magenta為品紅色,Yellow 為黃色、blacK為黑色,這樣就得到了 CMYK這個名字。黑色之所以取最后一個字母,原因為B容易誤解成Blue。
與RGB 不同的是,CMYK是減色混合,意思就是CMY元素,通過吸收不同的光譜,來得到我們所需要的顏色。減色模型較難理解,下面舉個例子來加深我們的理解。
大家都知道,RGB顏色模型是主動發(fā)光體(想想我們的顯示器,在漆黑的屋里我們還是能看到他顯示的畫面),既然他是主動發(fā)光體,那么對于我們的眼睛來說, 多一個光源就相當于多一個相加的元素;而CMYK 顏色模型呢,我們可以理解成被動發(fā)光體,也就是反射其它發(fā)光體的光源,例如各種五顏六色的染料;在漆黑的屋里,不管什么顏色的顏料,對我們來說,都是漆黑 的一片(他們都不會主動發(fā)光,都是靠反射別的光源來證明自己的存在)。再舉個例子,我們能看到黃色的染料,細化一下,大致分兩步:第一步是白色的光譜照射 到黃色的染料上,第二步是黃色的染料吸收掉了藍色光譜,所以,在我們的眼中,也就呈現(xiàn)出來黃色了。上面的一段話可以用下面的公式來表達(如果看不懂可以看 著圖2-1去理解):
因為:
紅色+ 綠色 + 藍色 = 白色
所以:
白色 –藍色 = 紅色 + 綠色 = 黃色
有了這個例子,我們就不難理解圖2-7 CMYK的顏色模型了??傊痪湓挘琑GB 顏色模型與 CMYK 顏色模型就是分別利用了主動發(fā)光與被動發(fā)光的原理而建立起來的。也不難想出,既然CMYK利用被動發(fā)光的原理,所以這種顏色模型主要用于印刷、染料混合等 行業(yè)。實際上,減色模型也是相加,只是對于我們眼睛來說,每增加任何一個CMY元素,就會多吸收一道光譜。所以,就叫減色混合。
理論上,CMY三種染料混合,會吸收所有可見光譜,而使得混合物得到黑色(也就是不反射可見光譜);但是實際過程中,CMY三種染料混合,得到的是一種深 棕色的顏色(我們總是造不出理想的原料),所以,實際應用過程中還需要增加一種黑色染料;這也就是為什么不用CMY模型,而使用CMYK 這種模型的原因。
三 HSB 顏色模型
不管是在天氣晴朗的郊外,還是昏暗的傍晚,不管是漂亮的霓虹燈下,還是刺眼的日光燈下,人類的眼睛總能熟練的辨認出來自己熟悉的一個人或者熟悉的一個物 品;如果用 RGB 顏色模型來解析;上面這幾種條件下,他們的值絕對是大相徑庭的。所以在這個基礎上,我們又建立起來了一種接近人類感官的顏色模型。
HSB 顏色模型是基于人類感官特征來建立起來的顏色模型。通俗地講,我們?nèi)说难劬Λ@取物體的特征,并不是基于RGB三原色的比例來衡量的,而是大致通過顏色的種類、飽和度和亮度這些參數(shù)來識別的。HSB又叫HSV顏色模型。
HSB顏色模型將顏色分為色相(Hue)、飽和度(Saturation)以及明亮度(Brightness 或者 Value)這三種參數(shù),色相指不同的顏色通道,他是一個0~360°的相位值,例如紅色和綠色是不同的色相值;飽和度指顏色的深淺;明亮度表示顏色的強 度;他表示物體反射光線與吸收光纖的比值。
由于HSB(HSV)模型的特征,他常用于圖像處理及機器視覺系統(tǒng)中。
四 YUV 顏色模型
YUV 顏色模型的產(chǎn)生,有一個搞笑的過程。他是彩色電視機產(chǎn)生時,為了兼容黑白電視機而不得已采取的一種顏色模型;彩色電視機產(chǎn)生時,本來打算用RGB顏色模型 來傳輸數(shù)據(jù)的,但是這就會造成沒法兼容黑白電視機。辦法總比困難多,這時候YUV顏色模型就產(chǎn)生了。Y指的是亮度,U和V表示色度和濃度;這樣我們可以通 過一個視頻通道發(fā)送YUV視頻流,而黑白電視機只接收Y值,達到兼容的目的。
YUV顏色模型其實常用于視頻傳輸和圖像壓縮。由于人類的眼睛,對亮度的敏感度遠超過對色彩的敏感度,所以視頻傳輸過程中,為了減小帶寬,通常將色彩分量 UV的比例減小,以達到降低帶寬的目的。這就出現(xiàn)了YUV4:4:4、YUV4:2:2、YUV4:1:1等格式。 對視頻處理方面有興趣的同學可以深入研究一下。下面給出YUV 顏色模型與RGB 顏色模型的相互轉(zhuǎn)換關系,常用的視頻解碼芯片中,都包含了此轉(zhuǎn)換關系的硬件實現(xiàn)。
上述公式包含了浮點運算,實際使用過程中,如果微處理器不包含浮點單元,還有一個不包含浮點的計算公式,大家可以參考相關的資料。
五 總結
顏色是組成 GUI 的基礎元素,更是我們每時每刻都能觸及到的一門學問,我們花了一個章節(jié)用于討論顏色模型的問題,用來打好根基并不為過。本章大家需要著重理解并掌握RGB顏色模型,其他顏色模型僅需了解。