前言
本文旨在为初学者提供有关计算机图像编码的基础知识,以帮助他们初步理解计算机中图像编码的概念。鉴于我个人知识的限制,如有不准确之处,欢迎指正并提供建议。
文中部分内容参考ChatGPT,在此感谢ppword的支持。
四、YUV色彩空间
1、YUV和YCbC的关系
YUV是编译true-color颜色空间的种类,Y表示明亮度,U和V则是色度、浓度。
YCbCr的Y与YUV中的Y含义一致,Cb和Cr与UV同样都指色彩,Cb指蓝色色度,Cr指红色色度。
YUV, YCbCr所指涉的范围,常有混淆或重叠的情况。从历史的演变来说,其中YUV通常用来编码电视的模拟信号,而YCbCr则是用来描述数字的影像信号,适合影片与图片压缩以及传输,例如MPEG、JPEG。因此一般俗称的YUV大多是指YCbCr。
2、YUV有什么特别
2.1、与RGB的数据组成对比
-
RGB数据由R、G、B三个分量组成。
-
YUV数据由Y、U、V三个分量组成,现在通常说的YUV指的是YCbCr。
- Y:表示亮度,占8bit(1字节)
- Cb(U):蓝色色度分量,占8bit(1字节)
- Cr(V):红色色度分量,占8bit(1字节)
这么一看,感觉两者除了把RBG换成YUV之外,别的也没什么区别啊。那我们就拿一张图来做一下对比。
2.2、与RGB的图像分解对比
先看原图:
再来看一下它所对应的RGB的数据图:
再来看一下它所对应的YUV的数据图:
根据上面的图片,不难看出:
- RGB的每个分量,是对当前颜色的一个亮度值
- Y分量对呈现出清晰的图像有着很大的贡献
- Cb、Cr分量的内容不太容易识别清楚
- YUV将亮度信息(Y)与色度信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的
2.3、视网膜的秘密
人眼的视网膜上,分布着两种感光细胞:视杆细胞和视锥细胞。
- 视杆细胞
- 感知光线的强弱
- 没有色彩识别功能
- 负责夜间非彩色视觉
- 视锥细胞
- 感知颜色
- 负责白天彩色视觉
- 如果你的视锥细胞发育不正常,可能会导致你色弱
人眼中有上亿个感光细胞,其中视杆细胞占了95%,而视锥细胞仅占5%。因此,人眼对亮度的敏感程度要高于对色度的敏感程度,人眼对于亮度的分辨要比对颜色的分辨精细一些。
如果把图像的色度分量减少一些,人眼也丝毫感觉不到变化和差异。
2.4、YUV的优点
YUV颜色空间(亮度、色差)在数字视频和图像处理中得到广泛使用,有以下好处:
-
分离亮度和色差:YUV将图像的亮度信息(Y)与颜色信息(U和V)分开。这个分离使得在不影响图像质量的情况下,可以更有效地压缩颜色信息,减小数据量,这在视频传输和存储中非常重要。
-
人眼对亮度敏感:人眼对亮度信息的感知更敏感,因此更高的亮度分辨率可以提高图像质量,而相对较低的色差分辨率通常不会明显影响视觉感知。
-
减小带宽需求:在广播、视频传输和流媒体等应用中,通过对色差信息进行亚采样,可以显著减小传输所需的带宽。这可以在视频编码中实现更高的压缩比例,减小数据传输成本。
-
适用于多种显示技术:YUV的颜色编码适用于多种显示技术,包括电视、监视器和数字相机。因为YUV更符合人眼感知方式,它在各种显示设备上都能提供更自然的颜色。
-
图像处理和编辑:在图像处理和编辑中,YUV颜色空间提供了更灵活的颜色操作选项,特别是在色彩校正和颜色分离等方面。
总之,YUV颜色空间的分离亮度和色差信息以及对亮度信息的更高分辨率使其成为数字视频处理中的一种重要工具。它可以帮助减小数据量,降低传输成本,同时保持图像质量。在各种多媒体应用中,YUV都发挥着关键的作用,使图像和视频的处理和传输更加高效和有效。
既然有这么多优点,那这些优点又是怎么体现的呢?
3、色度二次采样
色度二次采样(Chrominance Subsampling)是数字图像和视频压缩中的一种技术,旨在减小颜色信息的数据量,以降低存储和传输成本,同时保持相对高质量的图像。这一技术主要涉及对色差信息的亚采样。色度二次采样通常应用于U和V色差通道。
在数字图像和视频处理中,"采样" 是指通过有限数量的数据点(或像素)来表示和近似连续信号或图像的过程。采样是模拟信号(连续信号)转换为数字信号(离散信号)的关键步骤。
3.1、原理
色度二次采样的原理如下:
-
亮度(Y)通道:亮度通道通常以全分辨率进行采样,因为人眼对亮度信息的感知非常敏感。
-
色差(U和V)通道:色差通道的分辨率可以低于亮度通道。说白了,就是按一定规则丢掉一部分的U和V,但是具体要怎么丢,这就是接下来要讨论的了。
3.2、采样格式
为节省带宽起见,大多数 YUV 格式平均使用的每像素位数都少于 24 位。主要的采样(subsample)格式有 YCbCr4:2:0、YCbCr4:2:2、YCbCr4:1:1 和 YCbCr4:4:4。YUV 的表示法称为 A:B:C 表示法。
下面我们以表格来说明,表格中,每一格代表一个像素
原始数据
行列 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | Y0 U0 V0 | Y1 U1 V1 | Y2 U2 V2 | Y3 U3 V3 |
2 | Y4 U4 V4 | Y5 U5 V5 | Y6 U6 V6 | Y7 U7 V7 |
3 | Y8 U8 V8 | Y9 U9 V9 | Y10 U10 V10 | Y11 U11 V11 |
4 | Y12 U12 V12 | Y13 U13 V13 | Y14 U14 V14 | Y15 U15 V15 |
3.2.1、4:4:4采样
- 每1个像素都有自己独立的1组CbCr分量
- 1个像素占用24bit(3字节),跟RGB24的体积一样
- 这种格式是没有进行色度二次采样的
采样后
行列 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | Y0 U0 V0 | Y1 U1 V1 | Y2 U2 V2 | Y3 U3 V3 |
2 | Y4 U4 V4 | Y5 U5 V5 | Y6 U6 V6 | Y7 U7 V7 |
3 | Y8 U8 V8 | Y9 U9 V9 | Y10 U10 V10 | Y11 U11 V11 |
4 | Y12 U12 V12 | Y13 U13 V13 | Y14 U14 V14 | Y15 U15 V15 |
3.2.2、4:2:2采样
- 每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个。
- 1个像素平均占用16bit(2字节)
- 因为2个像素共占用32bit(4字节 = 2个Y分量 + 1个Cb分量 + 1个Cr分量)
- 还原时,水平方向相邻的2个像素(1行2列)共用1组CbCr分量
采样后
行列 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | Y0 U0 - | Y1 - V1 | Y2 U2 - | Y3 - V3 |
2 | Y4 U4 - | Y5 - V5 | Y6 U6 - | Y7 - V7 |
3 | Y8 U8 - | Y9 - V9 | Y10 U10 - | Y11 - V11 |
4 | Y12 U12 - | Y13 - V13 | Y14 U14 - | Y15 - V15 |
还原后
行列 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | Y0 U0 V1 | Y1 U0 V1 | Y2 U2 V3 | Y3 U2 V3 |
2 | Y4 U4 V5 | Y5 U4 V5 | Y6 U6 V7 | Y7 U6 V7 |
3 | Y8 U8 V9 | Y9 U8 V9 | Y10 U10 V11 | Y11 U10 V11 |
4 | Y12 U12 V13 | Y13 U12 V13 | Y14 U14 V15 | Y15 U14 V15 |
3.2.3、4:2:0采样
- 每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。
- 1个像素平均占用12bit(1.5字节)
- 因为4个像素共占用48bit(6字节 = 4个Y分量 + 1个Cb分量 + 1个Cr分量)
- 还原时,相邻的4个像素(2行2列)共用1组CbCr分量
采样后
行列 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | Y0 U0 - | Y1 - - | Y2 U2 - | Y3 - - |
2 | Y4 - V4 | Y5 - - | Y6 - V6 | Y7 - - |
3 | Y8 U8 - | Y9 - - | Y10 U10 - | Y11 - - |
4 | Y12 - V12 | Y13 - - | Y14 - V14 | Y15 - - |
还原后
行列 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | Y0 U0 V4 | Y1 U0 V4 | Y2 U2 V6 | Y3 U2 V6 |
2 | Y4 U0 V4 | Y5 U0 V4 | Y6 U2 V6 | Y7 U2 V6 |
3 | Y8 U8 V12 | Y9 U8 V12 | Y10 U10 V14 | Y11 U10 V14 |
4 | Y12 U8 V12 | Y13 U8 V12 | Y14 U10 V14 | Y15 U10 V14 |
3.2.3、4:1:1采样
- 每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。
- 1个像素平均占用12bit(1.5字节)
- 因为4个像素共占用48bit(6字节 = 4个Y分量 + 1个Cb分量 + 1个Cr分量)
- 还原时,水平相连的4个像素(2行2列)共用1组CbCr分量
4:2:0和4:1:1的区别在于,前者在水平方向上不会同时出现U和V,只会出现其中一个分量,后者在竖直方向上不会同时出现U和V,只会出现其中一个分量。
采样后
行列 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | Y0 U0 - | Y1 - - | Y2 - V2 | Y3 - - |
2 | Y4 U4 - | Y5 - - | Y6 - V6 | Y7 - - |
3 | Y8 U8 - | Y9 - - | Y10 - V10 | Y11 - - |
4 | Y12 U12 - | Y13 - - | Y14 - V14 | Y15 - - |
还原后
行列 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | Y0 U0 V2 | Y1 U0 V2 | Y2 U0 V2 | Y3 U0 V2 |
2 | Y4 U4 V6 | Y5 U4 V6 | Y6 U4 V6 | Y7 U4 V6 |
3 | Y8 U8 V10 | Y9 U8 V10 | Y10 U8 V10 | Y11 U8 V10 |
4 | Y12 U12 V14 | Y13 U12 V14 | Y14 U12 V14 | Y15 U12 V14 |
4、YUV 存储方式
- Planar(平面)
- Y、U、V分量分开单独存储
- 名称通常以字母p结尾
- Semi-Planar(半平面)
- Y分量单独存储,U、V分量交错存储
- 名称通常以字母sp结尾
- Packed(紧凑)
- 或者叫Interleaved (交错)
- Y、U、V分量交错存储
4.1、基于 YUV444 采样的存储格式
下面是4x4 像素的 YUV444 格式采样数据:
行列 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | Y0 U0 V0 | Y1 U1 V1 | Y2 U2 V2 | Y3 U3 V3 |
2 | Y4 U4 V4 | Y5 U5 V5 | Y6 U6 V6 | Y7 U7 V7 |
3 | Y8 U8 V8 | Y9 U9 V9 | Y10 U10 V10 | Y11 U11 V11 |
4 | Y12 U12 V12 | Y13 U13 V13 | Y14 U14 V14 | Y15 U15 V15 |
4.1.1、存储格式总览
4.1.2、I444
先存储所有的 Y 分量,再存储所有的 U 分量,再存储所有的 V 分量
存储时
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
U0 U1 U2 U3 U4 U5 U6 U7
U8 U9 U10 U11 U12 U13 U14 U15
V0 V1 V2 V3 V4 V5 V6 V7
V8 V9 V10 V11 V12 V13 V14 V15
4.1.3、YV24
先存储所有的 Y 分量,再存储所有的 V 分量,再存储所有的 U 分量
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
V0 V1 V2 V3 V4 V5 V6 V7
V8 V9 V10 V11 V12 V13 V14 V15
U0 U1 U2 U3 U4 U5 U6 U7
U8 U9 U10 U11 U12 U13 U14 U15
4.1.4、NV24
先存储所有的 Y 分量,再U和V交错存放
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
U0 V0 U1 V1 U2 V2 U3 V3
U4 V4 U5 V5 U6 V6 U7 V7
U8 V8 U9 V9 U10 V10 U11 V11
U12 V12 U13 V13 U14 V14 U15 V15
4.1.5、NV42
先存储所有的 Y 分量,再V和U交错存放
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
V0 U0 V1 U1 V2 U2 V3 U3
V4 U4 V5 U5 V6 U6 V7 U7
V8 U8 V9 U9 V10 U10 V11 U11
V12 U12 V13 U13 V14 U14 V15 U15
4.2、基于 YUV422 采样的存储格式
下面是4x4 像素的 YUV422 格式采样数据:
行列 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | Y0 U0 - | Y1 - V1 | Y2 U2 - | Y3 - V3 |
2 | Y4 U4 - | Y5 - V5 | Y6 U6 - | Y7 - V7 |
3 | Y8 U8 - | Y9 - V9 | Y10 U10 - | Y11 - V11 |
4 | Y12 U12 - | Y13 - V13 | Y14 U14 - | Y15 - V15 |
4.2.1、存储格式总览
4.2.2、I422
先存储所有的 Y 分量,再存储所有的 U 分量,再存储所有的 V 分量。
存储时
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
U0 U2 U4 U6 U8 U10 U12 U14
V1 V3 V5 V7 V9 V11 V13 V15
4.2.3、YV16
先存储所有的 Y 分量,再存储所有的 V 分量,再存储所有的 U 分量。
存储时
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
V1 V3 V5 V7 V9 V11 V13 V15
U0 U2 U4 U6 U8 U10 U12 U14
4.2.4、NV16
先存储所有的 Y 分量,再U和V交错存放。
存储时
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
U0 V1 U2 V3 U4 V5 U6 V7
U8 V9 U10 V11 U12 V13 U14 V15
4.2.5、NV61
先存储所有的 Y 分量,再V和U交错存放。
存储时
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
V1 U0 V3 U2 V5 U4 V7 U6
V9 U8 V11 U10 V13 U12 V15 U14
4.2.6、UYVY
存储时(每个方括号里是2个像素)
[U0 Y0 V1 Y1 ] [U2 Y2 V3 Y3 ]
[U4 Y4 V5 Y5 ] [U6 Y6 V7 Y7 ]
[U8 Y8 V9 Y9 ] [U10 Y10 V11 Y11]
[U12 Y12 V13 Y13] [U14 Y14 V15 Y15]
4.2.7、YUYV
存储时(每个方括号里是2个像素)
[Y0 U0 Y1 V1 ] [Y2 U2 Y3 V3 ]
[Y4 U4 Y5 V5 ] [Y6 U6 Y7 V7 ]
[Y8 U8 Y9 V9 ] [Y10 U10 Y11 V11]
[Y12 U12 Y13 V13] [Y14 U14 Y15 V15]
4.2.8、YVYU
存储时(每个方括号里是2个像素)
[Y0 V1 Y1 U0 ] [Y2 V3 Y3 U2 ]
[Y4 V5 Y5 U4 ] [Y6 V7 Y7 V6 ]
[Y8 V9 Y9 U8 ] [Y10 V11 Y11 U10]
[Y12 V13 Y13 U12] [Y14 V15 Y15 U14]
4.3、基于 YUV420 采样的存储格式
下面是4x4 像素的 YUV420格式采样数据:
行列 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | Y0 U0 - | Y1 - - | Y2 U2 - | Y3 - - |
2 | Y4 - V4 | Y5 - - | Y6 - V6 | Y7 - - |
3 | Y8 U8 - | Y9 - - | Y10 U10 - | Y11 - - |
4 | Y12 - V12 | Y13 - - | Y14 - V14 | Y15 - - |
4.3.1、存储格式总览
4.3.2、I420
I420 是先 Y 再 U 后 V
- 大多数视频解码器以I420格式输出原始图片
存储时
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
U0 U2 U8 U10 V4 V6 V12 V14
4.3.3、YV12
YV12 是先 Y 再 V 后 U
存储时
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
V4 V6 V12 V14 U0 U2 U8 U10
4.3.4、NV12
NV12 是 iOS 中有的模式,它的存储顺序是先存 Y 分量,再 UV 进行交替存储。
存储时
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
U0 V4 U2 V6 U8 V12 U10 V14
4.3.5、NV21
NV21 是 Android 中有的模式,它的存储顺序是先存 Y 分量,在 VU 交替存储。
存储时
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
V4 U0 V6 U2 V12 U8 V14 U10
5、小结
这些格式实际上是用于视频编码和解码中的YUV色彩空间的不同组合。在视频处理中,YUV色彩空间被广泛使用。其中,I420是一种常见的YUV格式之一,在视频编码解码中经常出现。
在视频编码和解码过程中,使用I420格式可以有效地压缩图像数据,减小文件大小和传输带宽,并且在保持相对较高的图像质量的同时,保持较低的计算复杂度。
了解这些常见的YUV格式对于理解视频编码和解码以及图像处理技术是很重要的。在实际应用中,根据具体的需求和平台支持,选择适合的YUV格式进行处理和转换是很常见的操作。
标签:采样,存储,U8,U0,YUV,入门篇,分量,图像编码,计算机 From: https://www.cnblogs.com/ppword/p/17784527.html