天天看點

分量視訊 Y'UV, YUV, YCbCr,YPbPr對一種顔色進行編碼的方法統稱為"顔色空間"或"色域",RGB和YUV,都是顔色空間的種類,

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

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

分量視訊信号(色差信号),通常采用YCbCr和YPbPr兩種辨別,

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

YPbPr是從480i到720p的分量輸入接口标準(不區分隔行和逐行),隔行分量端子和逐行分量端子共用,端子辨別為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

YUV轉RGB

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分量。

分量視訊 Y'UV, YUV, YCbCr,YPbPr對一種顔色進行編碼的方法統稱為"顔色空間"或"色域",RGB和YUV,都是顔色空間的種類,

先記住下面這段話,以後提取每個像素的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位元組.這個格式其實就是24bpp的RGB格式了。

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

4:2:0  這種采樣并不意味着隻有Y,Cb而沒有Cr分量,這裡的0說的U,V分量隔行才采樣一次。比如第一行采樣 4:2:0 ,第二行采樣 4:0:2 ,依次類推...在這種采樣方式下,每一個像素占用16bits或10bits空間.

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

下面我用圖的形式給出常見的YUV碼流的存儲方式,并在存儲方式後面附有取樣每個像素點的YUV資料的方法,其中,Cb、Cr的含義等同于U、V。

YUYV格式

分量視訊 Y'UV, YUV, YCbCr,YPbPr對一種顔色進行編碼的方法統稱為"顔色空間"或"色域",RGB和YUV,都是顔色空間的種類,

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

UYVY格式

分量視訊 Y'UV, YUV, YCbCr,YPbPr對一種顔色進行編碼的方法統稱為"顔色空間"或"色域",RGB和YUV,都是顔色空間的種類,

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

YUV422P格式

分量視訊 Y'UV, YUV, YCbCr,YPbPr對一種顔色進行編碼的方法統稱為"顔色空間"或"色域",RGB和YUV,都是顔色空間的種類,

YUV422P也屬于YUV422的一種,它是一種Plane模式,即打包模式,并不是将YUV資料交錯存儲,而是先存放所有的Y分量,然後存儲所有的U(Cb)分量,最後存儲所有的V(Cr)分量,如上圖所示。其每一個像素點的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即兩個Y共用一個UV。比如,對于像素點Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00。

YV12,YU12 格式

分量視訊 Y'UV, YUV, YCbCr,YPbPr對一種顔色進行編碼的方法統稱為"顔色空間"或"色域",RGB和YUV,都是顔色空間的種類,

YU12和YV12屬于YUV420格式,也是一種Plane模式,将Y、U、V分量分别打包,依次存儲。其每一個像素點的YUV資料提取遵循YUV420格式的提取方式,即4個Y分量共用一組UV。注意,上圖中,Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00,其他依次類推。

NV12,NV21格式

分量視訊 Y'UV, YUV, YCbCr,YPbPr對一種顔色進行編碼的方法統稱為"顔色空間"或"色域",RGB和YUV,都是顔色空間的種類,

NV12和NV21屬于YUV420格式,是一種two-plane模式,即Y和UV分為兩個Plane,但是UV(CbCr)為交錯存儲,而不是分為三個plane。其提取方式與上一種類似,即Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00

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在進行編碼的時候需要标準的YUV(4:2:0)。但是這裡需要注意的是,雖然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信号值的每一行分别拷貝一份形成連續兩行資料。