YCrCb與YPrPb的含義與區別

對一種顏色進行編碼的方法統稱爲"顏色空間""色域"RGB和YUV,都是顏色空間的種類,

Y'UV, YUV, YCbCr,YPbPr等專有名詞都可以稱爲YUV,彼此有重疊


分量視頻信號(色差信號),通常採用YCbCrYPbPr兩種標識,

YUV(YCbCr)525i/625i480i/576i)隔行分量輸入接口

YPbPr是從480i720p的分量輸入接口標準(不區分隔行和逐行),隔行分量端子和逐行分量端子共用,端子標識爲YPbPr,無論隔行還是逐行分量信號都從這個端口輸入。

Y'PbPr是爲了滿足高質量視頻傳輸而設計的色彩分量形式及接口形式,採用並行傳輸的方式。PbPr也是由B'-Y'R'-Y'經過限幅得到的,目前,這種接口多見於模擬分量錄像機、高清攝錄一體機及DVD播放機等。模擬分量傳輸繞過了PAL編碼與解碼,減輕了亮/色串擾等編解碼對圖像的損失,但傳輸距離受到限制。

Y'CbCr是數字電視標準化時,爲了兼容亮度、色差這種色彩編碼方式而採用的一種類似於Y'PbPr的分量形式。

 

YUV(亦稱YCrCb)是被歐洲電視系統所採用的一種顏色編碼方法(屬於PAL)。YUV主要用於優化彩色視頻信號的傳輸,使其向後兼容老式黑白電視。主要用於電視系統以及模擬視頻領域,它將亮度信息(Y)與色彩信息(UV)分離,沒有UV信息一樣可以顯示完整的圖像,只不過是黑白的,這樣的設計很好地解決了彩色電視機與黑白電視的兼容問題。與RGB視頻信號傳輸相比,它最大的優點在於只需佔用極少的帶寬(RGB要求三個獨立的視頻信號同時傳輸)。

其中“Y”表示明亮度(Luminance或Luma),也就是灰階值;

而“U”和“V”表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用於指定像素的顏色。

“亮度”是通過RGB輸入信號來創建的,方法是將RGB信號的特定部分疊加到一起。“色度”則定義了顏色的兩個方面—色調與飽和度,分別用Cr和CB來表示。其中,Cr反映了GB輸入信號紅色部分與RGB信號亮度值之間的差異。而CB反映的是RGB輸入信號藍色部分與RGB信號亮度值之同的差異; YUV經常有另外的名字,YCbCr ,其中Y與YUV 中的Y含義一致,Cb , Cr同樣都指色彩,,只是在表示方法上不同而已,Cb Cr 就是本來理論上的“分量/色差”的標識。C代表分量(是component的縮寫)Cr、Cb分別對應r(紅)、b(藍)分量信號,Y除了g(綠)分量信號,還疊加了亮度信號。

以下是標準公式

RGB 轉換成 YUV

Y      = (0.257 * R) + (0.504 * G) + (0.098 * B) +16

Cr    = V =(0.439 * R) -  (0.368 * G) - (0.071 * B) +128

Cb   = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

YUV 轉換成 RGB

B =1.164(Y - 16) + 2.018(U - 128)

G =1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)

R =1.164(Y - 16) + 1.596(V - 128)

RGB取值範圍均爲0~255,Y=0~255,U=-122~+122,V=-157~+157

以下是經過簡化的公式,運算量比上述公式要小一些。

RGB轉YUV

Y =0.299R + 0.587G + 0.114B

U'=(BY)*0.565

V'=(RY)*0.713

YUVRGB

R = Y+ 1.403V'

G = Y- 0.344U' - 0.714V'

B = Y+ 1.770U'


YUV碼流的存儲格式其實與其採樣的方式密切相關,主流的採樣方式有三種,YUV4:4:4,YUV4:2:2,YUV4:2:0;

用三個圖來直觀地表示採集的方式吧,以黑點表示採樣該像素點的Y分量,以空心圓圈表示採用該像素點的UV分量。


先記住下面這段話,以後提取每個像素的YUV分量會用到。

YUV4:4:4採樣,每一個Y對應一組UV分量

YUV4:2:2採樣,每兩個Y共用一組UV分量

YUV4:2:0採樣,每四個Y共用一組UV分量

4:4:4 表示色度值(UV)沒有減少採樣。即Y,U,V各佔一個字節,加上Alpha通道一個字節,總共佔4字節.這個格式其實就是24bppRGB格式了。

