YUV 像素格式

 

 1简介

YUV是种颜色编码方法,是彩色电视为了兼容黑白电视而发展起来的。在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即U)、B-Y(即V),然后对这三个信号分别进行编码。Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理,而CB和CR则为蓝色和红色的浓度偏移量成份。

 YUV 像素格式_第1张图片

2 YUV采样格式

  (1) YUV 4:4:4

  YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节。

  下面的四个像素为: [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) YUV 4:2:2

  每个色差信道的抽样率是亮度信道的一半,所以水平方向的色度抽样率只是4:4:4的一半。对非压缩的8比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用4字节内存。

  下面的四个像素为:[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]

  (3) YUV 4:1:1

  4:1:1的色度抽样,是在水平方向上对色度进行4:1抽样。对于低端用户和消费类产品这仍然是可以接受的。对非压缩的8比特量化的视频来说,每个由4个水平方向相邻的像素组成的宏像素需要占用6字节内存。

  下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  存放的码流为: Y0 U0 Y1 Y2 V2 Y3

  映射出像素点为:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]

  (4)YUV4:2:0

  4:2:0并不意味着只有Y,Cb而没有Cr分量。它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是2:1,所以可以说色度的抽样率是4:1。

  下面八个像素为:[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 YUV 存储格式

YUV格式分为packed格式和planar格式,packed格式会将YUV数据按顺序放进数组里,planar则分将YUV的数据分为三部分放进数组里,即先放Y部分的数据,再放U,接着是V的数据。

3.1 Packed YUV Formats

Label

Bits per pixel

Description

AYUV

32

Combined YUV and alpha

CLJR

8

Cirrus Logic format with 4 pixels packed into a u_int32. A form of YUV 4:1:1 wiht less than 8 bits per Y, U and V sample.

cyuv

16

Essentially a copy of UYVY except that the sense of the height is reversed - the image is upside down with respect to the UYVY version.

GREY

8

Apparently a duplicate of Y800 (and also, presumably, "Y8  ")

IRAW

?

Intel uncompressed YUV. I have no information on this format - can you help?

IUYV

16

Interlaced version of UYVY (line order 0, 2, 4,....,1, 3, 5....) registered by Silviu Brinzei of LEAD Technologies.

IY41

12

Interlaced version of Y41P (line order 0, 2, 4,....,1, 3, 5....) registered by Silviu Brinzei of LEAD Technologies.

IYU1

12

12 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec. This is equivalent to Y411

IYU2

24

24 bit format used in mode 0 of the IEEE 1394 Digital Camera 1.04 spec

HDYC

16

YUV 4:2:2 (Y sample at every pixel, U and V sampled at every second pixel horizontally on each line). A macropixel contains 2 pixels in 1 u_int32. This is a suplicate of UYVY except that the color components use the BT709 color space (as used in HD video).

UYNV

16

A direct copy of UYVY registered by NVidia to work around problems in some old codecs which did not like hardware which offered more than 2 UYVY surfaces.

UYVP

24?

YCbCr 4:2:2 extended precision 10-bits per component in U0Y0V0Y1 order. Registered by Rich Ehlers of Evans & Sutherland. (Awaiting confirmation of component packing structure)

UYVY

16

YUV 4:2:2 (Y sample at every pixel, U and V sampled at every second pixel horizontally on each line). A macropixel contains 2 pixels in 1 u_int32.

V210

32

10-bit 4:2:2 YCrCb equivalent to the Quicktime format of the same name.

V422

16

I am told that this is an upside down version of UYVY.

V655

16?

16 bit YUV 4:2:2 format registered by Vitec Multimedia. I have no information on the component ordering or packing.

VYUY

?

ATI Packed YUV Data (format unknown but you can get hold of a codec supporting ithere)

Y422

16

Direct copy of UYVY as used by ADS Technologies Pyro WebCam firewire camera.

YUY2

16

YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel.

YUYV

16

Duplicate of YUY2

YUNV

16

A direct copy of YUY2 registered by NVidia to work around problems in some old codecs which did not like hardware which offered more than 2 YUY2 surfaces.

YVYU

16

YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel.

Y41P

12

YUV 4:1:1 (Y sample at every pixel, U and V sampled at every fourth pixel horizontally on each line). A macropixel contains 8 pixels in 3 u_int32s.

Y411

12

YUV 4:1:1 with a packed, 6 byte/4 pixel macroblock structure.

Y211

8

Packed YUV format with Y sampled at every second pixel across each line and U and V sampled at every fourth pixel.

Y41T

12

Format as for Y41P but the lsb of each Y component is used to signal pixel transparency .

Y42T

16

Format as for UYVY but the lsb of each Y component is used to signal pixel transparency .

YUVP

24?

YCbCr 4:2:2 extended precision 10-bits per component in Y0U0Y1V0 order. Registered by Rich Ehlers of Evans & Sutherland.

Y800

8

Simple, single Y plane for monochrome images.

Y8

8

Duplicate of Y800 as far as I can see.

Y16

16

16-bit uncompressed greyscale image.

 UYVY存储结构

UYVY 是一种最常用的 YUV 4:2:2 格式,其数据排列如下:

  YUV 像素格式_第2张图片

3.2 Planar YUV Formats

Label

Bits per pixel

Description

YVU9

9

8 bit Y plane followed by 8 bit 4x4 subsampled V and U planes. Registered by Intel.

YUV9

9?

Registered by Intel., this is the format used internally by Indeo video code

IF09

9.5

As YVU9 but an additional 4x4 subsampled plane is appended containing delta information relative to the last frame. (Bpp is reported as 9)

YV16

16

8 bit Y plane followed by 8 bit 2x1 subsampled V and U planes.

YV12

12

8 bit Y plane followed by 8 bit 2x2 subsampled V and U planes.

I420

12

8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes.

IYUV

12

Duplicate FOURCC, identical to I420.

NV12

12

8-bit Y plane followed by an interleaved U/V plane with 2x2 subsampling

NV21

12

As NV12 with U and V reversed in the interleaved plane

IMC1

12

As YV12 except the U and V planes each have the same stride as the Y plane

IMC2

12

Similar to IMC1 except that the U and V lines are interleaved at half stride boundaries

IMC3

12

As IMC1 except that U and V are swapped

IMC4

12

As IMC2 except that U and V are swapped

CLPL

12

Format similar to YV12 but including a level of indirection.

Y41B

12?

Weitek format listed as "YUV 4:1:1 planar". I have no other information on this format.

Y42B

16?

Weitek format listed as "YUV 4:2:2 planar". I have no other information on this format.

Y800

8

Simple, single Y plane for monochrome images.

Y8

8

Duplicate of Y800 as far as I can see.

CXY1

12

Awaiting clarification of format.

CXY2

16

Awaiting clarification of format.

Y42B存储结构

YCbCr 4:2:2 的方式存储

YUV 像素格式_第3张图片

 4 YUVRGB的转换关系

yuv422 planar to rgb565
转换公式:
R=Y+1.4075*(V-128)
G=Y-0.3455*(U-128) - 0.7169*(V-128)
B=Y+1.779*(U-128)
为了加快运算速度,采用下面的整形计算法:
u = YUVdata[UPOS] - 128;
v = YUVdata[VPOS] - 128;

rdif = v + ((v * 103) >> 8);
invgdif = ((u * 88) >> 8) +((v * 183) >> 8);
bdif = u +( (u*198) >> 8);

r = YUVdata[YPOS] + rdif;
g = YUVdata[YPOS] - invgdif;
b = YUVdata[YPOS] + bdif;
r=r>255?:255:(r<0:?0:r);
g=g>255?:255:(g<0:?0:g);
b=b>255?:255:(b<0:?0:b);
以上得到的是rgb888的数据,再将rgb888转为rgb555
RGBdata[1] =( (r & 0xF8) | ( g >> 5) );
RGBdata[0] =( ((g & 0x1C) << 3) | ( b >> 3) );
YUV422 Planar  FORMAT size:
size=width*height*2;
YSIZE = size/2;
USIZE = size/4;
VSIZE = size/4;
YPOS=0;
UPOS=YPOS + size/2;
VPOS=UPOS + size/4;

你可能感兴趣的:(c,算法,存储,产品)