关于 YUV 视频
数字视频通常采用 YUV 格式进行编码。 本文介绍 YUV 视频的一般概念以及一些术语,而无需深入探讨 YUV 视频处理的数学。
如果已使用计算机图形,则可能熟悉 RGB 颜色。 RGB 颜色使用三个值进行编码:红色、绿色和蓝色。 这些值直接对应于可见光谱的部分。 这三个 RGB 值构成数学坐标系,称为 颜色空间。 红色分量定义此坐标系的一个轴,蓝色定义第二个轴,绿色定义第三个轴,如下图所示。 任何有效的 RGB 颜色都位于此颜色空间中的某个位置。 例如,纯洋红为 100% 蓝色、100% 红色和 0% 绿色。
尽管 RGB 是表示颜色的常见方法,但其他坐标系是可能的。 YUV 术语是指一系列颜色空间,所有这些空间都独立于颜色信息对亮度信息进行编码。 与 RGB 一样,YUV 使用三个值来表示任何颜色。 这些值称为 Y'、U 和 V. (事实上,这种术语“YUV”在技术上不准确。在计算机视频中,YUV 一词几乎总是引用一个名为 Y'CbCr 的特定颜色空间,稍后会讨论。但是,YUV 通常用作与 Y'CbCr.) 相同的原则的任何颜色空间的一般术语
Y 的组件(也称为 luma)表示颜色的亮度值。 (') 的主要符号用于区分 luma 与紧密相关的值, 亮度,该值指定为 Y。亮度派生自 线性 RGB 值,而 luma 派生自 非线性 (伽玛更正) RGB 值。 亮度是真实亮度的更接近度量值,但由于技术原因,luma 更实用。 主要符号经常省略,但 YUV 颜色空间始终使用 luma,而不是亮度。
Luma 通过采用红色、绿色和蓝色分量的加权平均值来派生自 RGB 颜色。 对于标准定义电视,使用以下公式:
Y' = 0.299R + 0.587G + 0.114B
此公式反映了人类眼睛对某些光波比其他人更敏感的事实,这会影响颜色的感知亮度。 蓝色浅色显示为最暗,绿色显示最亮,红色位于两者之间。 此公式还反映了早期电视中使用的磷的物理特征。 考虑到现代电视技术,较新的公式用于高清电视:
Y' = 0.2125R + 0.7154G + 0.0721B
标准定义电视的 luma 公式在名为ITU-R BT.601的规范中定义。 对于高清电视,相关规范是ITU-R BT.709。
你和 V 组件(也称为 色度 值或 颜色差异 值)通过从原始 RGB 颜色的红色和蓝色分量中减去 Y 值来派生:
U = B - Y'
V = R - Y'
这些值包含足够的信息来恢复原始 RGB 值。
YUV 的优点
模拟电视部分出于历史原因使用 YUV。 模拟彩色电视信号旨在向后兼容黑白电视。 彩色电视信号 (你和 V) 叠加到 luma 信号上,携带色度信息。 黑白电视忽略色度,并将组合信号显示为灰度图像。 (信号的设计使色度不会显著干扰 luma signal。) 彩色电视可以提取色度并将信号转换回 RGB。
YUV 有另一个优势, 今天更相关。 与亮度变化相比,人眼对色调的变化不太敏感。 因此,图像的色度信息可能比 luma 信息少,而不会牺牲图像的感知质量。 例如,在 luma 样本的水平分辨率的一半处对色度值采样很常见。 换句话说,对于每两个像素的 luma 样本,有一个 U 样本和一个 V 样本。 假设 8 位用于对每个值进行编码,则每两个像素总共需要 4 个字节, (两个 Y'、一个 U 和一个 V) ,平均每像素 16 位,比等效的 24 位 RGB 编码少 30%。
YUV 本质上并不比 RGB 更紧凑。 除非色度被向下采样,否则 YUV 像素的大小与 RGB 像素相同。 此外,从 RGB 转换为 YUV 并不丢失。 如果没有向下采样,则可以将 YUV 像素转换为 RGB,且不会丢失信息。 向下采样使 YUV 图像更小,也丢失了一些颜色信息。 但是,如果正确执行,则损失并不明显。
计算机视频中的 YUV
前面为 YUV 列出的公式不是数字视频中使用的确切转换。 数字视频通常使用名为 Y'CbCr 的 YUV 形式。 从本质上讲,Y'CbCr 的工作原理是将 YUV 组件缩放到以下范围:
组件 | 范围 |
---|---|
Y' | 16–235 |
Cb/Cr | 16–240,128 表示零 |
这些范围假定 Y'CbCr 组件的精度为 8 位。 下面是使用 LUma 的 BT.601 定义的 Y'CbCr 的确切派生:
"开始"菜单范围 [0...1] 中的 RGB 值。 换句话说,纯黑色是 0,纯白色是 1。 重要的是,这些是) RGB 值更正的非线性 (伽马值。
计算 luma。 对于 BT.601,Y' = 0.299R + 0.587G + 0.114B,如前所述。
(B - Y') 和 (R - Y') 计算中间色差值。 对于 (B - Y') ,这些值的范围为 +/- 0.886,对于 (R - Y') ,这些值为 +/- 0.701。
按如下所示缩放色差值:
Pb = (0.5 / (1 - 0.114) ) × (B - Y')
Pr = (0.5 / (1 - 0.299) ) × (R - Y')
这些缩放因子旨在为两个值提供相同的数值范围 +/- 0.5。 它们共同定义名为 Y'PbPr 的 YUV 颜色空间。 此颜色空间用于模拟组件视频。
缩放 Y'PbPr 值以获取最终的 Y'CbCr 值:
Y' = 16 + 219 × Y'
Cb = 128 + 224 × Pb
Cr = 128 + 224 × Pr
这些最后一个缩放因子生成上一个表中列出的值范围。 当然,无需存储中间结果,即可将 RGB 直接转换为 Y'CbCr。 此处分别列出了这些步骤,以显示 Y'CbCr 如何派生自本文开头给出的原始 YUV 公式。
下表显示了各种颜色的 RGB 和 YCbCr 值,再次使用 LUma 的 BT.601 定义。
Color | R | G | B | Y' | Cb | Cr |
---|---|---|---|---|---|---|
黑色 | 0 | 0 | 0 | 16 | 128 | 128 |
Red | 255 | 0 | 0 | 81 | 90 | 240 |
绿色 | 0 | 255 | 0 | 145 | 54 | 34 |
蓝色 | 0 | 0 | 255 | 41 | 240 | 110 |
青色 | 0 | 255 | 255 | 170 | 166 | 16 |
洋红色 | 255 | 0 | 255 | 106 | 202 | 222 |
Yellow | 255 | 255 | 0 | 210 | 16 | 146 |
White | 255 | 255 | 255 | 235 | 128 | 128 |
如下表所示,Cb 和 Cr 不对应于有关颜色的直观想法。 例如,纯白色和纯黑色都包含中性级别 Cb 和 Cr (128) 。 Cb 的最高值和最低值分别为蓝色和黄色。 对于 Cr,最高值和最低值为红色和青色。
有关详细信息
- 视频渲染推荐的 8 位 YUV 格式
- 基思·杰克 视频揭秘,第五版。 纽恩斯,2007年。
- 查尔斯·庞顿 数字视频的技术简介。 威利,1996年。
相关主题