音視頻入門-07-認識YUV

音視頻入門文章目錄

YUV & YCbCr 簡介

  • YUV,是一種顏色編碼方法。常使用在各個視頻處理組件中。 YUV 在對照片或視頻編碼時,考慮到人類的感知能力,允許降低色度的帶寬。
  • Y 表示明亮度(Luminance或Luma),也就是灰階值,U 和 V 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用於指定像素的顏色。
  • Y'CbCr 不是一種絕對的色彩空間,是一種針對 RGB 資訊所做的編碼。真正的顏色顯示是根據實際 RGB 色盤(colorant)來決定的。因此 Y'CbCr 所表示的值只有在標準 RGB 色盤或是 ICC 數據(ICC profile)有提供的時候才能計算。Y'CbCr 在模擬分量影像(analog component video)中也常被稱爲 YPbPr。
  • YCbCr 不是一種絕對色彩空間,是 YUV 壓縮和偏移的版本。YCbCr 的 Y 與 YUV 中的 Y 含義一致,Cb 和 Cr 與 UV 同樣都指色彩,Cb 指藍色色度,Cr 指紅色色度,在應用上很廣泛,JPEG、MPEG、DVD、攝影機、數字電視等皆採此一格式。
  • [ [ [ 因此一般俗稱的 YUV 大多是指 YCbCr ] ] ]。
  • [ [ [ 因此一般俗稱的 YUV 大多是指 YCbCr ] ] ]。
  • [ [ [ 因此一般俗稱的 YUV 大多是指 YCbCr ] ] ]。

YUVFormats分成兩個格式:

  • 緊縮格式(packedformats):將 Y、U、V 值存儲成 MacroPixels 數組,和 RGB 的存放方式類似。
  • 平面格式(planarformats):將 Y、U、V 的三個分量分別存放在不同的矩陣中。

緊縮格式(packedformat)中的 YUV 是混合在一起的,對於 YUV4:4:4 格式而言,用緊縮格式很合適的,因此就有了 UYVY、YUYV 等。

平面格式(planarformats)是指每 Y 分量,U 分量和 V 分量都是以獨立的平面組織的,也就是說所有的 U 分量必須在 Y 分量後面,而 V 分量在所有的 U 分量後面,此一格式適用於採樣(subsample)。平面格式(planarformat)有 I420(4:2:0)、YV12、IYUV 等。

YUV 採樣格式

爲節省帶寬起見,大多數 YUV 格式平均使用的每像素位數都少於 24 位。主要的採樣(subsample)格式有 YCbCr4:2:0、YCbCr4:2:2、YCbCr4:1:1 和 YCbCr4:4:4。YUV 的表示法稱爲 A:B:C 表示法:

  • 4:4:4 表示完全取樣。
  • 4:2:2 表示 2:1 的水平取樣,垂直完全採樣。
  • 4:2:0 表示 2:1 的水平取樣,垂直 2:1 採樣。
  • 4:1:1 表示 4:1 的水平取樣,垂直完全採樣。

<br/>

表格中,每一格代表一個像素

未採樣前

- 1 2 3 4
1 Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
2 Y4 U4 V4 Y5 U5 V5 Y6 U6 V6 Y7 U7 V7
3 Y8 U8 V8 Y9 U9 V9 Y10 U10 V10 Y11 U11 V11
4 Y12 U12 V12 Y13 U13 V13 Y14 U14 V14 Y15 U15 V15

4:4:4 採樣

4:4:4 表示完全取樣
- 1 2 3 4
1 Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
2 Y4 U4 V4 Y5 U5 V5 Y6 U6 V6 Y7 U7 V7
3 Y8 U8 V8 Y9 U9 V9 Y10 U10 V10 Y11 U11 V11
4 Y12 U12 V12 Y13 U13 V13 Y14 U14 V14 Y15 U15 V15

映射的像素:

- 1 2 3 4
1 Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
2 Y4 U4 V4 Y5 U5 V5 Y6 U6 V6 Y7 U7 V7
3 Y8 U8 V8 Y9 U9 V9 Y10 U10 V10 Y11 U11 V11
4 Y12 U12 V12 Y13 U13 V13 Y14 U14 V14 Y15 U15 V15

4:2:2 採樣

4:2:2 表示 2:1 的水平取樣,垂直完全採樣
每採樣過一個像素點,都會採樣其 Y 分量,而 U、V 分量就會間隔一個採集一個。
- 1 2 3 4
1 Y0 U0 - Y1 - V1 Y2 U2 - Y3 - V3
2 Y4 U4 - Y5 - V5 Y6 U6 - Y7 - V7
3 Y8 U8 - Y9 - V9 Y10 U10 - Y11 - V11
4 Y12 U12 - Y13 - V13 Y14 U14 - Y15 - V15

