YUV
YUV,是一种颜色编码方法。“Y” 表示明亮度(Luminance、Luma),“U” 和 “V” 则是色度、浓度(Chrominance、Chroma)。Y’UV、YUV、YCbCr、YPbPr 几个概念其实是一回事儿。由于历史关系,Y’UV、YUV 主要是用在彩色电视中,用于模拟信号,YCbCr 用于数字视频、图像的压缩和传输,如 MPEG、JPEG。Y’UV 设计的初衷是为了使彩色电视能够兼容黑白电视。对于黑白电视信号,没有色度信息也就是(UV),那么在彩色电视显示的时候指显示亮度信息。将一张图片的Y、U、V数据单独显示就会如下图所示:
色度抽样
由于人眼对色度的敏感度不及对亮度的敏感度,图像的色度分量不需要有和亮度分量相同的清晰度,所以许多视频系统在色差通道上进行较低(相对亮度通道)清晰度(例如,抽样频率)的抽样。这样在不明显降低画面质量的同时降低了影像信号的总带宽。因抽样而丢失的色度值用内插值,或者前一色度值来替代。在压缩影像中,以 4:2:2 Y’CbCr作例,它只需R’G’B’(4:4:4)三分之二的带宽,但是在视觉效果上几乎没有影响。
视频系统的抽样系统通常用一个三分比值表示:J : a : b(例如 4:2:2 ),形容一个以 J 个像素宽及两个像素高的概念区域,有时候会以四分比值表示(例如4:2:2:4),依序列出为:
- J :水平抽样引用(概念区域的宽度),通常为4;
- a :在 J 个像素第一行中的色度抽样数目(Cr, Cb);
- b :在 J 个像素第二行中的额外色度抽样数目(Cr, Cb);
- Alpha:水平因数(与首数值有关联)。若没有此部分者可忽略,若存在则与 J 相同。
YUV 采样格式
为节省带宽起见,大多数 YUV 格式平均使用的每像素位数都少于24位。主要的抽样(subsample)格式有 YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1 和 YCbCr 4:4:4。YUV 的表示法称为 A:B:C 表示法:
- 4:4:4 表示完全取样。每一个 Y 对应一组 UV 分量。
- 4:2:2 表示 2:1 的水平取样,垂直完全采样。每两个 Y 共用一组 UV 分量。
- 4:1:1 表示 4:1 的水平取样,垂直完全采样。每四个 Y 共用一组 UV 分量。
- 4:2:0 表示 2:1 的水平取样,垂直 2:1 采样。每四个 Y 共用一组 UV 分量。
YUV 存储格式
YUV 存储分成两种格式:
- 压缩格式(packed formats):将Y、U、V值存储成Macro Pixels数组,和RGB的存放方式类似。每个像素点的 Y、U、V 分量连续交替存储。
- 平面格式(planar formats):将Y、U、V的三个分量分别存放在不同的矩阵中。先连续存储所有像素点的 Y 分量,然后存储 U 分量,最后是 V 分量。
压缩格式
常见的两种压缩格式:YUYV 、UYVY
YUYV/YUY2 (属于 YUV422 )
每个像素点都采样 Y 分量,但是每隔一个像素采样它的 UV 分量,每两个 Y 共用一组 UV 分量。如图 Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U2 V2 分量,依次类推。
UYVY (属于YUV422)
顺序和 YUYV 相反,如图 Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U2 V2 分量,依次类推。
平面格式
常见的四种平面格式:YV12、I420、NV12、NV21
YV12 (属于 YUV420P )
许多软件MPEG编解码器都采用这种格式。它包括一个大小为 N x M的 Y 平面,和大小为(N / 2)x(M / 2)的 V 平面 与 U 平面。
分量顺序为 Y V U。
I420 (属于 YUV420P )
与YV12基本相同,只是分量顺序变成了为 Y U V。所以 这种格式也被称为 YU12 。
NV12、NV21 (属于 YUV420SP )
NV12 是 iOS 中有的格式,它的存储顺序是先存 Y 分量,再 U V 进行交替存储。
NV21 是 安卓 中有的格式,它的存储顺序是先存 Y 分量,再 V U 交替存储。