什么是YUV
YUV也叫YCbCr模型,是相对于RGB模型的一种广泛使用的颜色表示模型,YUV格式是1938年由一个法国通信工程师M. Georges Valensi发明的。
YUV中的Y表示亮度luminance,UV表示色度chrominance;
我们知道人眼是个复杂的器官,有许多部分组成,但我们最感兴趣的是视锥细胞和视杆细胞。眼睛有1.2亿个视杆细胞和6百万个视锥细胞。让我们把颜色和亮度放在眼睛的功能部位上。视杆细胞主要负责亮度,而视锥细胞负责颜色,有三种类型的视锥,每个都有不同的颜料,叫做:S-视锥(蓝色),M-视锥(绿色),L-视锥(红色)。既然我们的视杆细胞(亮度)比视锥细胞多很多,一个合理的推断是相比颜色,我们有更好的能力去区分黑暗和光亮。
一旦我们知道我们对亮度(图像中的亮度)更敏感,我们就可以利用它,这样另一种模型被发明出来,能将亮度(光亮)和色度(颜色)分离开,它被称为 YCbCr*,也就是我们熟知的的YUV。
为什么用YUV
YUV主要是解决了两个问题,导致其被广泛运用。
1.YUV 可以完美兼容黑白电视机,黑白电视收到YUV信号时只需要丢掉UV显示Y即可。全球两大主要的电视广播制式(PAL/NTSC)都使用YUV作为信号传输格式。
2.YUV采样可以大大的节约存储空间和传输带宽。并且不会造成太多的信息丢失。如使用YUV420采样相较于RGB可以节约1/2的存储空间。
采样分类
-
4:4:4表示完全取样。
-
4:2:2表示2:1的水平取样,垂直完全采样。
-
4:2:0表示2:1的水平取样,垂直2:1采样。
-
4:1:1表示4:1的水平取样,垂直完全采样。
未采样前:
第一行四个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
第二行四个像素为:[Y4 U4 V4] [Y5 U5 V5] [Y6 U6 V6] [Y7 U7 V7]
4:2:0 采样
它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。
相邻的扫描行存储不同的色度分量, 也就是说,如果一行是4:2:0的话,下一行就是4:0:2
第一行采样像素为:[Y0 U0 ] [Y1 ] [Y2 U2 ] [Y3 ]
第二行采样像素为:[Y4 V4] [Y5 ] [Y6 V6] [Y7 ]
映射的像素: [Y0 U0 V4] [Y1 U0 V4] [Y2 U2 V6] [Y3 U2 V6]
[Y4 U0 V4] [Y5 U0 V4] [Y6 U2 V6] [Y7 U2 V6]
4:1:1 采样
在水平方向上对色度进行4:1抽样
第一行采样像素为:[Y0 U0 ] [Y1 ] [Y2 V2 [Y3 ]
映射的像素: [Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]
存储格式
YUV 在存储上通常分为平面格式(Planar
),半平面格式(Semi-Planar
)以及打包格式(Packed
)。
平面格式
平面格式有时也称为三面格式(Triplanar
),即 Y, U, V 三个分量各自使用单独的数组保存,这种三平面分离的格式比较方便视频编码。
半平面格式
半平面格式有两个平面而不是三个,一个平面用于亮度,一个平面用于两个色度分量。它们有时也被称为双平面格式。
打包格式
在打包格式中,通常只有一个平面,所有亮度和色度数据交错。这类似于 RGB 像素格式,只是使用不同的颜色空间。
打包格式在网络摄像头中非常流行。在硬件中,使用单独的平面效率低下:每个像素需要多次内存访问。打包格式更容易,因此使用起来更便宜。
另一方面,数据包格式通常无法处理垂直子采样。否则,扫描线将具有不同的大小。因此,通常,打包格式是水平子采样的,尤其是 2 倍(即 YUV 4:2:2)。
存储格式 | 采样形式 | 格式名称 | 格式说明 | 第一平面 | 第二平面 | 第三平面 |
---|---|---|---|---|---|---|
Planar | YUV 4:2:0 | I420/YU2 | 12bits per Pixel 3planars | YYYY... | U... | V... |
Planar | YUV 4:2:0 | J420 | 于I420存储相同,但具有完整范围(0-255,full range)的亮度(Y)分量,而不是有限范围(16-240,limited range,在 iOS 上也叫做 video range) | YYYY... | U... | V... |
Planar | YUV 4:2:0 | YV12 | 改变UV存储顺序 | YYYY... | V... | U... |
Planar | YUV 4:2:0 | IMC1 | 16 Bits per Pixel 3 Planars | YYYY... | V... | U... |
Planar | YUV 4:2:0 | IMC3 | 16 Bits per Pixel 3 Planars | YYYY... | U... | V... |
Planar | YUV 4:2:2 | I422 | 16 Bits per Pixel 3 Planars | YYYY... | UU... | VV... |
Planar | YUV 4:2:2 | J422 | 与I422相同,但具有完整范围(0-255,full range)的亮度(Y)分量,而不是有限范围(16-240,limited range,在 iOS 上也叫做 video range) | YYYY... | UU... | VV... |
Planar | YUV 4:4:4 | I444 | 24 Bits per Pixel 3 Planars | YYYY... | UUUU... | VVVV... |
Semi-Planar | YUV 4:2:0 | NV12 | 12 Bits per Pixel 2 Planars | YYYY... | UV... | |
Semi-Planar | YUV 4:2:0 | NV21 | 12 Bits per Pixel 2 Planars | YYYY... | VU... | |
Packed | YUV 4:2:2 | YUYV (V422 / YUY2 / YUNV) | 16 Bits per Pixel 1 Planars | YUYV YUYV YUYV ... | ||
Packed | YUV 4:2:2 | YVYU | 16 Bits per Pixel 1 Planars | YVYU YVYU YVYU ... | ||
Packed | YUV 4:2:2 | UYVY(Y422 / UYNV) | 16 Bits per Pixel 1 Planars | UYVY UVUY UVUY ... | ||
Packed | YUV 4:4:4 | AYUV | 24 Bits per Pixel 1 Planars A 指 alpha 通道 | VUYA VYUA VYUA ... |
1.为什么系数有变化?
由RGB计算YUV的系数有非常多种版本:BT601、BT709、BT2020、甚至PAL、NTSC等,都规定了不同版本的加权系数,上表只标明了BT601和BT709的。
2.YUV和YCbCr什么关系?
以前YUV特指模拟信号,YCbCr特指数字信号;但现在说法已经没有那么严格,基本可以等同了
3.为什么Y的取值范围是16~235?
为了规避吉布斯现象。YUV的取值范围有以下两种,适用于不同的传输方式:
Studio swing/TV levels:用于电视广播传输,Y的范围是16~235,UV范围是16~240。传输时由于频域可能丢失或截断,接收端的空域像素值会失真,出现吉布斯现象。失真与原始空域信号的最大差值为8.9%,因此传输端将有效信号值限制在一定范围内,避免接受端产生小于0或大于255的无效值。 注:(255-235)/(235-16)=9.1%,16/(235-16)=7.3%
转换
RGB 与 YUV 转换
4:2:0与4:2:2转换
最简单的方式:
YUV4:2:2 —> YUV4:2:0 Y不变,将U和V信号值在行(垂直方向)在进行一次隔行抽样。
YUV4:2:0 —> YUV4:2:2 Y不变,将U和V信号值的每一行分别拷贝一份形成连续两行数据。
(5条消息) 详解 YUV 格式(I420/YUV420/NV12/NV12/YUV422)_yuv格式_2012newborn的博客-CSDN博客
图文详解YUV420 数据格式 | Technology Blog (markrepo.github.io)
(2条消息) RGB与YUV的来源_有了rgb ,为何引入yuv__沥川往事的博客-CSDN博客
图文详解YUV420 数据格式 | Technology Blog (markrepo.github.io)
(4条消息) YUV RGB 相互转换矩阵_yuv与rgb的转换矩阵_xhh-cy的博客-CSDN博客