映射的像素:

- 1 2 3 4
1 Y0 U0 V1 Y1 U0 V1 Y2 U2 V3 Y3 U2 V3
2 Y4 U4 V5 Y5 U4 V5 Y6 U6 V7 Y7 U6 V7
3 Y8 U8 V9 Y9 U8 V9 Y10 U10 V11 Y11 U10 V11
4 Y12 U12 V13 Y13 U12 V13 Y14 U14 V15 Y15 U14 V15

4:2:0 採樣

4:2:0 表示 2:1 的水平取樣,垂直 2:1 採樣
每採樣過一個像素點,都會採樣其 Y 分量,而 U、V 分量就會間隔一行按照 2 : 1 進行採樣。
- 1 2 3 4
1 Y0 U0 - Y1 - - Y2 U2 - Y3 - -
2 Y4 - V4 Y5 - - Y6 - V6 Y7 - -
3 Y8 U8 - Y9 - - Y10 U10 - Y11 - -
4 Y12 - V12 Y13 - - Y14 - V14 Y15 - -

映射的像素:

- 1 2 3 4
1 Y0 U0 V4 Y1 U0 V4 Y2 U2 V6 Y3 U2 V6
2 Y4 U0 V4 Y5 U0 V4 Y6 U2 V6 Y7 U2 V6
3 Y8 U8 V12 Y9 U8 V12 Y10 U10 V14 Y11 U10 V14
4 Y12 U8 V12 Y13 U8 V12 Y14 U10 V14 Y15 U10 V14

4:1:1 採樣

4:1:1 表示 4:1 的水平取樣,垂直完全採樣
每採樣過一個像素點,都會採樣其 Y 分量,而 U、V 分量就會間隔一行按照 2 : 1 進行採樣。
- 1 2 3 4
1 Y0 U0 - Y1 - - Y2 - V2 Y3 - -
2 Y4 U4 - Y5 - - Y6 - V6 Y7 - -
3 Y8 U8 - Y9 - - Y10 - V10 Y11 - -
4 Y12 U12 - Y13 - - Y14 - V14 Y15 - -

映射的像素:

- 1 2 3 4
1 Y0 U0 V2 Y1 U0 V2 Y2 U0 V2 Y3 U0 V2
2 Y4 U4 V6 Y5 U4 V6 Y6 U4 V6 Y7 U4 V6
3 Y8 U8 V10 Y9 U8 V10 Y10 U8 V10 Y11 U8 V10
4 Y12 U12 V14 Y13 U12 V14 Y14 U12 V14 Y15 U12 V14

YUV 存儲方式

YUV 的存儲方式,一般有兩種方式,一種叫 packed 模式,一種叫 planar 模式。packed 模式 Y,U,V 交錯排列,而 planar 模式 Y 和 U,V 的排列是分開的,而具體 U 與 V 繼續分開或者繼續交錯排列根據具體的格式相關。

<br/>
常見的基於 YUV422 採樣的格式:

YUV422 採樣
YUYV 格式
UYVY 格式
YUV422P 格式

<br/>
常見的基於 YUV420 採樣的格式:

YUV420P 類型 YUV420SP 類型
YV12 格式 YU12 格式
NV12 格式 NV21 格式

基於 YUV444 採樣的格式

4x4 像素 YUV444 採樣:

- 1 2 3 4
1 Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
2 Y4 U4 V4 Y5 U5 V5 Y6 U6 V6 Y7 U7 V7
3 Y8 U8 V8 Y9 U9 V9 Y10 U10 V10 Y11 U11 V11
4 Y12 U12 V12 Y13 U13 V13 Y14 U14 V14 Y15 U15 V15

YUV444P 格式

存儲時:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7 
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15
U0  U1  U2  U3  U4  U5  U6  U7 
U8  U9  U10 U11 U12 U13 U14 U15
V0  V1  V2  V3  V4  V5  V6  V7 
V8  V9  V10 V11 V12 V13 V14 V15

基於 YUV422 採樣的格式

4x4 像素 YUV422 採樣:

- 1 2 3 4
1 Y0 U0 - Y1 - V1 Y2 U2 - Y3 - V3
2 Y4 U4 - Y5 - V5 Y6 U6 - Y7 - V7
3 Y8 U8 - Y9 - V9 Y10 U10 - Y11 - V11
4 Y12 U12 - Y13 - V13 Y14 U14 - Y15 - V15

YUYV 格式

YUYV 格式是採用打包格式進行存儲的,指每個像素點都採樣 Y 分量,但是每隔一個像素採樣它的 UV 分量。

存儲時(每個方括號裏是 Macropixel=2 image pixels):

