版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/coloriy/article/details/6668447
MPEG 儲存的 YU(Cb)V(Cr) 格式是遵循 CCIR601,也就是 ITU-R BT.601 的規范,Y 亮度的范圍是 16~235,UV(CbCr) 色度是以無色 =128 為中心,范圍是 16~240。
一般民生消費產品使用的 MPEG 壓縮,大都采用 YUV 4:2:0 的格式,也就是如果分辦率是 720x576,則每個 Frame,Y 有 720x576 個點,U 只有 360x288 個點,V 也只有 360x288 個點。色度的信息只有亮度的 1/4。那么為什么不寫 YUV 4:1:1(UV 和 Y 的比例是 1:4) 而要寫 YUV 4:2:0?這是因為要區分取樣的方式不同。YUV 4:1:1 是指水平 Y 取樣四個點,UV 各只取樣一個點,水平的 Y 和 UV 的取樣比例是 4:1,也就是
Y Y Y Y 一個 U 一個 V ....
YUV 4:2:0 是指水平和垂直 Y 各取樣兩個點,UV 各只取樣一個點,水平的取樣比例是 2:1,重直的取樣比例 2:1,也就是
Y Y
Y Y 一個 U 一個 V ....
和 YUV 4:1:1 一樣,色度和亮度差 1/2 * 1/2 = 1/4,只是取樣的方式不同。
而 MPEG 最常采用的 YUV 4:2:0 格式,其 UV 的取樣位置,MPEG-1 和 MPEG-2 又不同(MPEG-4 是用和 MPEG-2 一樣的取樣位置)
MPEG-1
Y Y
_x
Y Y
x 是 UV 的取樣位置
MPEG-2
Y Y
x
Y Y
x 是 UV 的取樣位置
一般民生消費產品使用的 MPEG 壓縮,大都采用 YUV 4:2:0 的格式,也就是如果分辦率是 720x576,則每個 Frame,Y 有 720x576 個點,U 只有 360x288 個點,V 也只有 360x288 個點。色度的信息只有亮度的 1/4。那么為什么不寫 YUV 4:1:1(UV 和 Y 的比例是 1:4) 而要寫 YUV 4:2:0?這是因為要區分取樣的方式不同。YUV 4:1:1 是指水平 Y 取樣四個點,UV 各只取樣一個點,水平的 Y 和 UV 的取樣比例是 4:1,也就是
Y Y Y Y 一個 U 一個 V ....
YUV 4:2:0 是指水平和垂直 Y 各取樣兩個點,UV 各只取樣一個點,水平的取樣比例是 2:1,重直的取樣比例 2:1,也就是
Y Y
Y Y 一個 U 一個 V ....
和 YUV 4:1:1 一樣,色度和亮度差 1/2 * 1/2 = 1/4,只是取樣的方式不同。
而 MPEG 最常采用的 YUV 4:2:0 格式,其 UV 的取樣位置,MPEG-1 和 MPEG-2 又不同(MPEG-4 是用和 MPEG-2 一樣的取樣位置)
MPEG-1
Y Y
_x
Y Y
x 是 UV 的取樣位置
MPEG-2
Y Y
x
Y Y
x 是 UV 的取樣位置
通常我們用RGB表示一種彩色。計算機系統里的LCD顯示的數據就是RGB來表示每個像素的顏色。
而在我們生活里,有黑白電視機與彩色電視機兩種,拍攝節目源時不可以用兩種不同的攝像機來存放兩種圖像數據。
所以為了兼容兩種電視機,專家就引入YUV格式代替RGB,其中Y表示亮度, U和V表示色差。 黑白電視機只用Y信號, 而彩色電視機可由YUV轉換成RGB再顯示顏色。
通常我們所用的YUV格式是 ITU-R 的標准 , 也叫YCbCr.
YUV是由RGB格式的數據轉換得來。
Y Y = 0.299 x R + 0.587 x G + 0.114 x B + 0 U Cb = -0.169 x R - 0.331 x G + 0.499 x B + 128 V Cr = 0.499 x R - 0.418 x G - 0.0813 x B + 128 Y Y = 0.299 x R + 0.587 x G + 0.114 x B + 0 U Cb = -0.169 x R - 0.331 x G + 0.499 x B + 128 V Cr = 0.499 x R - 0.418 x G - 0.0813 x B + 128
///////
YUV4:4:4
其實就是YUV的數據各占用8位, 每個像素都由YUV組成
同一行的相鄰4個像素數據: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3
存儲時: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3 //即每個像素YUV的數據都會存放起來 為什么叫4:4:4 , 意思就是4個像素里的數據有4個Y, 4個U, 4個V
//////
YUV4:2:2
其實絕大部分相鄰的兩個像素,數據差異應不大。所以為了節點空間便於存儲,丟失每個像素的部分數據。
專家研究表明我們人對亮度比較敏感,而對色彩不怎么敏感。所以每個像素的亮度Y數據是絕對不動的,而色差數據可以進行丟棄。
同一行的相鄰4個像素數據: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3
存儲時: Y0 U0 Y1 V1 Y2 U2 Y3 V3 // 每兩個相鄰的像素, 一個丟棄V數據,一個丟棄U數據 為什么叫4:2:2, 意思就是相鄰的4個像素里有4個Y, 2個U, 2個V。 按上面存儲的順序也叫YUYV. 但還原成RGB數據必須需要YUV, 像第一個像素只有Y0U0是沒法還原的,這時只能用下一像素的V1數據。 還原時的YUV: [Y0U0V1] [Y1U0V1] [Y2U2V3] [Y3U2V3] //這樣還原理論上會對圖像的質量有影響的,但我們看不出來的.
/////
YUV4:2:0
專家們進一步研究表示,每一行的相鄰兩個像素與下一行同位置的兩個像素數據差異不大,可以進一步的丟數據。
如兩行的像素數據:
Y00U00V00 Y01U01V01 Y02U02V02 Y03U03V03 ....
Y88U88V88 Y89U89V89 Y90U90V90 Y91U91V91 ....
存儲時: Y00U00 Y01 Y02U02 Y03 //每個像素的Y數據保留, 兩個像素數據只保留一個U數據。這一行不保留V數據(YUV: 420)
Y88V88 Y89 Y90V90 Y91 // .... 兩個像素數據只保留一個V數據, 這行不保留U數據(YUV: 402) 還原時只能相同位置的上下兩行4個像素結合還原: Y00U00V88 Y01U00V88 Y02U02V90 Y03U02V90 Y88U00V88 Y89U00V88 Y90U02V90 Y91U02V90
yuv數據還分成打包的,平面的。 打包的意思是: yuv數據是順序存放Y,接着U,再接着V數據存放。 平面的意思是: yuv數據是分成三個地方存放, 一個地方只存Y數據, 一個只存U數據, 一個只存V數據