YUV

来源:互联网 发布:瓦房店淘宝客服招聘 编辑:程序博客网 时间:2024/05/16 14:00

YUV格式的出现为了使视频信号的传输向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和CB来表示。其中,Cr反映了GB输入信号红色部分与RGB信号亮度值之间的差异。而CB反映的是RGB输入信号蓝色部分与RGB信号亮度值之同的差异。

采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。

YUV与RGB相互转换的公式如下(RGB取值范围均为0-255)︰

Y = 0.299R + 0.587G + 0.114B
        U = -0.147R - 0.289G + 0.436B
        V = 0.615R - 0.515G - 0.100B
        R = Y + 1.14V
        G = Y - 0.39U - 0.58V
        B = Y + 2.03

YUV格式通常有两大类:打包(packed)格式和平面(planar)格式。前者将YUV分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel);而后者使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。表2.3中的YUY2到Y211都是打包格式,而IF09到YVU9都是平面格式。(注意:在介绍各种具体格式时,YUV各分量都会带有下标,如Y0、U0、V0表示第一个像素的YUV分量,Y1、U1、V1表示第二个像素的YUV分量,以此类推。)

¨ YUY2(和YUYV)格式为每个像素保留Y分量,而UV分量在水平方向上每两个像素采样一次。一个宏像素为4个字节,实际表示2个像素。(4:2:2的意思为一个宏像素中有4个Y分量、2个U分量和2个V分量。)图像数据中YUV分量排列顺序如下:

Y0 U0 Y1 V0 Y2 U2 Y3 V2 …) v;

¨ YVYU格式跟YUY2类似,只是图像数据中YUV分量的排列顺序有所不同:

Y0 V0 Y1 U0 Y2 V2 Y3 U2 …

¨ UYVY格式跟YUY2类似,只是图像数据中YUV分量的排列顺序有所不同:

U0 Y0 V0 Y1 U2 Y2 V2 Y3 …

¨ AYUV格式带有一个Alpha通道,并且为每个像素都提取YUV分量,图像数据格式如下:

A0 Y0 U0 V0 A1 Y1 U1 V1 …

¨ Y41P(和Y411)格式为每个像素保留Y分量,而UV分量在水平方向上每4个像素采样一次。一个宏像素为12个字节,实际表示8个像素。图像数据中YUV分量排列顺序如下:

U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y8 …

¨ Y211格式在水平方向上Y分量每2个像素采样一次,而UV分量每4个像素采样一次。一个宏像素为4个字节,实际表示4个像素。图像数据中YUV分量排列顺序如下:

Y0 U0 Y2 V0 Y4 U4 Y6 V4 …

¨ YVU9格式为每个像素都提取Y分量,而在UV分量的提取时,首先将图像分成若干个4 x 4的宏块,然后每个宏块提取一个U分量和一个V分量。图像数据存储时,首先是整幅图像的Y分量数组,然后就跟着U分量数组,以及V分量数组。IF09格式与YVU9类似。

¨ IYUV格式为每个像素都提取Y分量,而在UV分量的提取时,首先将图像分成若干个2 x 2的宏块,然后每个宏块提取一个U分量和一个V分量。YV12格式与IYUV类似。

¨ YUV411、YUV420格式多见于DV数据中,前者用于NTSC制,后者用于PAL制。YUV411为每个像素都提取Y分量,而UV分量在水平方向上每4个像素采样一次。YUV420并非V分量采样为0,而是跟YUV411相比,在水平方向上提高一倍色差采样频率,在垂直方向上以U/V间隔的方式减小一半色差采样。

数码图像以色差端子来说,分为3个部分,Y,Cb,Cr(Y,U,V),而我们对这三个部分中的亮度最为敏感,为了减小这种图片或视频的大小,人们就用了偷工减料的方法,将U,V减少,达到减小存储的空间.常见的YUV格式为YUV422,YUV420,YUV444;YUV格式通常有两大类:打包(packed)格式和平面(planar)格式。前者将YUV分量存放在同一个数组中(就是数组中yuv混合存放),通常是几个相邻的像素组成一个宏像素(macro-pixel);而planar模式使用三个数组分开存放YUV三个分量,如先存放Y,再存U再存V;

1)YUV444格式是完全没有删减最逼真的格式,每4个Y,配有4个V,4个U.每个pixel 32bit

YUV图像格式 - herbertbt - herbertbt的博客
 

2)YUV422格式则是UV减半的格式,既是4个Y搭2个U两个V。每个pixel 16bit

 2-1 YUV2

如下YUV2格式中,数据可被视为一个不带正负号的 char 值组成的数组,其中第一个字节包含第一个 Y 样例,第二个字节包含第一个 U (Cb) 样例,第三个字节包含第二个 Y 样例,第四个字节包含第一个 V (Cr) 样例

YUV图像格式 - herbertbt - herbertbt的博客
 

2-2 UYVY

此格式与 YUY2 相同,只是字节顺序是与之相反的 — 就是说,色度字节和灯光字节是翻转的(图 7)。如果该图像被看作由两个 little-endian WORD 值组成的数组,则第一个 WORD 在 LSB 中包含 U,在 MSB 中包含 Y0,第二个 WORD 在 LSB 中包含 V,在 MSB 中包含 Y1。


3)YUV420格式则是UV减为1/4的格式,既是4个Y搭1个V,1个U,一般为16位或12位.


YUV2:这个格式又被写为YUYV,属于YUV422的一种

这里使用的是YUV2格式,像素数据的使用packed模式打包的,意思就是所有的Y/U/V数据都在一个数组内存储。存储的格式如下面的简图所示:

Y0U0Y1V0Y2U2Y3V2Y4U4Y5V4…

如上图所示,Y0-U0-Y1-V0是一个宏像素,但是其中缺少U1和V1,这就是YUV422的原理,对于四个像素,只采样其中的两个像素的U和 V,这里是采样了偶数下标像素的U和V,所以需要用相邻的像素中的U和V来补全单数下标像素的U和V。这里简单的采用相邻补全的算法。既U1和V1将由 U0/U2和V0/V2的和的均值补全。采用这种算法速度很快,简单,但将丢失图像列上的U/V信息。

所以

单数下标的U/V的公式如下:

U1 = (U0+U2)/2
V1 = (V0+V2)/2

对于边界的处理,既每一行的最后一个像素的U和V,则直接取前一个像素的U,V


原创粉丝点击