1. 程式人生 > >色彩空間(RGB, HSV, LAB, YUV)

色彩空間(RGB, HSV, LAB, YUV)

RGB顏色空間

     RGB(red,green,blue)顏色空間最常用的用途就是顯示器系統(計算機、電視機等都是採用RGB顏色空間來進行影象顯示)。一般來說,電腦,電視機等是利用三個電子槍分別發射R分量,G分量,B分量的電子束,以此來激發螢幕上的RGB三種顏色的熒光粉,從而發出不同顏色、不同亮度的畫素、進而組成了一幅影象;很明顯,RGB顏色空間利用了物理學中的三原色疊加從而組成產生各種不同顏色的原理。在RGB顏色空間中,R、G、B三個分量的屬性是獨立的。也即是說,RGB顏色可以表示為(Red, Green, Blue)。其中,各個分量的數值越小,亮度越低。數值越大,亮度越高;如:(0,0,0)表示黑色,(255,255,255)表示白色;

    RGB顏色空間表示顏色的格式有RGB565,RGB555,RGB24,RGB32等;

其中,RGB565是使用16位表示一個畫素:5位表示R,6位表示G,5位表示B;

RGB555是另一種16位表示一個畫素的方法:分別用5位來表示RGB分量;剩餘一位不用;

RGB24是使用24位表示一個畫素:分別用8位表示RGB各個分量;這種方式最為常見;

RGB32是使用32位來表示一個畫素:分別用8位表示RGB各個分量;剩餘8位為alpha通道,也就是用來表示影象的“透明度”。注意:在某些系統中,剩餘的8位並沒有使用;

    RGB色彩空間稱為與裝置相關的色彩空間,因為不同的掃描器掃描同一幅影象,會得到不同色彩的影象資料;不同型號的顯示器顯示同一幅影象,也會有不同 的色彩顯示結果。顯示器和掃描器使用的RGB空間與CIE 1931 RGB真實三原色表色系統空間是不同的,後者 是與裝置無關的顏色空間。
 

HSV顏色空間


HSV(hue,saturation,value)表示色相、飽和度和亮度。該顏色空間可以用一個圓錐來表示,如下圖所示:


這裡,

hue表示顏色的相位角,取值範圍是0---360;

S表示顏色的飽和度:S為一比例值,範圍從0到255,它表示成所選顏色的純度和該顏色最大的純度之間的比率,通俗點講,S表示的是某種顏色的“純度”, S取值越大,表示色彩越純,取值越小,表示色彩越灰。

V表示色彩的明亮程度:範圍從0到255。V等於0表示圓錐的底部定點,也就是黑色,V等於1表示圓錐的頂面,當V=1並且S=0時表示純白色;

  • 色相(H)是色彩的基本屬性,就是平常所說的
    顏色
    名稱,如紅色黃色等。
  • 飽和度(S)是指色彩的純度,越高色彩越純,低則逐漸變灰,取0-100%的數值。
  • 明度(V),亮度(L),取0-100%。

 

優點:

大多數電視機、顯示器、投影儀通過將不同強度的紅、綠、藍色光混合來生成不同的顏色,這就是RGB 三原色加色法。通過這種方法可以在RGB色彩空間生成大量不同的顏色,然而,這三種顏色分量的取值與所生成的顏色之間的聯絡並不直觀

藝術家有時偏好使用HSL或HSV而不選擇三原色光模式(即RGB模型)或 印刷四分色模式(即CMYK模型),因為它類似於人類感覺顏色的方式,具有較強的感知度。RGB和CMYK分別是加法原色減法原色模型,以原色組合的方式定義顏色,而HSV以人類更熟悉的方式封裝了關於顏色的資訊:“這是什麼顏色?深淺如何?明暗如何?”。

 

從RGB到HSL或HSV的轉換[編輯]

設 (rgb)分別是一個顏色的紅、綠和藍座標,它們的值是在0到1之間的實數。設max等價於rgb中的最大者。設min等於這些值中的最小者。要找到在HSL空間中的 (hsl)值,這裡的h ∈ [0, 360)是角度的色相角,而sl ∈ [0,1]是飽和度和亮度,計算HSL顏色的計算為:

 h={\begin{cases}0^{\circ }&{\mbox{if }}max=min\\60^{\circ }\times {\frac  {g-b}{max-min}}+0^{\circ },&{\mbox{if }}max=r{\mbox{ and }}g\geq b\\60^{\circ }\times {\frac  {g-b}{max-min}}+360^{\circ },&{\mbox{if }}max=r{\mbox{ and }}g<b\\60^{\circ }\times {\frac  {b-r}{max-min}}+120^{\circ },&{\mbox{if }}max=g\\60^{\circ }\times {\frac  {r-g}{max-min}}+240^{\circ },&{\mbox{if }}max=b\end{cases}}

