home > theory > CG-CV-IP >

色彩空間RGB/CMYK/HSL/HSB/HSV/Lab/YUV基礎理論及轉換方法:RGB與YUV

author:[email protected]    hits:

人能夠感知到的色彩是一個三維線性空間的子集,我們將其稱為色彩空間。從光學三原色到印刷三間色,到符合認為更友好的HSL HSV色彩模型。到CIE的Lab色彩模型。慢慢講解

之前做個設計,現在從事IT,腦子里面關于RGB,RGBA,CMY,CMYK,YUV,但是具體理論還是不扎實。若干年前之前寫過《水煮RGB與CMYK色彩模型—色彩與光學相關物理理論淺敘》《三色視者與四色視者身后的理論基礎:色彩原理

光學三原色與印刷三間色

光學的三原色: 紅(Red)、綠(Green)、藍(Blue) (RGB)。

印刷的三原色: 青(Cyan)、品紅(Magenta)、黃(Yellow) (CMYK)

印刷色是光照射在印刷物上, 然后折射到人眼的光的合成,所以印刷色會比光學暗淡,因為印刷色是經過印刷物過濾過光合成的,自然會比較相對暗淡。

C(100)  +M(100) +Y(100) = 黑色(100,100,100)

可見黑色就是青色、品與黃色之和,但是這三種顏色混成的黑色不夠純,所以印刷學就引進了K(Black)黑色,因為B已經被Blue占用,所以黑色就只好用引文字母黑色的最后一個字母K,所以:

C(100)  +M(100) +Y(100) + K(100) 等價于 C(0)  +M(0) + Y(0) + K(100) = 黑色

光學三原色如何得到白色, 配色如下:

R(0) + G(0) + B(0)+A(255) =  C(0)  +M(0) + Y(0) + K(100) = 黑色

聯想下,是不是可見黑色就是沒有顏色(0,0,0)?

我們顯示屏一般采用RGB,印刷采用CMY。RGB/CMY色彩模型是通過不同量的(紅/綠/藍)||(青/品紅/黃)來描述一個顏色的,對人類來說很不直觀,難以理解。他們對機器很友好的色彩模式,但并不夠人性化,難以直觀理解,因為我們對色彩的認識往往是:什么顏色?鮮艷不鮮艷?亮還是暗?

三原色與三間色組合色相環圖示

基于RGB改進的HSL/HSV色彩模型

HSL 模式和HSB(HSV) 都是基于 RGB 的,是作為一個更方便友好的方法創建出來的。HSB和HSV是是一樣的,只是叫法不一樣而已

  • HSL:色相H(Hue) ,飽和度S(Saturation),亮度L(Lightness)

  • HSB:色相H(Hue) ,飽和度S(Saturation),明度B(Brightness)

色相H(Hue)控制顏色種類,取值0-360°的圓心角。需要記住色相環上的六大主色:紅黃綠青藍洋紅(即RGB夾CMY呈60°分布)用作基本參照

飽和度S(Saturation)控制顏色的純度。取值0-100%。數值越大,顏色中的灰色越少,顏色越鮮艷,呈現一種從灰度到純色的變化

亮度L(Lightness)明度B(Brightness)控制色彩的明暗變化,取值0-100%。

HSB與HSB其中的S與L有著不同的表述。這里暫且忽略,推薦閱讀:色彩空間中的 HSL、HSV、HSB 有什么區別- AK23的回答 - 知乎

YUV與YCbCr

無論是電影還是電視剛剛出來的時候都是黑白模式。從電視臺從黑白過度到彩色,但是又要兼容原來黑白模式,不得已推出了YUV

YUV是一種顏色編碼方法。常使用在各個視頻處理組件中。 YUV在對照片或視頻編碼時,考慮到人類的感知能力,允許降低色度的帶寬。

  • Y:亮度信號,灰階值。取值:0.0 ~ 1.0

  • U:色差信號R-Y(紅色-亮度)。取值:-0.5 ~ 0.5;

  • V:色差信號B-Y(藍色-亮度)。取值:-0.5 ~ 0.5;

這時候也許你會問“咦,G(綠色)哪去了”,其實兩種顏色加亮度也能通過算法大致表達出原本的顏色(果然偷工減料),所以就算是融合進R 和B 里了

行業中處理的視頻格式基本是YUV信號,而不是RGB,所以要了解視頻格式的基礎需了解YUV。

現在的YUV是通常用于計算機領域用來表示使用YCbCr編碼的文件。所以可以粗淺地視YUV為YCbCr。如Y'UV, YPbPr

YUV的優點

在最近十年中,視頻工程師發現,眼睛對于亮和暗的分辨要比對顏色的分辨更精細一些,也就是說,人眼對色度的敏感程度要低于對亮度的敏感程度。工程師認為,在我們的視頻存儲中,沒有必要存儲全部顏色信號。我們可以把更多帶寬留給黑—白信號(被稱作“亮度”),將稍少的帶寬留給彩色信號(被稱作“色度”)

