YUV 像素格式
1簡(jiǎn)介
YUV是種顏色編碼方法,是彩色電視為了兼容黑白電視而發(fā)展起來(lái)的。在現(xiàn)代彩色電視系統(tǒng)中,通常采用三管彩色攝影機(jī)或彩色CCD攝影機(jī)進(jìn)行取像,然后把取得的彩色圖像信號(hào)經(jīng)分色、分別放大校正后得到RGB,再經(jīng)過(guò)矩陣變換電路得到亮度信號(hào)Y和兩個(gè)色差信號(hào)R-Y(即U)、B-Y(即V),然后對(duì)這三個(gè)信號(hào)分別進(jìn)行編碼。Y就是所謂的流明(luminance),表示光的濃度且為非線性,使用伽馬修正(gamma correction)編碼處理,而CB和CR則為藍(lán)色和紅色的濃度偏移量成份。
2 YUV采樣格式
(1) YUV 4:4:4
YUV三個(gè)信道的抽樣率相同,因此在生成的圖像里,每個(gè)象素的三個(gè)分量信息完整(每個(gè)分量通常8比特),經(jīng)過(guò)8比特量化之后,未經(jīng)壓縮的每個(gè)像素占用3個(gè)字節(jié)。
下面的四個(gè)像素為: [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
每個(gè)色差信道的抽樣率是亮度信道的一半,所以水平方向的色度抽樣率只是4:4:4的一半。對(duì)非壓縮的8比特量化的圖像來(lái)說(shuō),每個(gè)由兩個(gè)水平方向相鄰的像素組成的宏像素需要占用4字節(jié)內(nèi)存。
下面的四個(gè)像素為:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的碼流為:Y0 U0 Y1 V1 Y2 U2 Y3 V3
映射出像素點(diǎn)為:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]
(3) YUV 4:1:1
4:1:1的色度抽樣,是在水平方向上對(duì)色度進(jìn)行4:1抽樣。對(duì)于低端用戶(hù)和消費(fèi)類(lèi)產(chǎn)品這仍然是可以接受的。對(duì)非壓縮的8比特量化的視頻來(lái)說(shuō),每個(gè)由4個(gè)水平方向相鄰的像素組成的宏像素需要占用6字節(jié)內(nèi)存。
下面的四個(gè)像素為: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的碼流為: Y0 U0 Y1 Y2 V2 Y3
映射出像素點(diǎn)為:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]
(4)YUV4:2:0
4:2:0并不意味著只有Y,Cb而沒(méi)有Cr分量。它指得是對(duì)每行掃描線來(lái)說(shuō),只有一種色度分量以2:1的抽樣率存儲(chǔ)。相鄰的掃描行存儲(chǔ)不同的色度分量,也就是說(shuō),如果一行是4:2:0的話,下一行就是4:0:2,再下一行是4:2:0...以此類(lèi)推。對(duì)每個(gè)色度分量來(lái)說(shuō),水平方向和豎直方向的抽樣率都是2:1,所以可以說(shuō)色度的抽樣率是4:1。
下面八個(gè)像素為:[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
映射出的像素點(diǎn)為:[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 存儲(chǔ)格式
YUV格式分為packed格式和planar格式,packed格式會(huì)將YUV數(shù)據(jù)按順序放進(jìn)數(shù)組里,planar則分將YUV的數(shù)據(jù)分為三部分放進(jìn)數(shù)組里,即先放Y部分的數(shù)據(jù),再放U,接著是V的數(shù)據(jù)。
3.1 Packed YUV Formats
Label |
Bits per pixel |
Description |
32 |
Combined YUV and alpha | |
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. | |
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. | |
8 |
Apparently a duplicate of Y800 (and also, presumably, "Y8 ") | |
IRAW |
? |
Intel uncompressed YUV. I have no information on this format - can you help? |
16 |
Interlaced version of UYVY (line order 0, 2, 4,....,1, 3, 5....) registered by Silviu Brinzei of LEAD Technologies. | |
12 |
Interlaced version of Y41P (line order 0, 2, 4,....,1, 3, 5....) registered by Silviu Brinzei of LEAD Technologies. | |
12 |
12 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec. This is equivalent to Y411 | |
24 |
24 bit format used in mode 0 of the IEEE 1394 Digital Camera 1.04 spec | |
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). | |
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) |
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. | |
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) |
16 |
Direct copy of UYVY as used by ADS Technologies Pyro WebCam firewire camera. | |
16 |
YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel. | |
16 |
Duplicate of YUY2 | |
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. | |
16 |
YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel. | |
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. | |
12 |
YUV 4:1:1 with a packed, 6 byte/4 pixel macroblock structure. | |
8 |
Packed YUV format with Y sampled at every second pixel across each line and U and V sampled at every fourth pixel. | |
12 |
Format as for Y41P but the lsb of each Y component is used to signal pixel transparency . | |
16 |
Format as for UYVY but the lsb of each Y component is used to signal pixel transparency . | |
24? |
YCbCr 4:2:2 extended precision 10-bits per component in Y0U0Y1V0 order. Registered by Rich Ehlers of Evans & Sutherland. | |
8 |
Simple, single Y plane for monochrome images. | |
8 |
Duplicate of Y800 as far as I can see. | |
16 |
16-bit uncompressed greyscale image. |
UYVY存儲(chǔ)結(jié)構(gòu)
UYVY 是一種最常用的 YUV 4:2:2 格式,其數(shù)據(jù)排列如下:
3.2 Planar YUV Formats
Label |
Bits per pixel |
Description |
9 |
8 bit Y plane followed by 8 bit 4x4 subsampled V and U planes. Registered by Intel. | |
9? |
Registered by Intel., this is the format used internally by Indeo video code | |
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) | |
16 |
8 bit Y plane followed by 8 bit 2x1 subsampled V and U planes. | |
12 |
8 bit Y plane followed by 8 bit 2x2 subsampled V and U planes. | |
12 |
8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes. | |
12 |
Duplicate FOURCC, identical to I420. | |
12 |
8-bit Y plane followed by an interleaved U/V plane with 2x2 subsampling | |
12 |
As NV12 with U and V reversed in the interleaved plane | |
12 |
As YV12 except the U and V planes each have the same stride as the Y plane | |
12 |
Similar to IMC1 except that the U and V lines are interleaved at half stride boundaries | |
12 |
As IMC1 except that U and V are swapped | |
12 |
As IMC2 except that U and V are swapped | |
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. |
8 |
Simple, single Y plane for monochrome images. | |
8 |
Duplicate of Y800 as far as I can see. | |
12 |
Awaiting clarification of format. | |
16 |
Awaiting clarification of format. |
Y42B存儲(chǔ)結(jié)構(gòu)
YCbCr 4:2:2 的方式存儲(chǔ)
4 YUV與RGB的轉(zhuǎn)換關(guān)系
yuv422 planar to rgb565
轉(zhuǎn)換公式:
R=Y+1.4075*(V-128)
G=Y-0.3455*(U-128) - 0.7169*(V-128)
B=Y+1.779*(U-128)
為了加快運(yùn)算速度,采用下面的整形計(jì)算法:
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的數(shù)據(jù),再將rgb888轉(zhuǎn)為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;
posted on 2013-01-28 09:04 楊粼波 閱讀(2603) 評(píng)論(0) 編輯 收藏 引用