2、YUV色彩空间基础:YUV与RGB的数学关系、YUV420/YUV422/YUV444采样格式详解、色度子采样原理
2.1 YUV色彩空间概述
YUV(亦称YCbCr)是一种将亮度(Luma)与色度(Chroma)分离的色彩编码体系。在视频压缩与传输领域,YUV占据主导地位,其核心优势在于:人眼对亮度变化敏感,对色度变化相对迟钝。利用这一视觉特性,YUV允许对色度分量进行降采样,从而在不显著降低主观画质的前提下,大幅压缩数据带宽。
在V4L2驱动开发中,理解YUV是进行格式协商、裁剪、格式转换与性能优化的前提。YUV与RGB的转换精度直接影响图像质量,而采样格式决定了内存布局与DMA搬运效率。
2.2 YUV与RGB的数学关系
YUV与RGB之间的转换遵循线性矩阵变换。以下给出最常用的BT.601标准(标清视频)下的8位量化转换公式。所有分量取值范围为[0, 255]。
2.2.1 RGB → YUV(正向转换)
Y = 0.299 * R + 0.587 * G + 0.114 * B
Cb = -0.169 * R - 0.331 * G + 0.500 * B + 128
Cr = 0.500 * R - 0.419 * G - 0.081 * B + 128
2.2.2 YUV → RGB(逆向转换)
R = Y + 1.402 * (Cr − 128)
G = Y − 0.344 * (Cb − 128) − 0.714 * (Cr − 128)
B = Y + 1.772 * (Cb − 128)
2.2.3 不同标准对比
| 标准 | 应用场景 | Y系数 (R/G/B) | 色域 |
|---|---|---|---|
| BT.601 | 标清电视 (SDTV) | 0.299 / 0.587 / 0.114 | 较窄 |
| BT.709 | 高清电视 (HDTV) | 0.2126 / 0.7152 / 0.0722 | 较宽 |
| BT.2020 | 超高清 (UHDTV) | 0.2627 / 0.6780 / 0.0593 | 最宽 |
V4L2驱动中,V4L2_PIX_FMT_YUYV 等格式默认遵循BT.601标准。若摄像头传感器输出BT.709数据,驱动需在格式转换时切换系数矩阵。
2.3 色度子采样原理
色度子采样(Chroma Subsampling)是YUV体系的核心压缩手段。其原理是:对亮度分量Y保留全分辨率,对色度分量Cb/Cr进行水平或垂直方向的降采样。采样格式用“J:a:b”表示法描述,其中J表示亮度采样参考宽度(通常为4),a表示第一行色度采样数,b表示第二行色度采样数。
2.3.1 三种主流采样格式
| 格式 | 表示法 | 色度水平 | 色度垂直 | 压缩比 | 典型应用 |
|---|---|---|---|---|---|
| YUV444 | 4:4:4 | 全采样 | 全采样 | 1:1(无压缩) | 专业制作、屏幕采集 |
| YUV422 | 4:2:2 | 1/2采样 | 全采样 | 2:1 | 广播级视频、HDMI |
| YUV420 | 4:2:0 | 1/2采样 | 1/2采样 | 3:2 | 流媒体、H.264/H.265 |
2.4 YUV420/YUV422/YUV444 内存布局详解
在V4L2驱动中,理解内存布局是正确配置v4l2_format、v4l2_plane以及实现裁剪/缩放的关键。不同采样格式对应不同的像素存储顺序与对齐要求。
2.4.1 YUV444 平面布局
YUV444通常以打包(Packed)或平面(Planar)形式存储。平面布局下,三个独立平面分别存放Y、Cb、Cr数据,每个像素对应一个Y、一个Cb、一个Cr。分辨率W×H时,总数据量为 W × H × 3 字节。
2.4.2 YUV422 打包布局(YUYV格式)
YUYV是V4L2中最常见的YUV422打包格式。内存中按 [Y0, U0, Y1, V0] 的4字节宏像素排列,每2个像素共享一对Cb/Cr。行跨度(Stride)必须为2的倍数。
// YUYV 内存布局示例(4像素)
// 像素0: Y0, U0
// 像素1: Y1, V0
// 像素2: Y2, U1
// 像素3: Y3, V1
// 内存: [Y0][U0][Y1][V0] [Y2][U1][Y3][V1]
2.4.3 YUV420 平面布局(NV12格式)
NV12是V4L2驱动中最常用的YUV420半平面格式。Y平面大小为 W × H 字节,CbCr交错平面大小为 W × H / 2 字节。总数据量为 W × H × 1.5 字节。
// NV12 内存布局(4×4图像)
// Y平面: [Y00 Y01 Y02 Y03] [Y10 Y11 Y12 Y13]
// [Y20 Y21 Y22 Y23] [Y30 Y31 Y32 Y33]
// UV平面: [U00 V00 U01 V01] [U10 V10 U11 V11]
// (UV平面宽度 = W, 高度 = H/2)
EINVAL)。
2.5 采样格式选择对性能的影响
| 维度 | YUV444 | YUV422 | YUV420 |
|---|---|---|---|
| 内存带宽 | 高(3B/pixel) | 中(2B/pixel) | 低(1.5B/pixel) |
| ISP处理延迟 | 低(无降采样) | 中 | 高(需插值) |
| 裁剪对齐约束 | 1像素 | 2像素(水平) | 2像素(水平+垂直) |
| 格式转换开销 | 低(直接映射) | 中 | 高(需色度上采样) |
| 推荐场景 | 屏幕采集/专业应用 | 广播/HDMI输入 | 摄像头/编码/流媒体 |
2.6 本章小结
- YUV核心优势:亮度与色度分离,支持色度子采样,人眼视觉特性适配。
- 转换公式:BT.601/BT.709/BT.2020标准,驱动中需使用整数定点运算避免浮点开销。
- 采样格式:YUV444(无损)、YUV422(水平降采样)、YUV420(水平+垂直降采样)。
- 内存布局:YUYV打包格式与NV12半平面格式是V4L2驱动中最常见的两种布局。
- 对齐约束:YUV420裁剪需2像素对齐,YUV422需水平2像素对齐,违反对齐是驱动bug的常见来源。