2.6.3 YUV 体系色彩格式
Last updated
Last updated
传输格式(Transport Format),即当下我们常用的 YUV 色彩格式也被称为 YCbCr、YPbPr、Y′UV 色彩格式。其中,Y/Y′ 指代光亮度分量,U/Cb/Pb 指代蓝色色度分量,V/Cr/Pr 指代红色色度分量。YUV 色彩格式受启发自,CIE LUV 中用与 xyY 色度图有线性转换关系的 uv 分量表示平面色彩信息的思想,最初被 国际电信联盟无线电通信部门(ITU-R [International Telecommunication Union Radiocommunication Sector]) 做为 彩色图像编解码流水线(Color Image Pipeline) 的一部分提出,用来 对图片进行压缩传输。
在之前的讨论中我们知道,CIE LUV 在指定白点情况下,可以直接将其所含色彩经由线性变换转换到 CIE XYZ 色彩空间,再从 CIE XYZ 依托固定转换矩阵,变换到 CIE RGB 色彩空间。将两个过程进行合并可知,存在从 LUV 到 RGB 的固定转换矩阵。因此,做为 CIE LUV 思路衍生下的实践产物,YUV 同样也具有这一特点。不同于 LUV 设备无关,YUV 是设备相关的。其受限于外部因素,对整体色度平面的处理上有一定程度的调整,使 YUV 根据采用规格的不同,有着不同的设备相关化调参。不过设备相关化处理带来的弊端,就是 YUV 相较于 LUV 来说色差变换更为不均匀。
当前 YUV 的常用规格 有三种:BT.601、BT.709、BT.2020。其中,BT.601 最早于 1982 年提出,最新一次修订于 2011年,适用于 标准画质电视(SDTV [Standard Definition Television]) [46] 。BT.709 最早于 1990 年提出,最新一次修订于 2015年,适用于 高清画质电视(HDTV [High Definition Television]) [47] 。BT.2020 最早于 2012 年提出,最新一次修订于 2015年,适用于 超高清画质电视(UHDTV [Ultra-High Definition Television]) [48] 。
YUV 是目前唯一做到了工程意义上打通图像数据压缩、传输和存储的色彩格式。为了便于说明,我们这里假设 Y、U、V 通道皆以当下主流的 8-bit 形式存放数据。
YUV 被设计的目的主要就是为了进行数据传输,而数据传输就意味着数模信号转换。所以,根据可用电信号区间,YUV 存在两种有效范围:狭隘区间(Narrow Range)、完整区间(Full Range)。
狭隘区间 中,Y通道取值范围为 ,U、V通道取值范围为 ;
完整区间 中,Y、U、V通道取值范围均为 ;
大多数应用场景下,YUV 都以狭隘范围表示,究其原因是由电讯号传输特性决定的。在广播电视系统中,为了防止过高和过低的信号造成 临界电平过载(Critical Level Overload) 现象,会人为的在信号可用模拟电平区段上,预留出一定的 “保护带”,保护最高位和最低位的电平不被使用。为了便于指代,电气学上把“保护带”称为 保护范围(Protection Range),被保护的最高位和最低位电平称为 保护电平(Protection Level),用于指代零信号量的电平被称为 消隐电平(Blanking Level),可用电平区段的上边界称为 白电平(White Level),下边界称为 黑电平(Black Level),黑白电平之间就是 信号电平(Signal Level) 了。
对于 8-bit 传输信号来说,保护电平为 和 。Y通道取 为消隐电平,可用电平区间上下分别预留了 和 的保护范围;U、V 通道则以 为消隐电平,可用电平区间上下分别预留了 和 的保护电平。所有可用的信号电平,分别组成了 Y、U、V 三通道取值范围的狭隘区间。
解释清楚信号范围划分,接下来就该说明 ITU 对于 YUV 色彩格式下的 RGB YUV 颜色互转的定义了。在 YUV 和 RGB 的转换上,狭隘范围(Narrow)和完整范围(Full)并不影响推算,仅影响最终的转换矩阵结果。
从工程角度出发,YUV 需要尽可能简单的处理过程。所以,YUV 在采用 LUV 转换思路的基础上结合了 HSL 的坐标处理思想,以 XYZ 坐标系下 xyY 色度图所在平面,截取色域三角形有效范围构建质心坐标的形式,进行了 YUV 色彩格式的格式空间关键要素定义。
不同于 LUV 和 HSL,YUV 并没有对完整的可见光色域进行拓扑变换,而是需要 手动设定 RGB 三原色的代表点和质心,来确定围成的色域范围和坐标系。因此,YUV 的色彩空间天然就是有缺陷的。不过,放弃完整色域换来了 YUV 足够通用的方法论。后续规格上的更新,只用按照工程测定结果来进行色域范围的调整,就能延续同一套计算过程满足新的需求。 这种可根据情况修整的延展性,也是 YUV 被广泛运用的原因之一。
那么,在 YUV 中 RGB 三原色的选取是否就是完全随意的呢? 答案是否定的。
RGB 三原色代表点的选取,完全依赖于设备本身对三原色的设定。即,设备的 RGB 色彩格式的格式空间决定了设备的三原色。由于不同的设备间差异可能非常大,想要使 YUV 格式通用,就必须在 YUV 体系的色彩格式规格制定时,固定做为标准的 RGB 三色坐标,通过自身格式空间的线性特征,来抹平不同设备间的转换误差。
这一点保证了不论何种设备,设备间经过 YUV 色彩格式传递的 RGB 数据,在转换前后都有一致的值,维护了数据的准确性。
其他规格下的计算方式也是一样,并无差异。这里列出 常用的主流规格带入公式后的结果,方便工程参考:
关于 YUV 色彩格式的格式空间部分,到这里就说明完毕。接下来我们来看组成 YUV 色彩格式的数据存储部分。
目前主流的 YUV 色彩格式的 存储格式族(Data Format Family) 主要有三种,分别是 YUV420、YUV422、YUV444。
YUV420 族 下的存储格式,以 4个Y通道分量共用一组UV分量构成(YYYY U V);
YUV422 族 下的存储格式,以 2个Y通道分量共用一组UV分量构成(YY U V);
YUV444 族 下的存储格式,三通道分量一一对应(Y U V);
而每一种 YUV 存储格式族,根据 Y通道、U通道、V通道的数据排布,又可以分为:平面(Planar)、半平面(Semi-Planar)、夹层(Interleaved)、打包(Packed) 四种存储的 数据分组类型。
平面(Planar) 类型,Y、U、V 数据独立存放;
半平面(Semi-Planar) 类型,Y通道数据独立存放,UV通道数据交替打包存放;
夹层(Interleaved) 类型,三通道数据以两个Y与一组UV为数据组,封包排列存放;
打包(Packed) 类型,三通道数据以一组YUV为数据组,封包排列存放;
因此,整个 YUV 的存储格式从属关系如下图所示:
这些 YUV 存储格式最大的特点在于数据组成上。我们用相同颜色表示位于同一组的 YUV 数据。 假设存在一张包含 36 个像素点的 6x6 的图片(为了避免颜色重复,YUV444 用 12个像素点的 6x2 图片)。 以 Y、U、V 分别代表对应通道的有效数据,所有存储格式数据排布 《YUV 存储格式(Data Format)对比说明表》 如下:
显然,从数据的压缩程度上来说,YUV420 族明显具有较高的压缩比。但由于YUV 格式并不是完全无损的,与之相对的问题就是高压缩比导致的图片细节损失。不过图片的细部信息大都存在于灰度图上,而这部分信息主要由 Y 通道保存,因此人眼难以察觉丢失的颜色细节。相比较高压缩比带来的优势,这部分损失可以忽略不计。所以,在音视频数据传输及图像存储中,工程上常常采用 YUV420 族下的色彩格式进行保存。
至此,有关音视频工程中的图片色彩处理部分,基本讲解完毕。下一章我们将利用目前已掌握的音视频知识,来做针对一段音频和一张图片基本分析的工程实践。
对于不需要进行数据传输的场景,就不再需要保护电平了。 此时 8-bit 信号电平可以取用到 的完整范围表示。
我们假设 YUV 格式空间中,用于参照的 R点取自 xyY 色度图中坐标 ,G点取自 xyY 色度图中坐标 ,B点取自 xyY 色度图中坐标 。有下图:
根据图示可知,落于 RGB 围成三角形范围内的任意点 ,与三角形顶点存在关系:
取质心 为 轴心。指定 YUV 色彩空间下 ,选择 、 为坐标轴, 、 为归一化因子。有 有效区间为 , 有效区间为 , 有效区间为 。
这里以 YUV 对应规格选定的 RGB 三色电信号,经过 电位差伽马预矫正(Gamma pre-corrected) 得到的归一化电平测量值 为依据 [46] [47] [48] ,取 YUV 光亮度参数有线性公式 。则由点 与质心 的向量差 推得:
上式即为 YUV 格式空间的狭义配色函数。需要注意的是,测量值 是规格强相关的。其取值仅取决于规格中指定的 RGB 三色对应电信号电配比。
根据 RGB 与 YUV 归一化后 的数理特征,很容易就能证明 YUV 和 RGB 的线性等价关系:
线性的变化关系对 YUV 相当重要,这意味着上式可直接以转换矩阵 表示,有:
现在,理论基础得到了佐证。在此条件下,如果已经测得关键参数值,怎样计算转换矩阵 呢?
以 BT.601 的狭隘区间(Narrow Range) 为例。规格中取 D65 作为白点和质心 ,测得 为 。经过值域范围平移后,带入狭义配色函数计算,有:
换算一下就能得到 的表达式:
可见,转换矩阵 的计算结果,只依赖于规格条件所指定的 测定值和 YUV 的取值范围。