s={\begin{cases}0&{\mbox{if }}l=0{\mbox{ or }}max=min\\{\frac  {max-min}{max+min}}={\frac  {max-min}{2l}},&{\mbox{if }}0<l\leq {\frac  {1}{2}}\\{\frac  {max-min}{2-(max+min)}}={\frac  {max-min}{2-2l}},&{\mbox{if }}l>{\frac  {1}{2}}\end{cases}}

l={\begin{matrix}{\frac  {1}{2}}\end{matrix}}(max+min)

h的值通常規範化到位於0到360°之間。而h = 0用於max = min的(就是灰色)時候而不是留下h未定義。

HSL和HSV有同樣的色相定義,但是其他分量不同。

HSV顏色的sv的值定義如下

s={\begin{cases}0,&{\mbox{if }}max=0\\{\frac  {max-min}{max}}=1-{\frac  {min}{max}},&{\mbox{otherwise}}\end{cases}}

v=max\,


介紹


RGB 是對機器很友好的色彩模式,但並不夠人性化,因為我們對色彩的認識往往是”什麼顏色?鮮豔不鮮豔?亮還是暗?”。HSL 模式和 HSV(HSB) 都是基於 RGB 的,是作為一個更方便友好的方法創建出來的。

  • HSB 為 色相,飽和度,明度,
  • HSL 為 色相,飽和度,亮度,
  • HSV 為色相,飽和度,明度。

HSB 和 HSV 是一樣的,只是叫法不同,HSL 則還有一些細微的區別:

  • 在所有的情況下,H(Hue) 代表色相,S(Saturation) 代表飽和度。Hue(色相)是指取值範圍在0-360°的圓心角,每個角度可以代表一種顏色。B 在 HSB 模式中是 Brightness 的意思, V 在 HSV 中是值,但是所表述的是一個東西:對光的量或光源的功率的感知。色相和明度(值)可以在0 - 1或者0% - 100%間取值。
  • HSL 稍微有一些不同,Hue(色相)和 HSB/HSV 模式中一樣用數值表示,但是, S,同樣代表“飽和度”,定義不一樣,且需要轉換。 L 代表亮度,和 Brightness/Value 不一樣。Brightness(明度)是被認為是”光的量“,可以是任何顏色。
  • 而 Lightness(亮度)是作為”白的量“來理解的。Saturation(飽和度)不一樣,因為在兩個模型中,飽和度都按比例縮放以適應明度或亮度的定義。

由上面的關於 L 和 V 的計算方式不同也能體現出這點。 

 

 

 

LAB 色彩空間

CIELab顏色模型是基於人對顏色的感覺。Lab中的數值描述正常視力的人能夠看到的所有顏色。因為 Lab 描述的是顏色的顯示方式,而不是裝置(如顯示器、印表機)生成顏色所需的特定色料的數量,所以 Lab 被視為與裝置無關的顏色模型。色彩管理系統使用 Lab 作為色標,將顏色從一個色彩空間轉換到另一個色彩空間。Lab色彩模型除了上述不依賴於裝置的優點外,還具有它自身的優勢:色域寬闊。它不僅包含了RGB,CMYK的所有色域,還能表現它們不能表現的色彩。人的肉眼能感知的色彩,都能通過Lab模型表現出來。

Lab 顏色模式的亮度分量 (L) 範圍是0到100,a分量(綠色-紅色軸)和b分量(藍色-黃色軸)的範圍是+127到-128。

由上可知,Lab是一個顏色模型,是對顏色的一種描述,它即不可以列印也不可以顯示。所以根據我們的需要,最終要輸出RGB或CMYK。

2.1Lab顏色模型是基於人對顏色的感覺,與裝置無關,且色域寬闊。所以色彩管理中將其作為顏色轉換的依據。

2.2Lab色域寬闊,完全包含了RGB,CMYK的所有色域。所以理論上Lab與其他兩個色彩空間的轉換不會有色彩的損失,如果最終圖片需要轉換為CMYK,那麼正確的轉換方法是RGB——Lab——CMYK,這樣最大限度的減少顏色的損失。

