YUV色彩空间
一、RGB和YUV
我们熟悉的RGB色彩空间有着三个A通道,以8bit为例,通过{ R[0, 255], G[0, 255], B[0, 255] }的组合,我们得到了16M量级的色彩组合。对于RGB来说,每一个通道的分量都不能丢弃。在图形学领域,因为RGB模型的原理与人眼视觉系统原理相似,所以得到了广泛应用。下面我们简单回顾一下灰度图与RGB的结构:
// 灰度图
Mat = {
11, 12,
21, 22
};
// RGB
Mat = {
{ 111, 112, 113 }, { 121, 122, 123 },
{ 211, 212, 213 }, { 221, 222, 223 }
};
而YUV则是一种用于视频、图片编码处理的方法。YUV是编译true-color颜色空间(color space)的种类,Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。“Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度、浓度(Chrominance、Chroma),Y′UV, YUV, YCbCr, YPbPr所指涉的范围,常有混淆或重叠的情况。从历史的演变来说,其中YUV和Y'UV通常用来编码电视的模拟信号,而YCbCr则是用来描述数字的影像信号,适合视频与图片压缩以及传输,例如MPEG、JPEG。 但在现今,YUV通常已经在电脑系统上广泛使用。
和RGB不同的是,YUV中的UV通道是可以丢弃的,在丢弃UV之后,Y就与灰度图的灰阶值相等。通过丢掉部分的UV采样值,就可以做到传输带宽小于24位,下面介绍几种常见的YUV格式。
二、YUV采样格式
2.1 YUV 4:4:4采样
YUV 4:4:4采样,意味着Y、U、V三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是8位。
其中Y分量用叉表示,UV分量用圆圈表示。下面来看一下编码方式:
// 假设图像像素为:
Mat = {
{ Y0, U0, V0 }, { Y1, U1, v1 },
{ Y2, U2, V2 }, { Y3, U3, V3 }
};
// 那么采样的码流为:
// Y U V 交替
Stream = { Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3 };
// 最后映射出的像素点为:
Mat = {
{ Y0, U0, V0 }, { Y1, U1, v1 },
{ Y2, U2, V2 }, { Y3, U3, V3 }
};
2.2 YUV 4:4:2采样
YUV 4:2:2采样,意味着UV分量是Y分量采样的一半,Y分量和UV分量按照2 : 1的比例采样。如果水平方向有10个像素点,那么采样了10个Y分量,而只采样了5个UV分量。
其中Y分量用叉表示,UV分量用圆圈表示。下面来看一下编码方式:
// 假设图像像素为:
Mat = {
{ Y0, U0, V0 }, { Y1, U1, v1 },
{ Y2, U2, V2 }, { Y3, U3, V3 }
};
// 那么采样的码流为:
// Y U Y V
Stream = { Y0 U0 Y1 V1 }, { Y2 U2 Y3 V3 };
// 最后映射出的像素点为:
Mat = {
{ Y0, U0, V1 }, { Y1, U0, v1 },
{ Y2, U2, V3 }, { Y3, U2, V3 }
};
2.3 YUV 4:2:0采样
YUV 4:2:0采样,并不是指只采样U分量而不采样V分量。而是指,在每一行扫描时,只扫描一种色度分量(U或者V),和Y分量按照2:1的方式采样。比如,第一行扫描时,YU按照2:1的方式采样,那么第二行扫描时,YV分量按照2:1的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和Y分量相比都是2:1。
其中Y分量用叉表示,UV分量用圆圈表示。下面来看一下编码方式:
// 假设图像像素为:
Mat = {
{ Y0, U0, V0 }, { Y1, U1, v1 }, { Y2, U2, V2 }, { Y3, U3, V3 },
{ Y4, U4, V4 }, { Y5, U5, V5 }, { Y6, U6, V6 }, { Y7, U7, V7 }
};
// 那么采样的码流为:
/*
假设奇数行采集 U,那么偶数行就采集 V
{ Y0 U0 Y1 }, { Y2 U2 Y3 }
{ Y4 V4 Y5 }, { Y6 V6 Y7 }
*/
Stream = { Y0 U0 Y1 }, { Y2 U2 Y3 }, { Y4 V4 Y5 }, { Y6 V6 Y7 }
// 最后映射出的像素点为:
Mat = {
{ Y0, U0, V4 }, { Y1, U0, v4 }, { Y2, U2, V6 }, { Y3, U2, V6 },
{ Y4, U0, V4 }, { Y5, U0, V4 }, { Y6, U2, V6 }, { Y7, U2, V6 }
};
三、色彩空间转换
3.1 RGB2YUV
3.2 YUV2RGB
3.3 矩阵描述
RGB2YUV:
YUV2RGB: