基于 BT.601 标准的色彩空间转换包含完整的 MATLAB 代码、原理推导、实验结果及图片分析。1. 背景介绍1.1 什么是 RGB888RGB888 是最常见的数字图像存储格式每个像素由R(红)、G(绿)、B(蓝)三个通道组成每个通道占8 bit0~255合计每个像素24 bit。例如一张 1279×1706 的图片原始数据量为1279 × 1706 × 3 6,545,922 字节 ≈ 6.24 MB1.2 为什么需要 YCbCr人眼对亮度变化比色彩变化更敏感。因此可以利用这一特性保持亮度分辨率不变而对色度信息进行降采样从而大幅减少数据量同时肉眼几乎看不出差异。YCbCr是一种将亮度和色度分离的色彩空间分量含义说明Y亮度 (Luminance)表示明暗信息人眼最敏感Cb蓝色差 (Chrominance Blue)蓝色分量与亮度的差值Cr红色差 (Chrominance Red)红色分量与亮度的差值1.3 YCbCr 采样格式格式Y 分辨率Cb 分辨率Cr 分辨率每像素等效bit说明4:4:4全分辨率全分辨率全分辨率24 bit无压缩与RGB888相同4:2:2全分辨率水平1/2水平1/216 bit色度水平方向压缩一半4:2:0全分辨率水平1/2, 垂直1/2水平1/2, 垂直1/212 bit色度四分之一本文实现4:4:4和4:2:2两种格式。2. 转换原理2.1 BT.601 标准正变换ITU-R BT.601 标准定义了 RGB 到 YCbCr 的转换矩阵Y 0.299 × R 0.587 × G 0.114 × BCb -0.169 × R - 0.331 × G 0.500 × B 128Cr 0.500 × R - 0.419 × G - 0.081 × B 1282.2 BT.601 逆变换从 YCbCr 还原为 RGBR Y 1.402 × (Cr - 128)G Y - 0.344 × (Cb - 128) - 0.714 × (Cr - 128)B Y 1.772 × (Cb - 128)2.3 422 水平下采样原理YCbCr422 的色度分量在水平方向每 2 个像素取平均Cb_422(x) (Cb(2x-1) Cb(2x)) / 2Cr_422(x) (Cr(2x-1) Cr(2x)) / 23. MATLAB 代码详解3.1 读取图像与数据准备img_path 土楼.jpg;rgb_img imread(img_path);[rows, cols, ~] size(rgb_img);R double(rgb_img(:,:,1));G double(rgb_img(:,:,2));B double(rgb_img(:,:,3));imread读取后为uint8类型0~255转为double是避免矩阵运算时的数据类型溢出。如果不转双精度uint8 的减法会出现负数截断为 0 的问题。3.2 RGB888 → YCbCr444 正变换Y 0.299*R 0.587*G 0.114*B;Cb -0.168736*R - 0.331264*G 0.5*B 128;Cr 0.5*R - 0.418688*G - 0.081312*B 128;MATLAB 的矩阵运算天然支持逐像素操作三行代码即可完成整张图的色彩空间转换。3.3 水平色度下采样444 → 422Cb_422 (Cb(:, 1:2:end) Cb(:, 2:2:end)) / 2;Cr_422 (Cr(:, 1:2:end) Cr(:, 2:2:end)) / 2;Y_422 Y; % 亮度保持全分辨率Cb(:, 1:2:end)取所有奇数位置像素Cb(:, 2:2:end)取所有偶数位置像素两者取平均后列数减半。为便于可视化使用双线性插值将降采样的 Cb/Cr 上采样回原分辨率Cb_422_disp imresize(Cb_422, [rows, cols], bilinear);Cr_422_disp imresize(Cr_422, [rows, cols], bilinear);3.4 YCbCr → RGB 还原验证R_444 Y 1.402*(Cr - 128);G_444 Y - 0.344*(Cb - 128) - 0.714*(Cr - 128);B_444 Y 1.772*(Cb - 128);RGB_444 uint8(max(0, min(255, RGB_444)));min/max确保还原后的像素值不超出 [0, 255] 范围。3.5 PSNR 质量评估PSNR峰值信噪比是衡量图像质量的客观指标PSNR 10 × log₁₀(MAX² / MSE)其中MAX 2558bit图像最大值MSE Σ(原图 - 重建图)² / 像素总数mse_444 mean((double(rgb_img(:)) - double(RGB_444(:))).^2);psnr_444 10 * log10(255^2 / mse_444);4. 实验结果4.1 测试图像属性值图像名称土楼.jpg分辨率1279 × 1706原始格式RGB888 (24 bit/像素)4.2 PSNR 对比转换方式PSNR评价YCbCr444 还原Inf dB数学上完全无损浮点精度内YCbCr422 还原52.84 dB远高于 40dB 的优秀标准肉眼无法分辨PSNR 40 dB 通常被认为是极高质量 50 dB 几乎与原始图像完全一致。4.3 数据量对比格式数据量字节等效 bit/像素压缩率RGB8886,545,92224基准YCbCr4446,545,922240%无压缩YCbCr4224,363,94816节约 33.3%4.4 主观评价从视觉上看YCbCr422 还原图与原始 RGB 图几乎无差异——尽管色度信息减少了一半但人眼对色度的分辨率远低于亮度因此 422 的压缩在视觉上完全可接受。4.5 还原效果对比下图从左到右依次为原始RGB888图像、YCbCr444还原图、YCbCr422还原图。原图 vs YCbCr444 vs YCbCr422 还原对比4.6 YCbCr 各分量对比下图展示了YCbCr各分量的对比。第一行为Y亮度和Cb/Cr全分辨率分量第二行为444还原图以及Cb/Cr降采样后插值还原的分量。Y分量(亮度) | Cb分量(蓝色差, 444) | Cr分量(红色差, 444)Y分量(亮度) | Cb分量(蓝色差, 422) | Cr分量(红色差, 422)5. 输出图片说明程序共生成 7 张输出图片文件名说明Y分量(亮度)Y通道仅包含亮度信息的灰度图显示了图像的明暗结构Cb分量(蓝色差, 444)Cb通道全分辨率偏向蓝/黄色的色差信息Cr分量(红色差, 444)Cr通道全分辨率偏向红/绿色的色差信息Cb分量(蓝色差, 422)Cb通道422降采样后插值还原相比444略微模糊Cr分量(红色差, 422)Cr通道422降采样后插值还原相比444略微模糊YCbCr444还原图444还原RGB与原图一致无损YCbCr422还原图422还原RGB视觉上与原图几乎无差异6. 总结1.YCbCr444 是无损转换——RGB 与 YCbCr 之间的矩阵变换在浮点精度内完全可逆2.YCbCr422 以 33% 的数据量减少换取极微小的质量损失——PSNR 高达 52.84 dB肉眼完全不可感知3. 这正是 JPEG、MPEG、H.264/H.265 等图像/视频编码标准的核心思路利用人眼视觉特性在亮色分离后对色度进行降采样