数字视频概念
本文将探讨一些重要的概念,理解这些概念有助于全面掌握如何在网络上使用视频。
编码颜色
表示图像或视频中的颜色需要为每个像素设置多个值。这些值具体是什么取决于您在将颜色转换为数字形式时如何“拆分”颜色。有多种颜色模型,视频编解码器使用其中一种或多种模型来表示编码过程中的像素,以及解码视频帧后的像素。
RGB
大多数计算机图形模型使用 RGB 颜色系统,其中一些位的数据用于表示单个像素颜色的红、绿、蓝三个分量的每个分量,而图像由这些像素的二维数组组成。表示 RGB 样本主要有两种方法:使用整数分量和使用浮点分量。当使用整数分量时,RGB 颜色每个使用 8 位的红色、绿色和蓝色,以及可能使用 8 位的 alpha(透明度值)。
YUV
与 RGB 不同,YUV(或 Y'UV)颜色编码系统基于人类感知颜色图像的方式。这样做可以使颜色数据在视频流中使用更少的总位空间来表示。
如今,“YUV”这个名称通常用于描述这种颜色系统,尽管该术语最初专门用于模拟颜色编码,而 YCbCr 用于数字颜色。然而,如今这两个术语都用于数字颜色。符号 '
表示正在使用伽马压缩。
思考人类视觉
我们可以用这种方式表示图像,因为人类的眼睛在灰度中比在颜色中看到更多细节,这要归功于生物学。人类的眼睛包含两种类型的光感受器(感光)细胞。视杆细胞是高灵敏度的光强度传感器。视锥细胞灵敏度较低,但能够检测颜色。
由于眼睛的视杆细胞数量远远多于视锥细胞(约 1.2 亿个视杆细胞对大约 600 万个视锥细胞),因此我们在灰度中看到细节,而颜色细节要少得多。本质上,我们的眼睛就像一台有两个图像传感器芯片的相机:一个灰度传感器和一个彩色传感器。灰度传感器是 1.2 亿像素,而彩色传感器只有大约 700 万像素。这些传感器在物理上占据眼睛后部的同一表面,称为视网膜。
视锥细胞有三种类型,每种类型对特定波长范围的入射光以及该波长下光的强度做出反应。因此,每种类型的视锥细胞捕获不同波长下的相对响应峰值,大脑使用这些数据来确定到达视网膜该部分的光的颜色强度和色调。
当我们的眼睛捕捉场景时,它们本质上同时拍摄两张照片:一张细节丰富的灰度图像和一张有点模糊、分辨率较低的图像,显示同时到达视网膜的光的颜色。最终的颜色图像由大脑创建,它本质上将颜色叠加到灰度像素上。
YUV 概念
YUV 通过定义一个具有三个分量的颜色空间来工作
- 亮度 (Y')
-
像素的亮度。如果没有另外两个分量,帧中每个像素的亮度会产生图像的灰度表示。例如,在 BT.709(用于高清电视)中,亮度值是像素的伽马校正后的红、绿、蓝分量的加权和,使用公式
Y' = 0.2126R' + 0.7152G' + 0.0722B'
。执行这种加权是因为眼睛中绿、红、蓝视锥细胞的比例如前所述。 - 蓝色差 (U 或 Cb)
-
色度或颜色样本的蓝色差分量。该值通过从伽马校正后的蓝色值中减去亮度来计算;即,
U = B' - Y'
。 - 红色差 (V 或 Cr)
-
颜色样本的色度的红色差分量。通过从伽马校正后的红色值中减去亮度来计算:
V = R' - Y'
。
色度抽样
色度抽样是将颜色像素转换为灰度图像以及表示要映射到这些像素的颜色的一系列 U 和 V 值的过程。
由于颜色数据以低于亮度分辨率进行编码,因此在解码视频以将其绘制到屏幕上时,每个像素的颜色是通过根据像素所在的 8 像素 4x2 块的 U 和 V 值计算适当的颜色来计算的。这种解码操作必须反映编码过程中使用的解码操作,这由三个用冒号 (:) 分隔的数字表示。
- 第一个数字指定从 4x2 像素块编码的每行亮度样本的数量。此值实际上总是 4,表示“使用所有亮度样本”。
- 第二个数字指定用于表示第一行像素颜色的色度样本数量。
- 第三个数字指示用于表示第二行像素颜色的色度样本数量。
下表显示了三种色度抽样模型的示例。
4:2:0 | 4:2:2 | 4:4:4 | |
---|---|---|---|
亮度 | |||
色度 (U 和 V) | |||
解码后的像素 |
在所有这些情况下,解码后的图像都使用了亮度数据每行中的所有四个像素。查看 4:2:0 色度抽样,在第一列中,值 2 表示第一行色度数据中有两个样本;0 表示第二行没有自己的色度样本,并且第一行的样本应该复制到第二行。换句话说,我们从源图像中每隔一行的像素获取颜色信息,并将它们应用到亮度表示的灰度图像中。
第二列显示了 4:2:2 抽样。四个亮度样本的顶行应用了两个色度样本,而亮度样本的底行也应用了两个样本。因此,由该块表示的八个像素在它们之间共享四个色度样本。
最后一个示例演示了 4:4:4 抽样。每行都有四个亮度样本和四个色度样本,因此由该块表示的每个像素都分别上色。
如果色度抽样模型为 4:0:0 呢?这意味着使用亮度数据的每个像素,但每行应用 0 个色度样本。因此,生成的图像仅由亮度数据组成,即灰度图像。
YUV 数据表示
由于图像使用灰度中的更多细节来表示,而不是颜色,因此 Y'、U 和 V 的值通常不会像 RGB 图像存储在内存中那样存储在一起,每个像素一个样本。
- 视频的每一帧都由一个亮度值矩阵 Y 表示,每个像素的颜色使用 U 和 V 矩阵中的值来计算。例如,在 AV1 编解码器中,一条记录存储了平铺的编码亮度,而另一条记录以 U 和 V 值的形式包含色度数据。
- 在广播电视中,亮度信号是主信号,而色度数据是在副载波上传输的。
- 的JPEG 文件类型的压缩工作原理是首先将图像转换为 Y'UV 颜色系统,然后压缩这些数据。Y'、Cb 和 Cr 的每个值都可以在 0 到 255 之间。