YUV解決彩色電視機與黑白電視機的兼容問題

黑白視頻只有Y(Luma,Luminance)視頻,也就是灰階值。到了彩色電視規格的制定,是以YUV/YIQ的格式來處理彩色電視圖像,把UV視作表示彩度的C(Chrominance或Chroma),如果忽略C信號,那么剩下的Y(Luma)信號就跟之前的黑白電視頻號相同。我們常用的JPG格式,采用的YUV。

YUV抗干擾性強

采用YUV 色彩空間更重要在于它的亮度信號Y 和色度信號U、V 是分離的,這樣分開的。好處就是不但可以避免相互干擾,還可以降低色度的采樣率而不會對圖像質量影響太大。如果U、V 為零,就沒有顏色,變成黑白電視了。當然,Y 也是一個重要參數,其實平時我們看一個顏色深淺是很不一樣的,而深淺取決于亮度Y,Y

YUV最大的優點在于只需占用極少的帶寬

RGB色彩模式在輸出時需要3個獨立的圖像信號同時傳輸,帶寬占用較高。正常的RGB24是由24位即3個字節來描述一個像素,R、G、B各8位。而實際使用中為了減少圖像數據的尺寸,如視頻領域,對R、G、B所使用的位數進行的縮減,如你所說的RGB565和RGB555。

如RGB565彩色模式, 一個像素占兩個字節, 其中:

  • 低字節的前5位用來表示B(BLUE)

  • 低字節的后三位+高字節的前三位用來表示G(Green)

  • 高字節的后5位用來表示R(RED)

YUV采樣與壓縮


為什么YUV:2:0 需要的帶寬只是YCbCr4:4:4的二分一?因為,他們在UV上可以減少采樣。

  • YUV 4:4:4采樣,每一個Y對應一組UV分量。 

  • YUV 4:2:2采樣,每兩個Y共用一組UV分量。 

  • YUV 4:2:0采樣,每四個Y共用一組UV分量。

色彩空間轉換

一般兩個色彩空間,找一個變換矩陣,可以快速轉換。

rbg與xyz色彩空間矩陣變換

YUV轉為RGB

Lab顏色模型

Lab顏色模型是由國際照明委員會(CIE:International Commission on illumination)制定的一種色彩模式。

  • L*代表明度,取值0~100

  • a*代表從綠色到紅色的分量 ,取值-128~127

  • b*代表從藍色到黃色的分量,取值-128~127

這樣規定是根據人類的視覺原理,靈長類動物的視覺都有兩條通道:紅綠通道和藍黃通道,大多數動物最多只有一條通道,如果有人缺失其中一條,就是我們所說的色盲。

其實,我們生活中所說的顏色和光譜中可見光的顏色并不是嚴格對等的。實際上,存在兩種顏色的定義

  • 自然界真實存在的顏色:嚴格對應波長,實際上所謂的不同的顏色就是可見光電磁波的不同波長(或者能量不同)的光子。比如波長為550nm的光子、波長為700 nm的光子...

  • 人眼感知的顏色:人眼對整個可見光譜的感知。因為人眼視網膜上,主要負責感知色彩的視錐細胞對不同波長的光子的感知并不相同,存在一個相應的范圍

而人眼對不同波長的感知能力可以用下圖中的白色曲線來表示。白線對應的值越高,表示人眼對此波段的光子的感知越靈敏。人眼把S那條線感受到的光子都認知為藍色、把M那天線的認知為綠色、把L那天線對應的認知為紅色。

實際上,上述的三種顏色:藍、綠和紅色(RGB)正是我們所知道的三原色。所以,事實上,你只能看到三種顏色:藍綠紅!等等……事實不是這樣啊!我們的世界明明豐富多次啊??你怎么在這里瞎扯?其實,你看到的多種多樣的顏色是這三種顏色組合在一起的結果。這三種顏色好比一個三維空間里的三個坐標,你把他們不同程度的組合起來,就可以形成各種各樣的顏色。實際上,他們形成了一個3D的色彩空間,如下圖,空間中每一個點都代表了一種顏色。

