【視訊處理】YUV格式說明

一點心青發表於2014-05-07

YUV,是一種顏色編碼方法,Y表示明亮度(Luminance、Luma),U和V則是色度、濃度(Chrominance、Chroma)。

YUV,Y`UV,YCbCr,YPbPr等都可以稱為YUV,彼此有重疊。

YUV和Y`UV通常用來描述模擬訊號YCbCr與YPbPr則是用來描述數位的影像訊號

YUV顏色編碼方法相比於RGB的優勢體現在兩個方面:

將亮度資訊與色彩資訊分離,沒有色彩資訊可以顯示完整的影象,很好地解決了彩色電視機與黑白電視的相容問題;

YUV不像RGB要求三個獨立的視訊訊號同時傳輸,用YUV方式傳送佔用極少的頻寬。

YUV儲存格式,主要描述畫素的Y、U、V分量排列方式,分為兩種格式:緊縮格式和平面格式。

緊縮格式(packed formats):將Y、U、V值儲存成Macro Pixels陣列,和RGB的存放方式類似。

平面格式(planar formats):將Y、U、V的三個分量分別存放在不同的矩陣中。

YUV取樣方式,主要描述畫素Y、U、V分量取樣比例,即表達每個畫素時,Y、U、V分量的數目,通常有三種方式:YUV4:4:4,YUV4:2:2,YUV4:2:0。

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

YUV4:4:4取樣,每一個Y對應一組UV分量;YUV4:2:2取樣,每兩個Y共用一組UV分量;YUV4:2:0取樣,每四個Y共用一組UV分量。

 

常見YUV格式說明:YV12、IYUV、I420、NV12、NV21 取樣方式都是4:2:0,其儲存格式都是平面格式,下面簡要說明以上常見格式的記憶體佈局。

YV12

  所有 Y 樣例都會作為不帶正負號的char值組成的陣列首先顯示在記憶體中。此陣列後面緊接著所有 V (Cr) 樣例。V 平面的跨距為 Y 平面跨距的一半,V 平面包含的行為 Y 平面包含行的一半。V 平面後面緊接著所有 U (Cb) 樣例,它的跨距和行數與 V 平面相同。

 

IYUV和I420

   IYUV、I420和YV12的記憶體佈局格式是一樣的,只是U、V分量的順序是相反的,IYUV和I420格式中,U分量緊跟Y分量後,V分量緊跟U分量後,如圖所示。

 

NV12

  所有 Y 樣例都會作為由不帶正負號的char值組成的陣列首先顯示在記憶體中,並且行數為偶數。Y 平面後面緊接著一個由不帶正負號的char值組成的陣列,其中包含了打包的 U (Cb) 和 V (Cr) 樣例,如圖 所示。當組合的 U-V 陣列被視為一個由 little-endian WORD值組成的陣列時,LSB 包含 U 值,MSB 包含 V 值。NV12 是用於 DirectX VA 的首選 4:2:0 畫素格式。預期它會成為支援 4:2:0 視訊的 DirectX VA 加速器的中期要求。

 

NV21

  NV21和NV12的記憶體佈局是一樣的,只是U、V分量交錯儲存的順序是相反的,NV21格式中,是以V-U的交錯方式儲存,如圖所示。

 

參考資料:

http://www.fourcc.org/yuv.php

http://wenzongliang.iteye.com/blog/1902608

 

相關文章