* 音视频入门文章目录 *
YUV & YCbCr 简介
YUV,是一种颜色编码方法。常使用在各个视频处理组件中。 YUV 在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。
Y 表示明亮度(Luminance或Luma),也就是灰阶值,U 和 V 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
Y'CbCr 不是一种绝对的色彩空间,是一种针对 RGB 资讯所做的编码。真正的颜色显示是根据实际 RGB 色盘(colorant)来决定的。因此 Y'CbCr 所表示的值只有在标准 RGB 色盘或是 ICC 数据(ICC profile)有提供的时候才能计算。Y'CbCr 在模拟分量影像(analog component video)中也常被称为 YPbPr。
YCbCr 不是一种绝对色彩空间,是 YUV 压缩和偏移的版本。YCbCr 的 Y 与 YUV 中的 Y 含义一致,Cb 和 Cr 与 UV 同样都指色彩,Cb 指蓝色色度,Cr 指红色色度,在应用上很广泛,JPEG、MPEG、DVD、摄影机、数字电视等皆采此一格式。
[ [ [ 因此一般俗称的 YUV 大多是指 YCbCr ] ] ]。
[ [ [ 因此一般俗称的 YUV 大多是指 YCbCr ] ] ]。
[ [ [ 因此一般俗称的 YUV 大多是指 YCbCr ] ] ]。
YUVFormats分成两个格式:
紧缩格式(packedformats):将 Y、U、V 值存储成 MacroPixels 数组,和 RGB 的存放方式类似。
平面格式(planarformats):将 Y、U、V 的三个分量分别存放在不同的矩阵中。
紧缩格式(packedformat)中的 YUV 是混合在一起的,对于 YUV4:4:4 格式而言,用紧缩格式很合适的,因此就有了 UYVY、YUYV 等。
平面格式(planarformats)是指每 Y 分量,U 分量和 V 分量都是以独立的平面组织的,也就是说所有的 U 分量必须在 Y 分量后面,而 V 分量在所有的 U 分量后面,此一格式适用于采样(subsample)。平面格式(planarformat)有 I420(4:2:0)、YV12、IYUV 等。
YUV 采样格式
为节省带宽起见,大多数 YUV 格式平均使用的每像素位数都少于 24 位。主要的采样(subsample)格式有 YCbCr4:2:0、YCbCr4:2:2、YCbCr4:1:1 和 YCbCr4:4:4。YUV 的表示法称为 A:B:C 表示法:
- 4:4:4 表示完全取样。
- 4:2:2 表示 2:1 的水平取样,垂直完全采样。
- 4:2:0 表示 2:1 的水平取样,垂直 2:1 采样。
- 4:1:1 表示 4:1 的水平取样,垂直完全采样。
表格中,每一格代表一个像素
未采样前
- | 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:4:4 采样
4:4:4 表示完全取样
- | 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 |
映射的像素:
- | 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:2:2 采样
4:2:2 表示 2:1 的水平取样,垂直完全采样
每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个。
- | 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 |
4:2:0 采样
4:2:0 表示 2:1 的水平取样,垂直 2:1 采样
每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。
- | 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 |
4:1:1 采样
4:1:1 表示 4:1 的水平取样,垂直完全采样
每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。
- | 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 |
YUV 存储方式
YUV 的存储方式,一般有两种方式,一种叫 packed 模式,一种叫 planar 模式。packed 模式 Y,U,V 交错排列,而 planar 模式 Y 和 U,V 的排列是分开的,而具体 U 与 V 继续分开或者继续交错排列根据具体的格式相关。
常见的基于 YUV422 采样的格式:
YUV422 采样 |
---|
YUYV 格式 |
UYVY 格式 |
YUV422P 格式 |
常见的基于 YUV420 采样的格式:
YUV420P 类型 | YUV420SP 类型 |
---|---|
YV12 格式 | YU12 格式 |
NV12 格式 | NV21 格式 |
基于 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 |
YUV444P 格式
存储时:
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
基于 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 |
YUYV 格式
YUYV 格式是采用打包格式进行存储的,指每个像素点都采样 Y 分量,但是每隔一个像素采样它的 UV 分量。
存储时(每个方括号里是 Macropixel=2 image pixels):
[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]
对 U,V 分量重新编号:
[Y0 U0 Y1 V0 ][Y2 U1 Y3 V1 ]
[Y4 U2 Y5 V2 ][Y6 U3 Y7 V3 ]
[Y8 U4 Y9 V4 ][Y10 U5 Y11 V5 ]
[Y12 U6 Y13 V6 ][Y14 U7 Y15 V7 ]
UYVY 格式
UYVY 格式也是采用打包格式进行存储,它的顺序和 YUYV 相反,先采样 U 分量再采样 Y 分量。
存储时(每个方括号里是 Macropixel=2 image pixels):
[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]
对 U,V 分量重新编号:
[U0 Y0 V0 Y1 ][U1 Y2 V1 Y3 ]
[U2 Y4 V2 Y5 ][U3 Y6 V3 Y7 ]
[U4 Y8 V4 Y9 ][U5 Y10 V5 Y11]
[U6 Y12 V6 Y13][U7 Y14 V7 Y15]
YUV422P 格式(又叫做 I422)
YUV422P 格式,又叫做 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
对 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
V0 V1 V2 V3 V4 V5 V6 V7
基于 YUV420 采样的格式
YUV420P 和 YUV420SP 都是基于 Planar 平面模式进行存储的。
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 - - |
YUV420P 类型
YUV420P 类型先存储所有的 Y 分量后,会先存储所有的 U 分量或者 V 分量。
YU12 和 YV12 格式都属于 YUV420P 类型,即先存储 Y 分量,再存储 U、V 分量,区别在于:YU12 是先 Y 再 U 后 V,而 YV12 是先 Y 再 V 后 U 。
YU12 格式(又叫做I420)
YU12 是先 Y 再 U 后 V
存储时:
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
U0 U2 U8 U10 V4 V6 V12 V14
对 U,V 分量重新编号:
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
U0 U1 U2 U3 V0 V1 V2 V3
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
对 V,U 分量重新编号:
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
V0 V1 V2 V3 U0 U1 U2 U3
YUV420SP 类型
YUV420SP 类型先存储所有的 Y 分量后,是按照 UV 或者 VU 的交替顺序进行存储。
NV12 和 NV21 格式都属于 YUV420SP 类型。它也是先存储了 Y 分量,但接下来并不是再存储所有的 U 或者 V 分量,而是把 UV 分量交替连续存储。
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
对 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
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
对 U,V 分量重新编号:
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15
V0 U0 V1 U1 V2 U2 V3 U3
参考资料:
维基百科-YUV
维基百科-YCbCr
百度百科-YUV
百度百科-YCbCr
一文读懂 YUV 的采样与格式
内容有误?联系作者: