天天看點

音視訊基礎知識---像素格式YUV

音視訊基礎知識彙總:

  • 音視訊基礎知識---協定相關RTSP RTMP HLS

  • 音視訊基礎知識---封裝格式

  • 音視訊基礎知識---視訊編碼格式

  • 音視訊基礎知識---音頻編碼格式

  • 音視訊基礎知識---像素格式RGB

  • 音視訊基礎知識---像素格式YUV

YUV概述

YUV,是一種顔色編碼方法。常使用在各個影像處理元件中。 YUV在對照片或影片編碼時,考慮到人類的感覺能力,允許降低色度的帶寬。

YUV,分為三個分量:

  • Y表示明亮度(Luminance或Luma),也就是灰階值;
  • U(Cb)表示色度(Chrominance)
  • V(Cr)表示濃度(Chroma)

通常UV一起描述影像色彩和飽和度,用于指定像素的顔色。

對于 YUV 圖像來說,并不是每個像素點都需要包含了 Y、U、V 三個分量,根據不同的采樣格式,可以每個 Y 分量都對應自己的 UV 分量,也可以幾個 Y 分量共用 UV 分量。

音視訊基礎知識---像素格式YUV

YUV采樣格式

YUV444

YUV 4:4:4 采樣,意味着 Y、U、V 三個分量的采樣比例相同,是以在生成的圖像裡,每個像素的三個分量資訊完整,都是 8 bit,也就是一個位元組。

音視訊基礎知識---像素格式YUV
圖像像素資料: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3 
采樣的碼流: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3 
為什麼叫4:4:4 , 意思是每4個像素裡的資料有4個Y, 4個U, 4個V 
Y分量的大小: w*h 
U分量的大小: w*h 
V分量的大小: w*h
           

通過YUV444采樣的圖像大小和RGB顔色模型的圖像大小是一樣的。

一張 1280 * 720 大小的圖檔,在 YUV 4:4:4 采樣時的大小為:

(1280*720*8 + 1280*720*8 + 1280*720*8)/8/1024/1024 = 2.64 MB
           

YUV422

YUV 4:2:2 采樣,意味着每采樣過一個像素點,都會采樣其 Y 分量,而 U、V 分量就會間隔一個采集一個,Y 分量和 UV 分量按照 2 : 1 的比例采樣。如果水準方向有8個像素點,那麼就采樣8 個 Y 分量,4 個 UV 分量。

音視訊基礎知識---像素格式YUV
圖像像素資料: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3 
采樣的碼流: Y0 U0 Y1 V1 Y2 U2 Y3 V3 
為什麼叫4:2:2,意思是每4個像素裡面有4個Y,2個U,2個V 
Y分量的大小: w*h 
U分量的大小: w*h/2 
V分量的大小: w*h/2
           

一張 1280 * 720 大小的圖檔,在 YUV 4:2:2 采樣時的大小為:

(1280*720*8 + (1280*720)/2*8 + (1280*720)/2*8)/8/1024/1024 = 1.76 MB
           

通過與YUV444采樣進行比較可以算出,YUV 422 采樣的圖像比YUV444采樣圖像節省了三分之一的存儲空間,在傳輸時占用的帶寬也會減少。

YUV420

YUV 4:2:0 采樣,并不是指隻采樣 U 分量而不采樣 V 分量。而是指,其中,每采樣過一個像素點,都會采樣其 Y 分量,而 U、V 分量就會間隔一行按照 2 : 1 進行采樣。比如,第一行掃描時,YU 按照 2 : 1 的方式采樣,那麼第二行掃描時,YV 分量按照 2:1 的方式采樣。對于每個色度分量來說,它的水準方向和豎直方向的采樣和 Y 分量相比都是 2:1 。

音視訊基礎知識---像素格式YUV
圖像像素資料:    [Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3] 
                [Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]
采樣的碼流:     Y0 U0 Y1 Y2 U2 Y3 
                Y5 V5 Y6 Y7 V7 Y8 
為什麼叫4:2:0,意思是每4個像素中有4個Y,2個U,0個V,而下一行的四個像素中有4個Y,0個U,2個V
Y分量的大小: w*h 
U分量的大小: w*h/4 
V分量的大小: w*h/4
           

一張 1280 * 720 大小的圖檔,在 YUV 4:2:0 采樣時的大小為:

(1280*720*8 + (1280*720)/4*8 + (1280*720)/4*8)/8/1024/1024 = 1.32 MB
           

可以看到 YUV 420 采樣的圖像比 RGB 模型圖像節省了一半的存儲空間,是以它也是比較主流的采樣方式。

YUV存儲格式

YUV存儲格式有兩大類:planar 和 packed

  • planar,平面格式,先連續存儲所有像素點的Y,緊接着存儲所有像素點的U,然後是所有像素點的V;将幾個分量分開存,比如YUV420中,data[0]專門存Y,data[1]專門存U,data[2]專門存V。
  • packed,打包格式,每個像素點的Y,U,V是連續交錯存儲的,所有資料都存在data[0]中。

根據采樣方式和存儲格式的不同,就有了多種 YUV 格式。這些格式主要是基于 YUV 4:2:2 和 YUV 4:2:0 采樣。

常見的基于 YUV 4:2:2 采樣的格式如下表:

YUV422采樣
YUYV
UYUV
YUV422P

YUYV

YUYV 格式是采用打包格式進行存儲的,指每個像素點都采用 Y 分量,但是每隔一個像素采樣它的 UV 分量,排列順序如下:

Y0 UO Y1 V0 Y2 U1 Y3 V1
           

Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U1 V1 分量

UYVY

UYVY 格式是采用打包格式進行存儲,它的順序和 YUYV 相反,先采用 U 分量再采樣 Y 分量,排列順序如下:

U0 Y0 V0 Y1 U1 Y2 V1 Y3
           

YUV422P

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

Y0 Y1 Y2 Y3 U0 U1 V0 V1
           

常見的基于 YUV 4:2:0 采樣的格式如下表:

YUV420采樣 YUV420采樣
YUV420P YV12 YU12

YUV420SP

(semi-Planar二維平面)

NV12 NV21

YUV 420P 和 YUV 420SP 都是基于 Planar 平面模式 進行存儲的,先存儲所有的 Y 分量後, YUV420P 類型就會先存儲所有的 U 分量或者 V 分量,而 YUV420SP 則是按照 UV 或者 VU 的交替順序進行存儲了,具體檢視看下圖:

YUV420P

音視訊基礎知識---像素格式YUV

YUV420SP

音視訊基礎知識---像素格式YUV

YV12

YV12,采用的是平面格式進行存儲,先存 Y 分量,再存 V 分量,最後U分量

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 
V0 
U0
           

YU12

YU12,采用的是平面格式進行存儲,先存 Y 分量,再存 U分量,最後V分量

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 
U0 
V0
           

NV12 (ios常用)

NV12,采用的是平面格式進行存儲,再 UV 進行交替存儲

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 
U0 V0
           

NV21(android常用)

NV21,采用的是平面格式進行存儲,再 VU 進行交替存儲

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 
V0 U0