详解YUV格式及内存占用(YUV444/YUV420/YUV411/YUV420)

相对于Y来说,人眼对UV不大敏感,因此,可以在图像存储时降低UV分量的分辨率(采样率),以节省存储空间,而这种降采样后的图像看起来与原图像没有多大差别。YUV的像素存储格式一般采用“A:B:C”表示法,根据采样和降采样的程度不同,以及像素排列格式的不同,有很多不同的表示。为了便于理解,下面以352×288和2×2的图像大小为例,分别详细介绍各采样格式的区别。其中,2×2图像的4个像素编号如图1所示。

4像素图像示意图
1. YUV444格式


YUV444表示4:4:4的YUV取样,水平每4像素中YUV各取4个,即每像素中YUV各取1个。所以每1×1像素Y占1字节,U占1字节,V占1字节,YUV444格式下平均每像素占(1+1+1)× 8bit/1pix = 24bpp(bpp为Bit Per Pixel,即每像素位数),即3字节。那么352×288分辨率的一帧图像占用的存储空间为352×288×24/8 = 304 128 (字节)。这种格式实际上是一种全采样格式,它与RGB格式的图像占用相同的存储空间。YUV444格式的图像可以有两种存储格式:按像素存储和按平面存储。以2×2的图像为例,像素存储格式为Y₁U₁V₁ Y₂U₂V₂ Y₃U₃V₃ Y₄U₄V₄,平面存储格式Y₁Y₂Y₃Y₄ U₁U₂U₃U₄ V₁V₂V₃V₄。

2. YUV422格式

YUV422表示4:2:2的YUV取样,也可理解为水平每4像素(即4×1的4像素)中Y取样4个,U取样2个,V取样2个,所以每4×1像素Y占4字节,U占2字节,V占2字节,YUV422格式下平均每像素占(4+2+2)×8bit/4pix = 16bpp。那么352×288分辨率的一帧图像占用的存储空间为352×288× 16/8 = 202 752 (字节)。

也可以这样理解,YUV422表示4:2:2的YUV取样,水平每2像素(即2×1的2像素)中Y取样2个,U取样1个,V取样1个,所以每2×1像素Y占2字节,U占1字节,V占1字节,YUV422格式下平均每像素占(2+1+1)×8bit/2pix = 16bpp。那么352×288分辨率的一帧图像占用的存储空间为352×288× 16/8 = 202 752 (字节)。

该格式对应的FourCC代码有YUYV、YVYU、UYVY、VYUY等,表示U、V的不同取样点和YUV分量的不同排列顺序。其中YUYV与YUY2的实际存储格式相同,对于2×2的图像,像素存储格式为Y1U1Y2V2Y3U3Y4V4。可以看到,与YUV444的图像格式相比,由于省略了V1、U2、V3、U4,从而节省了4字节的存储空间。在实际显示时,缺少的U和V使用相邻像素的U和V补充回来即可,反正人眼也看不出多大差别。

3. YUV411格式


YUV411表示4:1:1的YUV取样,水平每4像素(即4×1的4像素)中Y取样4个,U取样1个,V取样1个,所以每4×1像素Y占4字节,U占1字节,V占1字节,YUV411格式下平均每像素占(4+1+1)×8bit/4pix = 12bpp。那么 352×288 分辨率的一帧图像占用的存储空间为352×288× 12/8 = 152 064 (字节)。对应的FourCC代码为Y411,像素存储格式在此略过。


4. YUV420格式


YUV420表示4:2:0的YUV取样,水平每2像素与垂直每2像素(即2×2的2像素)中Y取样4个,U取样1个,V取样1个,所以每2×2像素Y占4字节,U占1字节,V占1字节,YUV420格式下平均每像素占(4+1+1) × 8bit/4pix = 12bpp。那么 352×288 分辨率的一帧图像占用的存储空间为352×288×12/8 = 152 064 (字节),相比YUV444格式正好节约一半的空间。

以上是标准的解释,但似乎还是无法解释4:2:0中“0”的含义。确实,这个表示法就是比较令人费解。其实可以换一种方法理解:对于水平每4像素,Y取4个,U取2个,V取0个,这便是4:2:0的含义。但是,这个解释并不完整。在下一行取样时,应该是Y取4个,U取0个, V取2个,即4:0:2。所以说,这里的4:2:0其实是代表了4:2:0和4:0:2两种情况,它们在奇偶行交错出现。

这种图像格式又称为YUVI420,其实就是把邻近的4像素(2×2,即当前像素、右、下、右下)都用同一个U和V,而原先的Y不变。正是基于这个原因,一般的编码器都要求原始图像的宽和高是偶数。除此之外,编码器一般会将图像划分成 2×2、4×4、8×8、16×16 等块进行各种预测和比较。常见的H.264、H.265、VP8、AV1等都是以它为基础进行编解码的。

参考书籍:

《深入理解FFmpeg》 (刘歧;赵军;杜金房;赵文杰;宋韶颍) 

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值