RGB、YUV和YCbCr

    之前對RGB、YUV和YCbCr一直沒有清晰的理解和認識,今天打算做一個小結,結合網上的文章談談自己的看法,也希望有機會看到這篇文章的人能指點一二,相互交流,共同進步。

    首先要說明,上述的RGB、YUV和YCbCr都是人爲規定的彩色模型或顏色空間(有時也叫彩色系統或彩色空間)。它的用途是在某些標準下用通常可接受的方式對彩色加以說明。本質上,彩色模型是座標系統和子空間的闡述。

【1】RGB

    RGB(紅綠藍)是依據人眼識別的顏色定義出的空間,可表示大部分顏色。但在科學研究一般不採用RGB顏色空間,因爲它的細節難以進行數字化的調整。它將色調,亮度,飽和度三個量放在一起表示,很難分開。它是最通用的面向硬件的彩色模型。該模型用於彩色監視器和一大類彩色視頻攝像。

【2】YUV

    在 YUV 空間中,每一個顏色有一個亮度信號 Y,和兩個色度信號 U 和 V。亮度信號是強度的感覺,它和色度信號斷開,這樣的話強度就可以在不影響顏色的情況下改變。

    YUV 使用RGB的信息,但它從全綵色圖像中產生一個黑白圖像,然後提取出三個主要的顏色變成兩個額外的信號來描述顏色。把這三個信號組合回來就可以產生一個全綵色圖像。

    Y 通道描述 Luma 信號,它與亮度信號有一點點不同,值的範圍介於亮和暗之間。 Luma 是黑白電視可以看到的信號。U (Cb) 和 V (Cr) 通道從紅 (U) 和藍 (V) 中提取亮度值來減少顏色信息量。這些值可以從新組合來決定紅,綠和藍的混合信號。

    YUV和RGB的轉換:
       Y = 0.299 R + 0.587 G + 0.114 B
       U = -0.1687 R - 0.3313 G + 0.5 B + 128
       V = 0.5 R - 0.4187 G - 0.0813 B + 128


       R = Y + 1.402 (V-128)

       G= Y - 0.34414 (U-128) - 0.71414 (V-128)

       B= Y + 1.772 (U-128)

【3】YCbCr

     YCbCr 是在世界數字組織視頻標準研製過程中作爲ITU - R BT1601 建議的一部分, 其實是YUV經過縮放和偏移的翻版。其中Y與YUV 中的Y含義一致, Cb , Cr 同樣都指色彩, 只是在表示方法上不同而已。在YUV 家族中, YCbCr 是在計算機系統中應用最多的成員, 其應用領域很廣泛,JPEG、MPEG均採用此格式。一般人們所講的YUV大多是指YCbCr。

    YCbCr與RGB的相互轉換

     Y=0.299R+0.587G+0.114B

     Cb=0.564(B-Y)

     Cr=0.713(R-Y)

 

     R=Y+1.402Cr

     G=Y-0.344Cb-0.714Cr

       B=Y+1.772Cb

 

YUV(YCbCr)採樣格式:

    主要的採樣格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。其中YCbCr 4:1:1 比較常用,其含義爲:每個點保存一個 8bit 的亮度值(也就是Y值), 每 2 x 2 個點保存一個 Cr和Cb值, 圖像在肉眼中的感覺不會起太大的變化。所以, 原來用 RGB(R,G,B 都是 8bit unsigned) 模型, 每個點需要 8x3=24 bits, 而現在僅需要 8+(8/4)+(8/4)=12bits, 平均每個點佔12bits。這樣就把圖像的數據壓縮了一半。

上邊僅給出了理論上的示例,在實際數據存儲中是有可能是不同的,下面給出幾種具體的存儲形式:

(1) YUV 4:4:4

  YUV三個信道的抽樣率相同,因此在生成的圖像裏,每個象素的三個分量信息完整(每個分量通常8比特),經過8比特量化之後,未經壓縮的每個像素佔用3個字節。

  下面的四個像素爲: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  存放的碼流爲: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

(2) YUV 4:2:2

  每個色差信道的抽樣率是亮度信道的一半,所以水平方向的色度抽樣率只是4:4:4的一半。對非壓縮的8比特量化的圖像來說,每個由兩個水平方向相鄰的像素組成的宏像素需要佔用4字節內存(例如下面映射出的前兩個像素點只需要Y0、Y1、U0、V1四個字節)。

  下面的四個像素爲: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  存放的碼流爲: Y0 U0 Y1 V1 Y2 U2 Y3 V3

  映射出像素點爲:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]

(3) YUV 4:1:1

  4:1:1的色度抽樣,是在水平方向上對色度進行4:1抽樣。對於低端用戶和消費類產品這仍然是可以接受的。對非壓縮的8比特量化的視頻來說,每個由4個水平方向相鄰的像素組成的宏像素需要佔用6字節內存

  下面的四個像素爲: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  存放的碼流爲: Y0 U0 Y1 Y2 V2 Y3

  映射出像素點爲:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]

(4)YUV4:2:0

  4:2:0並不意味着只有Y,Cb而沒有Cr分量。它指得是對每行掃描線來說,只有一種色度分量以2:1的抽樣率存儲。相鄰的掃描行存儲不同的色度分量,也就是說,如果一行是4:2:0的話,下一行就是4:0:2,再下一行是4:2:0...以此類推。對每個色度分量來說,水平方向和豎直方向的抽樣率都是2:1,所以可以說色度的抽樣率是4:1。對非壓縮的8比特量化的視頻來說,每個由2x2個2行2列相鄰的像素組成的宏像素需要佔用6字節內存。

下面八個像素爲:

    [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  [Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]

存放的碼流爲:

    Y0 U0 Y1 Y2 U2 Y3

  Y5 V5 Y6 Y7 V7 Y8

映射出的像素點爲:

    [Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]

    [Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]

 

    之前對於4:4:4、4:2:2、4:2:0一直沒有清晰地認識,而上面的解釋是我見到的最直觀的,使我一目瞭然,豁然開朗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章