YUV 和 RGB 一样,也是一种颜色编码方法,只是它们的侧重点不同。YUV 标准是根据人眼视觉系统对亮度和色度的敏感度的不同,主要侧重的是图片的亮度信息,允许适当降低图片的色度信息;而 RGB 标准则是根据人眼感光细胞对光的感知程度,侧重点在于色度信息。
三原色的原理不是出于物理原因,而是由于生理原因造成的。人的眼睛内有几种辨别颜色的锥形感光细胞,如果辨别黄色的细胞略大于辨别绿色的细胞,人的感觉是黄色;如果辨别黄绿色的细胞受到的刺激大大高于辨别绿色的细胞,人的感觉是红色。虽然三种细胞并不是分别对红色、绿色和蓝色最敏感,但这三种光可以分别对三种锥形细胞产生刺激。
由于 YUV 可以适当减少一些人眼不明感的色度信息,所以通常来说同样分辨率的图片,其 YUV 格式的存储大小相比 RGB 格式来说会少很多。因此 YUV 格式传输时占用的带宽就少,传输效率也就更高。基于这个优点,YUV 格式在无人机的图传,视频传输等用到的就比较多。
YUV常见采样率
YUV 格式也常叫 YCbCr 格式, 其中的 Y
表示亮度,UV
和 CbCr
同样都表示色度,Cb
指蓝色色度,Cr
指红色色度。
YUV 的采样率一般有如下四种:
采样格式分别如下图所示:
其中,灰色实心圆代表 Y
分量,红色空心圆代表 U
分量,蓝色空心圆代表 V
分量。
所以根据上图,可知:
YUV444
:Y分量与UV分量是在水平和垂直方向上都是 1:1 的关系,就是说一个Y分量对应一个UV分量;YUV422
:Y分量与U**和**V分量在水平方向上是 2:1 的关系,在垂直方向上是 1:1 的关系,就是说两个Y分量共用一个UV分量;YUV420
:Y分量与U**或**V分量在水平方向上是 2:1 的关系,也就是说在水平方向上,U,V是隔行采样的,第 i 上采样 U 分量,不采样 V 分量,则第 i+1 行就采样 V 分量不采样 U 分量。而在垂直方向上,Y分量与UV分量也是 2:1 的关系,就是说每四个Y分量共用一个UV分量;YUV411
:Y分量与U**和**V分量在水平和垂直方向上都是 2:1 的关系,和YUV420
一样,每四个Y分量共用一个UV分量;
YUV常见存储格式
YUV的存储格式主要有两种:
我们以常见的YUV420采样率来说明 packed 和 planar 的内存排列是什么样的。
可以看到,上图中的 packed 格式只有UV分量是交叉的,Y分量并没有和UV分量进行交叉存储;当然,Y分量也是可以和UV分量进行交叉存储,这里只是为了说明 packed 和 planar 格式内存布局之间的区别。
实际上,YUV各分量之间的排列顺序也是可以不同的,不同的排列顺序其实也对应了不同的YUV格式。所以根据不同采样率,不同存储格式,不同的组成顺序之间的组合,YUV有各种各样的格式,但其实你只要理解了YUV的采样率,存储格式后,不管那种YUV格式,对你来说应该都不是难事。
各种YUV格式
YUV有四种采样率,两种存储格式,不同的组成顺序,组合起来可以有非常多的YUV格式,这里对几种常见的格式做个总结,如下图:
Planar模式
planar模式也被称为triplanar模式,该模式对于YUV三个分量是分开存储的,也就是说,有一个表负责存储亮度分量Y的值,以及另外两个独立的表用来存储色度分量UV的值。
I420 格式
I420格式属于YUV420Planar的一种,它首先存储Y分量,然后是U分量,最后是V分量。并且其UV分量在水平和垂直方向上都是每2个像素采样一个,Y分量是每个像素都采样。也就是说,对于2x2
大小的像素方块,采样4个Y分量,但是仅采样一个UV分量。可知这四个像素块共占用4*8+8+8=48(bit)
,它的像素深度也就等于12bit。
举例说明,若是单个像素的 I420 图片,它的YUV如下(每个字母代表1bit,planar模式都一样,后面对planar模式的格式不再画此图):
同样的,对于有N个像素的 I420 图片,则如下:
I420 常用在VLC中,大多数的视频解码器输出的原始格式都是 I420 格式。J420 格式和 I420 完全一样,只是J420 的Y分量具有完整的 0-255
的范围。
YV12 格式
从上面的思维导图也可以看出来,YV12 格式其实和 I420 格式是一样的,不同的地方就是 UV 的顺序不一样,I420 是先 U 后 V,YV12 就像它名字表达的一样,“YV” 表示它们的顺序:先 Y,然后 V(最后U);“12” 表示它的像素深度是 12bit/pixel。
I422 格式
和 I420 格式一样,I422 也是先存储Y分量,然后是UV分量,但是,在 I422 格式中,其UV分量只在水平方向上是每两个像素采样一个,而在垂直方向上和Y分量是一样的。对于 2x2 大小的像素方块,采样4个Y分量,2个U分量,2个V分量,其深度 16bit/pixel
。
某些视频编解码器支持I422格式以实现更高质量的视频编码。J422 格式和 I422 完全一样,只是J422 的Y分量具有完整的 0-255
的范围。
I444 格式
和前面的 I420,I422 一样,I444 也是按 YUV 的顺序存储的,只是其UV分量的采样率在水平和垂直方向都和Y分量保持一致,也就是每4个像素采样4个Y分量,4个U分量,4个V分量。所以它的深度是 24bit/pixel
。
只有很少数的视频编码器支持 I444 格式。
YV24 格式
和前面 YV12 与 I420 格式的关系一样,YV24 格式其实和 I444 格式也完全一样,只是 YV24 格式先V后U,“24”表示它的像素深度是 24bit/pixel
。
Semi-Planar 模式
Semi-Planar模式表示亮度分量Y是单独存储的,色度分量UV是一起交叉存储的,可以是UV顺序,也可以是VU顺序。也就是说它有两个planes。
NV12/21 格式
NV12 格式也是先亮度分量Y,然后是交错的UV分量,你可以把它看成是UV分量交错存储的 I420 格式,如下图:
单像素:
N像素:
NV21格式和NV12格式是一样的,只是它们的UV顺序不同,NV21格式是先 V 后 U。
NV16/NV61 格式
NV16格式也是先亮度分量Y,然后是交错的UV分量,类比NV12和I420的关系,你可以把它看成是UV分量交错存储的 I422 格式,同样的,NV61和NV16的区别就是UV分量顺序的不同,NV61是先 V 后 U。
NV24/NV42 格式
同理,NV24 可以看成是UV分量交错存储的 I444 格式,NV42 同理。
Packed 模式
Packed模式通常只有一个plane,也就是说亮度分量Y和色度分量UV全部都是交叉存储的,packed模式在 webcams 中非常流行。对于硬件来说,使用分开的planes效率更地下:每个像素有多次内存访问。
YUVY 格式
YUVY格式就像它的名字表达的那样,按照YUVY分量的顺序存储,如下图:
VYUY 格式
VYUY格式就像它的名字表达的那样,按照VYUY分量的顺序存储,如下图:
UYVY/Y422/UYNV 格式
UYVY,Y422,UYNV 这三个名称都表示同一种格式,如下:
YUYV/YUY2/V422/YUNV 格式
YUYV,YUY2,V422,YUNV 这几个名称也表示同一中格式,如下: