简介
YUV,是一种颜色编码方法,跟RGB是同一个级别的概念,广泛应用于多媒体领域中。
也就是说,图像中每一个像素的颜色信息,除了可以用RGB的方式表示,也可以用YUV的方式表示。
与RGB的对比
体积更小
-
如果使用RGB
- 比如RGB888 (R、G、B每个分量都是8bit)
- 1个像素占用24bit(3字节)
-
如果使用YUV
- 1个像素可以减少至平均只占用12bit(1.5字节)
- 体积为RGB888的一半
组成
RGB数据由R、G、B三个分量组成。 YUV数据由Y、U、V三个分量组成,现在通常说的YUV指的是YCbCr。
- Y: 表示亮度(Luminance、Luma),占8bit(1字节)
-
Cb、Cr: 表示色度(Chrominance、Chroma)
- Cb (U): 蓝色色度分量,占8bit(1字节)
- Cr (V): 红色色度分量,占8bit(1字节)
兼容性
根据上面图片,不难看出:
- Y分量对呈现出清晰的图像有着很大的贡献
- Cb、Cr分量的内容不太容易识别清楚
此外,你是否感觉: Y分量的内容看着有点眼熟?其实以前黑白电视的画面就是长这样子的。
YUV的发明处在彩色电视与黑白电视的过渡时期
- YUV将亮度信息(Y)与色度信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的
- 这样的设计很好地解决了彩色电视与黑白电视的兼容性问题,是黑白电视也能够接收彩色电视信号,只不过它只显示了Y分量
- 彩色电视有Y、U、V分量,如果去掉UV分量,剩下的Y分量和黑白电视相同
色度二次采样
原理
人眼的视网膜上,分布着两种感光细胞: 视杆细胞和视锥细胞。
-
视杆细胞
- 感知光线的强弱
- 没有色彩识别功能
- 负责夜间非彩色视觉
-
视锥细胞
- 感知颜色
- 负责白天彩色视觉
- 如果你的视锥细胞发育不正常,数量太少,那感知颜色就会受阻,可能会导致你色弱
人眼中有上亿个感光细胞,其中视杆细胞占了95%,而视锥细胞仅占5%。
因此,人眼对亮度的敏感程度要高于对色度的敏感程度,人眼对于亮度的分辨率要比对颜色的分辨精细一些。
如果把图像的色度分量减少一些,人眼也丝毫感觉不到变化和差异。
概念
如果在色度分量上进行(相对亮度分量)较低分辨率的采样,也就是存储较多的亮度细节、较少的色度细节,这样就可以在不明显降低画面质量的同时减少图像的体积。上述过程称为: 色度二次采样(Chroma Subsampling)。
采样格式
采样格式通常用A:B:C的形式来表示,比如4:4:4、4:2:2、4:2:0等,其中我们最需要关注的是4:2:0。
- A: 一块A*2个像素的概念区域,一般都是4。
- B: 第1行的色度采样数目
-
C: 第2行的色度采样数目
- C的值一般要么等于B,要么等于0
不管是哪种采样格式,Y分量都是全水平、全垂直分辨率采样的,每一个像素都有自己的Y分量
4:4:4
- 第一行采用4组CbCr分量,第二行采集4组CbCr分量
-
每一个像素都有自己独立的1组CbCr分量
- Y分量与CbCr分量的水平方向比例是1:1(每1列都有1组CBCr分量)
- Y分量与CbCr分量的垂直方向比例是1:1(每1行都有1组CbCr分量)
- Y分量与CbCr分量的总比例是1:1
-
1个像素占用24bit(3字节), 跟RGB888的体积一样
- 24bpp (bits per pixel)
-
这种格式是没有进行色度二次采样的: 叉叉代表亮度 圆圈代表色度
4:2:2
- 第1行采集2组CbCr分量,第2行采集2组CbCr分量
-
水平方向相邻的2个像素(1行2列)共用1组CbCr分量
- Y分量与CbCr分量的水平方向比例是2:1(每2列就有1组CbCr分量)
- Y分量与CbCr分量的垂直方向比例是1:1 (每1行都有1组CbCr分量)
- Y分量与CbCr分量的总比例是2:1
-
1个像素平均占用16bit (2字节)
- 16bpp
- 因为2个像素共占用32bit (4字节 = 2个Y分量 + 1个Cb分量 + 1个Cr分量)
4:2:0
- 第1行采集2组CbCr分量,第2组共享第1行的CbCr分量
-
相邻的4个色素(2行2列)共用1组CbCr分量
- Y分量与CbCr分量的水平方向比例是2:1 (每2列就有1组CbCr分量)
- Y分量与CbCr分量的垂直方向比例是2:1(每2行就有1组CbCr分量)
- Y分量与CbCr分量的总比例是4:1
-
1个像素平均占用12bit(1.5字节)
- 12bpp
- 因为4个像素共用48bit(6字节 = 4个Y分量 + 1个Cb分量 + 1个Cr分量)
-