YCrCb与YPrPb的含义与区别

对一种颜色进行编码的方法统称为"颜色空间""色域"RGB和YUV,都是颜色空间的种类,

Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠


分量视频信号(色差信号),通常采用YCbCrYPbPr两种标识,

YUV(YCbCr)525i/625i480i/576i)隔行分量输入接口

YPbPr是从480i720p的分量输入接口标准(不区分隔行和逐行),隔行分量端子和逐行分量端子共用,端子标识为YPbPr,无论隔行还是逐行分量信号都从这个端口输入。

Y'PbPr是为了满足高质量视频传输而设计的色彩分量形式及接口形式,采用并行传输的方式。PbPr也是由B'-Y'R'-Y'经过限幅得到的,目前,这种接口多见于模拟分量录像机、高清摄录一体机及DVD播放机等。模拟分量传输绕过了PAL编码与解码,减轻了亮/色串扰等编解码对图像的损失,但传输距离受到限制。

Y'CbCr是数字电视标准化时,为了兼容亮度、色差这种色彩编码方式而采用的一种类似于Y'PbPr的分量形式。

 

YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL)。YUV主要用于优化彩色视频信号的传输,使其向后兼容老式黑白电视。主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。与RGB视频信号传输相比,它最大的优点在于只需占用极少的带宽(RGB要求三个独立的视频信号同时传输)。

其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;

而“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

“亮度”是通过RGB输入信号来创建的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面—色调与饱和度,分别用Cr和CB来表示。其中,Cr反映了GB输入信号红色部分与RGB信号亮度值之间的差异。而CB反映的是RGB输入信号蓝色部分与RGB信号亮度值之同的差异; YUV经常有另外的名字,YCbCr ,其中Y与YUV 中的Y含义一致,Cb , Cr同样都指色彩,,只是在表示方法上不同而已,Cb Cr 就是本来理论上的“分量/色差”的标识。C代表分量(是component的缩写)Cr、Cb分别对应r(红)、b(蓝)分量信号,Y除了g(绿)分量信号,还叠加了亮度信号。

以下是标准公式

RGB 转换成 YUV

Y      = (0.257 * R) + (0.504 * G) + (0.098 * B) +16

Cr    = V =(0.439 * R) -  (0.368 * G) - (0.071 * B) +128

Cb   = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

YUV 转换成 RGB

B =1.164(Y - 16) + 2.018(U - 128)

G =1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)

R =1.164(Y - 16) + 1.596(V - 128)

RGB取值范围均为0~255,Y=0~255,U=-122~+122,V=-157~+157

以下是经过简化的公式,运算量比上述公式要小一些。

RGB转YUV

Y =0.299R + 0.587G + 0.114B

U'=(BY)*0.565

V'=(RY)*0.713

YUVRGB

R = Y+ 1.403V'

G = Y- 0.344U' - 0.714V'

B = Y+ 1.770U'


YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0;

用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。


先记住下面这段话,以后提取每个像素的YUV分量会用到。

YUV4:4:4采样,每一个Y对应一组UV分量

YUV4:2:2采样,每两个Y共用一组UV分量

YUV4:2:0采样,每四个Y共用一组UV分量

4:4:4 表示色度值(UV)没有减少采样。即Y,U,V各占一个字节,加上Alpha通道一个字节,总共占4字节.这个格式其实就是24bppRGB格式了。

4:2:2 表示UV分量采样减半,比如第一个像素采样Y,U,第二个像素采样Y,V,依次类推,这样每个点占用2个字节.二个像素组成一个宏像素.

4:2:0  这种采样并不意味着只有YCb而没有Cr分量,这里的0说的UV分量隔行才采样一次。比如第一行采样 4:2:0 ,第二行采样 4:0:2 ,依次类推...在这种采样方式下,每一个像素占用16bits10bits空间.

4:1:1 可以参考4:2:2分量,是进一步压缩,每隔四个点才采一次UV分量。一般是第0点采Y,U,1点采Y,3点采YV,第四点采Y,依次类推。



下面我用图的形式给出常见的YUV码流的存储方式,并在存储方式后面附有取样每个像素点的YUV数据的方法,其中,CbCr的含义等同于UV


YUYV格式


YUYV为YUV422采样的存储格式中的一种,相邻的两个Y共用其相邻的两个Cb、Cr,分析,对于像素点Y'00、Y'01 而言,其Cb、Cr的值均为 Cb00、Cr00,其他的像素点的YUV取值依次类推。


UYVY格式

UYVY格式也是YUV422采样的存储格式中的一种,只不过与YUYV不同的是UV的排列顺序不一样而已,还原其每个像素点的YUV值的方法与上面一样。


YUV422P格式

YUV422P也属于YUV422的一种,它是一种Plane模式,即打包模式,并不是将YUV数据交错存储,而是先存放所有的Y分量,然后存储所有的UCb)分量,最后存储所有的VCr)分量,如上图所示。其每一个像素点的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即两个Y共用一个UV。比如,对于像素点Y'00Y'01而言,其CbCr的值均为 Cb00Cr00


YV12,YU12格式

YU12YV12属于YUV420格式,也是一种Plane模式,将YUV分量分别打包,依次存储。其每一个像素点的YUV数据提取遵循YUV420格式的提取方式,即4Y分量共用一组UV。注意,上图中,Y'00Y'01Y'10Y'11共用Cr00Cb00,其他依次类推。


NV12,NV21格式

NV12NV21属于YUV420格式,是一种two-plane模式,即YUV分为两个Plane,但是UVCbCr)为交错存储,而不是分为三个plane。其提取方式与上一种类似,即Y'00Y'01Y'10Y'11共用Cr00Cb00


I420格式

I420就是YUV420P格式;存储方式参考YUV422P;

一般来说,直接采集到的视频数据是RGB24的格式,RGB24一帧的大小size=width×heigth×3 Bit,RGB32的size=width×heigth×4,如果是I420(即YUV标准格式4:2:0)的数据量是 size=width×heigth×1.5 Bit。

在采集到RGB24数据后,需要对这个格式的数据进行第一次压缩。即将图像的颜色空间由RGB2YUV。因为X264在进行编码的时候需要标准的YUV420。但是这里需要注意的是,虽然YV12也是(4:2:0),但是YV12和I420的却是不同的,在存储空间上面有些区别。如下:

YV12:亮度(行×列)+U(行×列/4) +V(行×列/4)

I420亮度(行×列)+V(行×列/4) +U(行×列/4)

可以看出,YV12和I420基本上是一样的,就是UV的顺序不同。

YUV420 planar数据,以720×488大小图象YUV420 planar为例,其存储格式是:共大小为(720×480×3>>1)字节,

分为三个部分:Y,U和V

Y分量:    (720×480)个字节

U(Cb)分量:(720×480>>2)个字节

V(Cr)分量:(720×480>>2)个字节

三个部分内部均是行优先存储,三个部分之间是Y,U,V 顺序存储。即YUV数据的

0 - 720×480字节是Y分量值,        

720×480 - 720×480×5/4字节是U分量   

720×480×5/4 - 720×480×3/2字节是V分量。

4:2:2 4:2:0 转换:

最简单的方式:

YUV4:2:2 --->YUV4:2:0  Y不变,将U和V信号值在行(垂直方向)在进行一次隔行抽样。 YUV4:2:0 --->YUV4:2:2  Y不变,将U和V信号值的每一行分别拷贝一份形成连续两行数据。

发布了137 篇原创文章 · 获赞 22 · 访问量 12万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章