所以你看到的顏色其實就是人眼在對藍綠紅這三種光子的測量,然后線性的疊加而已!其實我們的RGB顯示器就是運用了這個原理,顯示出不同的色彩。所以,很多顏色并不是真正的一個顏色而已,它代表的是這個物體發出的光中,藍綠紅這三種光的相對強度的組合!!這些美麗的顏色中很大一部分其實只是你的腦補而已…… [不過,因為人眼視錐細胞的響應也存在飽和,也就是說藍、綠和紅不可能無限的亮,因此,人類的感知只是這個三維空間里的一個有限區域。這也是CIE定義出他們最有名的CIE色表的來源。因為人類對色彩的感知是有限的,且我們實際上對實際的光譜更感興趣,所以,根據人眼對色彩的響應曲線,我們可以把上面的三維空間變換到二維(如下圖)

而這二維的平面涵蓋了人眼能看到的所有顏色(注意,實際上上述的三維色彩空間里有很大一部分是人眼無法識別的顏色,因為人眼視錐細胞的感光能力是有限的!),于是就形成了下面的CIE圖,此圖是1976年的修改標準,該圖最早由1931年提出。


而,通過數學運算,不難算出真實光譜,比如450nm的光應該什么顏色的。你只需要把450nm處三種顏色的視錐細胞的響應疊加起來就行了。通過這樣的方法,你就可以計算出一條曲線,它可以近似代表自然界中真實的色彩。此外,你還可以計算出色溫曲線。如果你還記得黑體這個概念的話,不同溫度會給出不同的能譜分布,如下圖,不同的能譜分布中,藍、綠和紅色的相對強度不同。

那么同樣通過數學的運算,你可以計算出不同溫度黑體在人眼中所反映出的“顏色”。就是圖中間的那條曲線。太陽的溫度是~6000K,于是我們可以對應出來,太陽是白色(偏一點點黃)。]然而,還需要提到的是,上面說的是物體發出的光,比如太陽(黃白色),還有你的顯示器。那么綠葉的顏色又是怎么回事?白紙呢?白種人為什么那么白?黑人為什么那么黑?因為他們不發光。所以,其實他們的顏色只是他們反射的光中藍綠紅這三種光的相對強度的組合!!因此,對于反光的物體來說,光源的顏色覆蓋很重要。這也是為什么我們使用日光燈或者白光燈的原因。試想一下,如果你用綠光燈,你還能看到豐富多彩的衣服和圖畫嗎?值得一提的是,漢語里的紫色其實是一個比較模糊的概念,既可以對英語英語里的violet,也可以是purple。嚴格來說,violet更接近比藍波波長更短的顏色,也就是紅和綠都很少,而藍色也很弱的情形。相當于黑中加了點藍的感覺。而紫色則是純粹的腦補大紅+大藍而已。不管則樣,紫色并不是真實的顏色。那么violet呢?其實它也并不是真實的,我們再來看一副更精確的視錐細胞響應曲線

或者為了更加嚴謹,我們來看看論文里實際的測量曲線:

注意到了嗎?實際上在比藍光中較短的波段紅色視錐細胞的響應也比較突出,大概是0.1,而藍色大概是0.7-0.8。因此,你看到的violet也是藍+紅組合的結果。

一句話總結,我們大致可以理解為,顏色是自然界的可見光波段的光譜在人眼中的一個線性投影。我們可以更具CIE,把人眼中看到的“顏色”,還原到自然界“真實的顏色”

自然界中任何一點色都可以在Lab空間中表達出來,它的色彩空間比RGB空間還要大(有毛用?超過了RGB色域屏幕顯示不了,超過了CMYK的色域打印不了,超過了視覺色域看都看不了!高精度下lab偶爾可以作為顏色模式的中間標尺,但是這和你一點關系都沒有。這純粹是數學公式定義的結果——色域很大純粹是因為定義范圍內有許多多余的顏色)。不過對PS用戶來說:LAB最大的優勢就是調色,最常用的也是調色。明度和色彩信息因為是分離的,可以允許做出更多的操作,更精準的調整。也可以通簡單的調整就出做一些別的模式非常復雜的操作才能達到的效果。比如照片過暴導致高光細節丟失嚴重,就可以用LAB修補高光部分的色彩信息。

這種模式是以數字化方式來描述人的視覺感應, 與設備無關,所以它彌補了RGB和CMYK模式必須依賴于設備色彩特性的不足。由于Lab的色彩空間要比RGB模式和CMYK模式的色彩空間大。


注:Catmull和Smith在1971至1972年間提出了這個不可或缺的alpha數值,使得alpha渲染和alpha合成變得可能。提出者以alpha來命名是源于經典的線性插值方程αA + (1-α)B所用的就是這個希臘字母。PNG是一種使用RGBA的圖像格式。




參考文章:

色彩空間表示與轉換 https://zhuanlan.zhihu.com/p/24281841

對顏色空間YUV、RGB的理解 https://blog.csdn.net/asahinokawa/article/details/80596655

色彩模式RGB&YUV 格式分析 www.eepw.com.cn/article/282178.htm




轉載本站文章《色彩空間RGB/CMYK/HSL/HSB/HSV/Lab/YUV基礎理論及轉換方法:RGB與YUV》, 請注明出處:http://www.qsexmk.tw/html/theory/CG-CV-IP/6112.html