音视频开发基础知识-色彩空间
前言
前面的博文中多次提到色彩空间(或者颜色空间)。对此,我们只知道常用的色彩空间有RGB和YUV两种。
但是,它们的作用是什么呢?它们的具体区别是什么呢?它们的使用方法是什么?它们之间的关系是什么呢?
为了解决这些问题,本文整理了色彩空间的相关资料,来整体了解一下色彩空间,并尝试回答以上问题。
一。RGB和YUV的区别和联系
1. RGB的基础定义
RGB的颜色模式应该是我们最熟悉的一种,在现在的电子设备中应用广泛。通过R G B三种基础色,可以混合出所有的颜色。
2. YUV的基础定义
YUV是一种亮度与色度分离的色彩格式,三个字母的意义分别为:
(1)Y:亮度,就是灰度值。除了表示亮度信号外,还含有较多的绿色通道量。单纯的 Y 分量可以显示出完整的黑白图像。
(2)U:蓝色通道与亮度的差值。
(3)V:红色通道与亮度的差值。
其中,U、V 分量分别表示蓝 (blue)、红 (red) 分量信号,只含有色度信息,所以 YUV 也称为 YCbCr,其中,Cb、Cr的含义等同于U、V,C 可以理解为 component 或者 color。
3. RGB和YUV的换算
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
——————————————————
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
二。YUV详解
1. 采样格式
采样格式即在对视频数据进行采样时的格式,是在获取原始图像数据时采用的策略。
采样格式主要包括三种:YUV444、YUV422和YUV420。
1.1 YUV444:
YUV 4:4:4采样,每一个Y对应一组UV分量。
1.2 YUV422:
YUV 4:2:2采样,每两个Y共用一组UV分量。
1.3 YUV420:
YUV 4:2:0采样,每四个Y共用一组UV分量。(最常用)
1.4 YUV各种采样格式的比较
我们以一张大小为1280*720的图像为例:
在RGB 图像中,每个像素点都有红、绿、蓝三个原色,
其中每种原色都占用 8 bit,也就是一个字节,
那么一个像素点也就占用 24 bit,也就是三个字节。
一张 1280 * 720 大小的图片,
就占用 1280 * 720 * 3 / 1024 / 1024 = 2.63 MB 存储空间。
(1)【使用YUV4:4:4格式采样的大小】
YUV4:4:4格式意味着Y、U、V三个分量的采集比例相同,
因此在生成的图像里,每个像素的三个分量信息完整,
都是8bit,也就是一个字节。
那么它的采样大小为
3 * 1280 * 720 / 1024 / 1024 = 2.63MB
与原始RGB图像相比大小是一样的。
(2)【使用YUV4:2:2格式采样的大小】
YUV4:2:2格式的采样特征是在每相临的两个像素,
一个丢弃U分量,一个丢弃V分量,那么它的采样大小为:
(8 + 8) * 1280 * 720 / 8 / 1024 / 1024 = 1.76MB
可以看到 YUV 4:2:2 采样的图像比 RGB 模型图像节省了三分之一的存储空间,
在传输时占用的带宽也会随之减少。
(3)【使用YUV4:2:0格式采样的大小】
YUV4:2:0格式的采样特征是所有像素都保留Y分量,
同一行的像素只保留U分量,或者是V分量,
同一行中相临的两个像素只保留同一个Y分量或者U分量。
那么它的采样大小为:
(8 * 1280 * 720 + 8 * 1280 * 720 / 2 / 2 + 8 * 1280 * 720 / 2 / 2) / 8 / 1024 / 1024 = 1.32MB
可以看到 YUV 4:2:0 采样的图像比 RGB 模型图像节省了一半的存储空间,
因此它也是比较主流的采样方式。
YUV420属于planar存储方式,但是又分两种类型:
(1)YUV420P:三平面存储。数据组成为YYYYYYYYUUVV(如I420)或YYYYYYYYVVUU(如YV12)。
(2)YUV420SP:两平面存储。分为两种类型YYYYYYYYUVUV(如NV12)或YYYYYYYYVUVU(如NV21)
2. 存储格式
存储格式既是存储图像数据的方式,YUV存储格式主要分为packed和packed 两种模式。
2.1 packed:
每个像素点的 Y、U、V 连续交叉存储。见下图。
2.2 planar:
先存储所有Y,紧接着存储所有U,最后是V。见下图。
3. YUV格式
不同的采样格式与存储格式相组合就得到多种不同的YUV格式。这些格式的采样格式主要是基于YUV 4:2:2 和 YUV 4:2:0两种。
3.1 YUYV格式(YUV 4:2:2+packed)
YUV 4:2:2 采样规定了 Y 和 UV 分量按照 2: 1 的比例采样,两个 Y 分量公用一组 UV 分量。
Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U2 V2 分量….
排列顺序如下:
3.2 UYVY格式(YUV 4:2:2+packed)
它的顺序和 YUYV 相反,先采样 U 分量再采样 Y 分量。
和YUYV 一样,Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U2 V2 分量….
排列顺序如下:
3.3 YUV422P/I422格式(YUV 4:2:2+Planar )
和上面两种格式一样,这个格式也是Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U2 V2 分量….
不同的是,此格式存储时,先存储所有的 Y 分量,再存储所有的 U 分量,再存储所有的 V 分量。
3.4 YUV420P类型(YUV 4:2:0+Planar )
YUV420P是基于Planar 平面格式进行存储的,先存储所有的 Y 分量后, 会先存储所有的 U 分量或者 V 分量。
格式如下图:
其在码流中的表现形式为:
这种类型又分为两种具体的格式:YU12(又称为I420)和YV12格式,
两种格式都是先存储完Y分量,再存储U、V分量,
不同的是:YU12是先 Y 再 U 后 V,而 YV12 是先 Y 再 V 后 U。
3.5 YUV420SP类型(YUV 4:2:0+Planar )
和YUV420P类型一样,YUV420SP也是基于 Planar 平面格式 进行存储的,不同的是:YUV420SP存储完所有的Y分量之后,就按照 UV 或者 VU 的交替顺序进行存储了。
格式如下图:
其在码流中的表现形式为:
这种类型也分为两种具体的格式:NV12和NV21格式,
两种格式都是先存储完Y分量,再把 UV 分量交替连续存储,
不同的是,NV12是先存Y分量,再UV进行交替存储。而NV21则是VU交替存储。
三。总结
由上面的整理和分析可以尝试回答前言中的问题:
(1)RGB和YUV的作用是什么:
它们描述的是采样和存储图像数据的格式,根据这些格式,我们可以进行格式转换,可以压缩图像数据,从而在图像不失真的情况下压缩图像数据。
(2)YUV各个格式的具体区别是什么呢:
它们的主要区别就在于采样的方式或者存储的方式,又由于不同的采样方式和存储方式,它们在数据大小和图像的真实度上都各不相同。
(3)RGB和YUV的使用方法是什么?
它们都是一种采样和存储图像的格式,在采样时根据相应的格式进行采样得到图像的数据,然后将这些数据根据对应的存储方式进行存储,从而得到能够满足不同需求(比如数据量小、真实度高等需求)的视频数据。
(4)RGB和YUV之间的关系是什么呢?
两者都是采样和存储图像的格式,但是它们的原理不同。而同时,它们可以通过一定的公式进行互换。