2.3Lab顏色和明道通道是分開的,所以我們調節明度不會影響顏色,調節顏色不會影響明度,這對於後期修圖調色是一個很重要的概念。

 取值範圍是[0,100],表示從純黑到純白;a表示從紅色到綠色的範圍,取值範圍是[127,-128];b表示從黃色到藍色的範圍,取值範圍是[127,-128]

色彩模型

“LAB 色彩空間”的圖片搜尋結果

“LAB 色彩空間”的圖片搜尋結果

RGB轉Lab顏色空間

      RGB顏色空間不能直接轉換為Lab顏色空間,需要藉助XYZ顏色空間,把RGB顏色空間轉換到XYZ顏色空間,之後再把XYZ顏色空間轉換到Lab顏色空間。

     RGB與XYZ顏色空間有如下關係:

      仔細觀察式(1),其中 X = 0.412453 * R +  0.412453 *G+ 0.412453B ;  各系數相加之和為0.950456,非常接近於1,我們知道R/G/B的取值範圍為[ 0,255 ],如果係數和等於1,則X的取值範圍也必然在[ 0,255 ]之間,因此我們可以考慮等比修改各系數,使其之和等於1,這樣就做到了XYZ和RGB在同等範圍的對映。這也就是為什麼程式碼裡X,Y,Z會分別除以0.950456、1.0、1.088754。

 

YUV 色彩空間

YUV,是一種顏色編碼方法。常使用在各個視訊處理元件中。 YUV在對照片或視訊編碼時,考慮到人類的感知能力,允許降低色度的頻寬。YUV是編譯true-color顏色空間(color space)的種類,Y'UV, YUV, YCbCrYPbPr等專有名詞都可以稱為YUV,彼此有重疊

“Y”表示明亮度(Luminance、Luma),“U”和“V”則是色度濃度

特點

YUV主要用於優化彩色視訊訊號的傳輸,使其向後相容老式黑白電視。與RGB視訊訊號傳輸相比,它最大的優點在於只需佔用極少的頻寬(RGB要求三個獨立的視訊訊號同時傳輸)。其中"Y"表示明亮度(Luminance或Luma),也就是灰階值;而"U"和"V"表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用於指定畫素的顏色。"亮度"是透過RGB輸入訊號來建立的,方法是將RGB訊號的特定部分疊加到一起。"色度"則定義了顏色的兩個方面----色調與飽和度,分別用Cr(V)和Cb(U)來表示。其中,Cr反映了GB輸入訊號紅色部分與RGB訊號亮度值之間的差異。而Cb反映的是RGB輸入訊號藍色部分與RGB訊號亮度值之同的差異。

色彩模型

“YUV色彩”的圖片搜尋結果

“YUV色彩”的圖片搜尋結果

YUV與RGB的轉換公式:

U和V元件可以被表示成原始的R、G,和B:

\begin{array}{rll} Y &= 0.299 * R + 0.587 * G + 0.114 * B \\ U &= -0.169 * R - 0.331 * G + 0.5 * B + 128 \\ V &= 0.5 * R - 0.419 * G - 0.081 * B + 128 \end{array}

如一般順序,轉移元件的範圍可得到:

\begin{array}{rll} Y & \in \left[0, 255\right] \\ U & \in \left[0, 255\right] \\ V & \in \left[0, 255\right] \end{array}

在逆轉關係上,從YUV到RGB,可得

\begin{array}{rll} R & = Y + 1.13983 * (V - 128) \\ G & = Y - 0.39465 * (U - 128) - 0.58060 * (V - 128) \\ B & = Y + 2.03211 * (U - 128) \end{array}

取而代之,以矩陣表示法(matrix representation),可得到公式:

\begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 0.299 & 0.587 & 0.114 \\ -0.169 & -0.331 & 0.5 \\ 0.5 & -0.419 & -0.081 \end{bmatrix} \begin{bmatrix} R \\ G \\ B \end{bmatrix} + \begin{bmatrix} 0 \\ 128 \\ 128 \end{bmatrix}

\begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1 & -0.00093 & 1.401687 \\ 1 & -0.3437 & -0.71417 \\ 1 & 1.77216 & 0.00099 \end{bmatrix} \begin{bmatrix} Y \\ U - 128 \\ V - 128 \end{bmatrix}