4:2:2 表示UV分量採樣減半,比如第一個像素採樣Y,U,第二個像素採樣Y,V,依次類推,這樣每個點佔用2個字節.二個像素組成一個宏像素.

4:2:0  這種採樣並不意味着只有YCb而沒有Cr分量,這裏的0說的UV分量隔行才採樣一次。比如第一行採樣 4:2:0 ,第二行採樣 4:0:2 ,依次類推...在這種採樣方式下,每一個像素佔用16bits10bits空間.

4:1:1 可以參考4:2:2分量,是進一步壓縮,每隔四個點才採一次UV分量。一般是第0點採Y,U,1點採Y,3點採YV,第四點採Y,依次類推。



下面我用圖的形式給出常見的YUV碼流的存儲方式,並在存儲方式後面附有取樣每個像素點的YUV數據的方法,其中,CbCr的含義等同於UV


YUYV格式


YUYV爲YUV422採樣的存儲格式中的一種,相鄰的兩個Y共用其相鄰的兩個Cb、Cr,分析,對於像素點Y'00、Y'01 而言,其Cb、Cr的值均爲 Cb00、Cr00,其他的像素點的YUV取值依次類推。


UYVY格式

UYVY格式也是YUV422採樣的存儲格式中的一種,只不過與YUYV不同的是UV的排列順序不一樣而已,還原其每個像素點的YUV值的方法與上面一樣。


YUV422P格式

YUV422P也屬於YUV422的一種,它是一種Plane模式,即打包模式,並不是將YUV數據交錯存儲,而是先存放所有的Y分量,然後存儲所有的UCb)分量,最後存儲所有的VCr)分量,如上圖所示。其每一個像素點的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即兩個Y共用一個UV。比如,對於像素點Y'00Y'01而言,其CbCr的值均爲 Cb00Cr00


YV12,YU12格式

YU12YV12屬於YUV420格式,也是一種Plane模式,將YUV分量分別打包,依次存儲。其每一個像素點的YUV數據提取遵循YUV420格式的提取方式,即4Y分量共用一組UV。注意,上圖中,Y'00Y'01Y'10Y'11共用Cr00Cb00,其他依次類推。


NV12,NV21格式

NV12NV21屬於YUV420格式,是一種two-plane模式,即YUV分爲兩個Plane,但是UVCbCr)爲交錯存儲,而不是分爲三個plane。其提取方式與上一種類似,即Y'00Y'01Y'10Y'11共用Cr00Cb00


I420格式

I420就是YUV420P格式;存儲方式參考YUV422P;

一般來說,直接採集到的視頻數據是RGB24的格式,RGB24一幀的大小size=width×heigth×3 Bit,RGB32的size=width×heigth×4,如果是I420(即YUV標準格式4:2:0)的數據量是 size=width×heigth×1.5 Bit。

在採集到RGB24數據後,需要對這個格式的數據進行第一次壓縮。即將圖像的顏色空間由RGB2YUV。因爲X264在進行編碼的時候需要標準的YUV420。但是這裏需要注意的是,雖然YV12也是(4:2:0),但是YV12和I420的卻是不同的,在存儲空間上面有些區別。如下:

YV12:亮度(行×列)+U(行×列/4) +V(行×列/4)

I420亮度(行×列)+V(行×列/4) +U(行×列/4)

可以看出,YV12和I420基本上是一樣的,就是UV的順序不同。

YUV420 planar數據,以720×488大小圖象YUV420 planar爲例,其存儲格式是:共大小爲(720×480×3>>1)字節,

分爲三個部分:Y,U和V

Y分量:    (720×480)個字節

U(Cb)分量:(720×480>>2)個字節

V(Cr)分量:(720×480>>2)個字節

三個部分內部均是行優先存儲,三個部分之間是Y,U,V 順序存儲。即YUV數據的

0 - 720×480字節是Y分量值,        

720×480 - 720×480×5/4字節是U分量   

720×480×5/4 - 720×480×3/2字節是V分量。

4:2:2 4:2:0 轉換:

最簡單的方式:

YUV4:2:2 --->YUV4:2:0  Y不變,將U和V信號值在行(垂直方向)在進行一次隔行抽樣。 YUV4:2:0 --->YUV4:2:2  Y不變,將U和V信號值的每一行分別拷貝一份形成連續兩行數據。

發佈了137 篇原創文章 · 獲贊 22 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章