YUV格式&像素

轉自:http://blog.csdn.net/grow_mature/article/details/9004548spa

 

一幅彩色圖像的基本要素是什麼?.net

說白了,一幅圖像包括的基本東西就是二進制數據,其容量大小實質即爲二進制數據的多少。一幅1920x1080像素的YUV422的圖像,大小是1920X1080X2=4147200(十進制),也就是3.95M大小。這個大小跟多少個像素點和數據的存儲格式有關。下面簡述yuv與像素的關係:視頻

 

YUV與像素的關係:blog

YUV是利用一個亮度(Y)、兩個色差(U,V)來代替傳統的RGB三原色來壓縮圖像。傳統的RGB三原色使用紅綠藍三原色表示一個像素,每種原色佔用一個字節(8bit),所以一個像素用RGB表示則須要8*3=24bit。若是使用YUV表示這個像素,假設YUV的採樣率爲:4:2:0,即每個像素對於亮度Y的採樣頻率爲1,對於色差U和V,則是每相鄰的兩個像素各取一個U和V。對於單個的像素來講,色差U和V的採樣頻率爲亮度的一半。若有三個相鄰的像素,若是用RGB三原色表示,則共須要佔用:8*3*3=72bits;若是採用YUV(4:2:0)表示,則只須要佔用:8*3(Y)+ 8*3*0.5(U)+8*3*0.5(V)= 36bits。只需原來一半的空間,就能夠表示原來的圖像,數據率壓縮了一倍,而圖像的效果基本沒發生變化。圖片

 

通常描述一幅圖像的參數時咱們會考慮如下幾點:內存

一、寬:一行有多少個像素點。二、高:一列有多少個像素點。三、YUV格式仍是RGB格式?四、一行多少個字節?五、圖像大小是多少?六、圖像的分辨率是多少?產品

 

如下對YUV42二、YUV420和YUV444進行初步解析:it

YUV422格式。打包

分爲不少小類,按照U、V的排列能夠有YUYV,YVYU,UYVY,VYUY四種,其中,YUYVY通常又稱做yuv2格式。互聯網

而這四種YUV422格式,每種又能夠分爲2小類,按Y和UV的排列能夠有打包格式和平面格式。例如,一個640×480×2的YUV文件,打包格式就是YUYVYUYV這樣一直排列下去,平面格式就是先640×480個Y排列完,而後是640×240個U,而後是640×240個V這樣排列,以下

圖:

 

假若有一幅640×480的圖片,用yuv422來表示,那麼,採樣方式就是每一個像素採樣Y信號,U,V信號隔一個採樣,這樣算下來,就有640×480個Y,640×240個U,640×240個V,一幅640×480大小的YUV圖片佔的總字節數爲640×480×2個字節,每像素2個字節,也就是16位。

在內存種中這樣排列:Y0U0Y1V0 Y2U1Y3V1...

第一個像素的YUV值爲:Y0 U0 V0

第二個像素的YUV值爲: Y1 U0 V0

第三個像素的YUV值爲: Y2 U1 V1

.....其餘以此推類,也就是說每兩個像素是共用了UV的;在一行上來看,每一個像素的YUV值中Y值被採樣,UV值採樣0後,跳到3,而後5,因此每行上Y有640個,U,V各320個。

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

以上僅給出了理論上的示例,在實際數據存儲中是有多是不一樣的,下面給出幾種具體的存儲形式:

(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字節內存(亮度2個字節,兩個色度各1個字節)。

下面的四個像素爲: [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字節內存(亮度4個字節,兩個色度各1個字節)。

下面的四個像素爲: [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字節內存(亮度4個字節,兩個色度各1個字節)。

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

[Y5U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]

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

Y5V5 Y6 Y7 V7 Y8

映射出的像素點爲:[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]

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

(資料均來源於互聯網,侵權請聲明,謝謝)

相關文章
相關標籤/搜索