注:本文讲述的格式全部使用每个像素位置8位的方式来编码Y频道,并使用每样例8位的方式来编码每个U或V色度样例。但是,大多数YUV格式平均使用的每像素位数都少于24位,这是因为它们包含的U和V样例比Y样例要少。
更多资料:
http://www.360doc.com/content/09/0223/15/59579_2623401.shtml
http://blog.csdn.net/fyang2007/archive/2009/08/21/4470078.aspx
1简介
RGB是按三基色加光系统的原理来描述颜色,而YUV则是按照亮度,色差的原理来描述颜色。
其中YCbCr 则是在世界数字组织视频标准研制过程中作为ITU - R BT1601 建议的一部分, 其实是YUV经过缩放和偏移的翻版。其中Y与YUV 中的Y含义一致, Cb , Cr 同样都指色彩, 只是在表示方法上不同而已。在YUV 家族中, YCbCr 是在计算机系统中应用最多的成员, 其应用领域很广泛,JPEG、MPEG均采用此格式。一般人们所讲的YUV大多是指YCbCr。YCbCr 有许多取样格式, 如4∶4∶4 , 4∶2∶2 , 4∶1∶1 和4∶2∶0。
2 YUV采样
YUV的优点之一是,色度频道的采样率可比Y通道低,同时不会明显降低视觉质量。有一种表示法可用来描述Y、U、V的采样频率比例,为A:B:C。
l 4:4:4表示色度频道没有下采样。每像素32位。
l 4:2:2表示2:1的水平下采样,没有垂直下采样。对于每两个U样例或V样例,每个扫描行都包含四个Y样例。每像素16位。
l 4:2:0表示2:1的水平下采样和2:1的垂直下采样。每像素16位or每像素12位。
l 4:1:1表示4:1的水平下采样。此格式不常用。
YUV格式分为打包格式和平面格式。在打包格式中,YUV足见存储在一个数组中。像素被组织到了一些巨像素组中,巨像素组的布局取决于格式。在平面格式中,三者则是作为三个单独的平面进行存储。
2.1 4:4:4格式,每像素32位
这是一个打包格式。其中每个像素都被编码为四个连续字节,如fourcc码的AYUV,其组织顺序如下所示。其中A的字节包含了alpha的值。
示例:
下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的码流为: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
2.2 4:2:2格式,每像素16位
支持两个4:2:2格式,fourcc码如下:
l YUY2
l UYVY
两个都是打包格式,其中每个巨像素都是编码为四个连续字节的两个像素。这样会使得色度水平采样乘以系数2。
YUY2
UYVY
示例:
下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的码流为: Y0 U0 Y1 V1 Y2 U2 Y3 V3
映射出像素点为:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]
2.3 4:2:0格式,每像素16位
IMC1
IMC3
示例:
下面八个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
[Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]
存放的码流为:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8
映射出的像素点为:[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]
[Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]
3 YUV444 to RGB24
这里只讨论YUV4:4:4与RGB24之间的转换。要将4:2:0或4:2:2YUV转换为RGB,建议先将YUV数据转换为4:4:YUV,然后再转换为RGB。
转换公式:
Clip()表示剪辑到(0,255)中。