[Y0  U0  Y1  V1 ][Y2  U2  Y3  V3 ]
[Y4  U4  Y5  V5 ][Y6  U6  Y7  V7 ]
[Y8  U8  Y9  V9 ][Y10 U10 Y11 V11]
[Y12 U12 Y13 V13][Y14 U14 Y15 V15]

對 U,V 分量重新編號:

[Y0  U0  Y1  V0 ][Y2  U1  Y3  V1 ]
[Y4  U2  Y5  V2 ][Y6  U3  Y7  V3 ]
[Y8  U4  Y9  V4 ][Y10 U5  Y11 V5 ]
[Y12 U6  Y13 V6 ][Y14 U7  Y15 V7 ]

UYVY 格式

UYVY 格式也是採用打包格式進行存儲,它的順序和 YUYV 相反,先採樣 U 分量再採樣 Y 分量。

存儲時(每個方括號裏是 Macropixel=2 image pixels):

[U0  Y0  V1  Y1 ][U2  Y2  V3  Y3 ]
[U4  Y4  V5  Y5 ][U6  Y6  V7  Y7 ]
[U8  Y8  V9  Y9 ][U10 Y10 V11 Y11]
[U12 Y12 V13 Y13][U14 Y14 V15 Y15]

對 U,V 分量重新編號:

[U0 Y0  V0 Y1 ][U1 Y2  V1 Y3 ]
[U2 Y4  V2 Y5 ][U3 Y6  V3 Y7 ]
[U4 Y8  V4 Y9 ][U5 Y10 V5 Y11]
[U6 Y12 V6 Y13][U7 Y14 V7 Y15]

YUV422P 格式(又叫做 I422)

YUV422P 格式,又叫做 I422,採用的是平面格式進行存儲,先存儲所有的 Y 分量,再存儲所有的 U 分量,再存儲所有的 V 分量。

存儲時:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  U2  U4  U6  U8  U10 U12 U14 
V1  V3  V5  V7  V9  V11 V13 V15

對 U,V 分量重新編號:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  U1  U2  U3  U4  U5  U6  U7 
V0  V1  V2  V3  V4  V5  V6  V7

基於 YUV420 採樣的格式

YUV420P 和 YUV420SP 都是基於 Planar 平面模式進行存儲的。

4x4 像素 YUV420 採樣:

- 1 2 3 4
1 Y0 U0 - Y1 - - Y2 U2 - Y3 - -
2 Y4 - V4 Y5 - - Y6 - V6 Y7 - -
3 Y8 U8 - Y9 - - Y10 U10 - Y11 - -
4 Y12 - V12 Y13 - - Y14 - V14 Y15 - -

YUV420P 類型

YUV420P 類型先存儲所有的 Y 分量後,會先存儲所有的 U 分量或者 V 分量。
YU12 和 YV12 格式都屬於 YUV420P 類型,即先存儲 Y 分量,再存儲 U、V 分量,區別在於:YU12 是先 Y 再 U 後 V,而 YV12 是先 Y 再 V 後 U 。

YU12 格式(又叫做I420)

YU12 是先 Y 再 U 後 V

存儲時:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  U2  U8  U10 V4  V6  V12 V14

對 U,V 分量重新編號:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  U1  U2  U3  V0  V1  V2  V3 

YV12 格式

YV12 是先 Y 再 V 後 U

存儲時:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
V4  V6  V12 V14 U0  U2  U8  U10 

對 V,U 分量重新編號:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
V0  V1  V2  V3  U0  U1  U2  U3  

YUV420SP 類型

YUV420SP 類型先存儲所有的 Y 分量後,是按照 UV 或者 VU 的交替順序進行存儲。
NV12 和 NV21 格式都屬於 YUV420SP 類型。它也是先存儲了 Y 分量,但接下來並不是再存儲所有的 U 或者 V 分量,而是把 UV 分量交替連續存儲。

NV12 格式

NV12 是 iOS 中有的模式,它的存儲順序是先存 Y 分量,再 UV 進行交替存儲。

存儲時:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  V4  U2  V6  U8  V12 U10 V14

對 U,V 分量重新編號:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  V0  U1  V1  U2  V2  U3  V3 

NV21 格式

NV21 是 Android 中有的模式,它的存儲順序是先存 Y 分量,在 VU 交替存儲。

存儲時:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
V4  U0  V6  U2  V12 U8  V14 U10 

對 U,V 分量重新編號:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
V0  U0  V1  U1  V2  U2  V3  U3   

參考資料:

維基百科-YUV

維基百科-YCbCr

百度百科-YUV

百度百科-YCbCr

一文讀懂 YUV 的採樣與格式

內容有誤?聯繫作者:

聯繫作者


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