YUV编码格式解析

YUV 颜色编码

YUV 最早主要是用于电视系统与模拟视频领域。现在视频领域基本都是使用 YUV 颜色空间。跟 RGB 图像中 R、G、B 三个通道都跟色彩信息相关这种特点不同,YUV 图像将亮度信息 Y 与色彩信息 U、V 分离开来。Y 表示亮度,是图像的总体轮廓,称之为 Y 分量。U、V 表示色度,主要描绘图像的色彩等信息,分别称为 U 分量和 V 分量。这样一张图像如果没有了色度信息 U、V,只剩下亮度 Y,则依旧是一张图像,只不过是一张黑白图像。这种特点有什么好处呢?在以前,世界上只有黑白电视机,每一帧电视画面都是黑白的,没有色彩信息。当然黑白电视机也不支持显示彩色图像。后来随着技术的发展,出现了彩色电视机,每一帧画面都是有颜色信息的,那当然我们可以使用 RGB、YUV 等颜色空间来表示一帧图像。但是考虑到兼容老的黑白电视机,如果使用 RGB 表示图像,那么黑白电视机就没办法播放。这是因为 R、G、B 三个通道都是彩色的,而 Y、U、V 就可以。因为黑白电视机可以使用 Y 分量,Y 分量就是黑白图像,而且包含了图像的总体轮廓信息,只是没有色彩信息而已。

YUV 颜色编码采用的是 明亮度 和 色度 来指定像素的颜色。

其中,Y 表示明亮度(Luminance、Luma),而 U 和 V 表示色度(Chrominance、Chroma)。

而色度又定义了颜色的两个方面:色调和饱和度。
在这里插入图片描述

在这里插入图片描述
和 RGB 表示图像类似,每个像素点都包含 Y、U、V 分量。但是它的 Y 和 UV 分量是可以分离的,如果没有 UV 分量一样可以显示完整的图像,只不过是黑白的。

UV通道可以具有比亮度通道更低的采样率,而不会导致感知质量显著下降。或者说,对于 YUV 图像来说,并不是每个像素点都需要包含了 Y、U、V 三个分量,根据不同的采样格式,可以每个 Y 分量都对应自己的 UV 分量,也可以几个 Y 分量共用 UV 分量。一种称为“A:B:C”的符号用于描述U和V相对于Y的采样频率。本文中描述的格式都使用每个像素8位来编码Y通道(也称为亮度通道),并使用每个样本8位来对每个U或V色度样本进行编码。
4:4:4 :意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是 8 bit。

同一行的相邻4个像素数据: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3
存储时: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3 //即每个像素YUV的数据都会存放起来

4:2:2 2:1水平降采样, 意味着 UV 分量是 Y 分量采样的一半,Y 分量和 UV 分量按照 2 : 1 的比例采样。如果水平方向有 8 个像素点,那么采样了 8 个 Y 分量,而U和V各采4个。

同一行的相邻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.

4:2:0 2:1水平降采样和2:1垂直降采样。是指,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2 : 1 的方式采样。比如,第一行扫描时,YU 按照 2 : 1 的方式采样,那么第二行扫描时,YV 分量按照 2:1 的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1 。

举个例子 :假设图像像素为:
[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
其中,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。

4:1:1 表示4:1的水平下采样,没有垂直下采样。对于每个U和V样本,每条扫描线包含四个Y样本。

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,只是取样的方式不同。

下图显示了如何对每个下采样率的色度进行采样。亮度样本(Y)用十字表示,色度样本(UV)用圆圈表示。
在这里插入图片描述

YUV 存储格式

YUV 4:4:4 这种类型非常简单,所以存储的方式也非常简单。那 YUV 4:2:2 和 YUV 4:2:0 这种共用 U、V 分量的情况,应该在内存中怎么存储呢?
YUV 存储方式主要分为两大类:Planar 和 Packed 两种。
Planar 格式的 YUV 是先连续存储所有像素点的 Y,然后接着存储所有像素点的 U,之后再存储所有像素点的 V,也可以是先连续存储所有像素点的 Y,然后接着存储所有像素点的 V,之后再存储所有像素点的 U。
Packed 格式的 YUV 是先存储完所有像素的 Y,然后 U、V 连续的交错存储。
YUV 4:4:4
这种类型的 YUV 非常简单,因为每一个 Y 对应一个 U、一个 V,所以存储的方式也非常简单。例如,4 x 2 像素的 YUV 4:4:4 存储图如下图所示:

在这里插入图片描述
YUV 4:2:2
这种类型的 YUV 稍微复杂些,每左右两个像素的 Y 共用一个 U 和一个 V。存储方式主要有以下4种类型。

  • YU16(或者称为 I422、YUV422P)

该类型是 Planar 格式,先存储完 Y,再存储 U,之后存储 V。例如,4 x 2 像素的 YU16 存储图如下图所示:
在这里插入图片描述

  • YV16(YUV422P)

  • 该类型也是 Planar 格式,先存储完 Y,再存储 V,之后存储 U。例如,4 x 2 像素的 YV16 存储图如下图所示:

  • 在这里插入图片描述

  • NV16(YUV422SP)

  • 这种类型是 Packed 格式,先存储完 Y,之后 U、V 连续交错存储。例如,4 x 2 像素的 NV16 存储图如下图所示:

  • 在这里插入图片描述

    • NV61(YUV422SP)
  • 这种也是 Packed 格式,与 NV16 不同,这种格式是先存储完 Y,之后 V、U 连续交错存储。例如,4 x 2 像素的 NV61 存储图如下图所示:

  • 在这里插入图片描述

YUV 4:2:0

这是最常见也是最常用的 YUV 类型。通常视频压缩都是 YUV 4:2:0 格式的。它是每上、下、左、右 4 个像素点共用一个 U 和一个 V。存储方式主要分为4种:YU12(I420、YUV420P),YV12(YUV420P, NV12(YUV420SP),NV21(YUV420SP)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
存储类型汇总如下:
在这里插入图片描述

(图片来自极客时间)

详见:YUV 存储格式
参考:yuv

小结

总结一下 YUV 图像有主要有3种类型,其分类如下:

  1. YUV 4:4:4,一个 Y 对应一个 U 和一个 V;
  2. YUV 4:2:2,左右两个 Y 对应一个 U 和一个 V;
  3. YUV 4:2:0,上下左右四个 Y 对应一个 U 和一个 V。

同时,YUV 在存储的时候也有两种大类:一种是 Planar 格式;一种是 Packed 格式。其中 Planar 格式又分为先存 U 还是先存 V 两种。而 Packed 格式是 UV 交错存储且分为 U 在前还是 V 在前两种。
这个排布方式比较多,不容易记住。其实可以不用记住的。要记住这几类有什么区别就可以了。用到的时候再查查笔记就可以了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值