|
楼主 |
发表于 2007-11-16 16:22:01
|
显示全部楼层
YUV图象存储机制:
Y:U:V=8:4:4
Y: 占用1个字节(8bit)
U,V: 每2个象素占用1个字节(8bit),及每个象素占4bit
Y:U:V=8:2:2
Y: 占用1个字节(8bit)
U,V: 每4个象素占用1个字节(8bit),及每个象素占2bit
用解码器对该文件(clock.mpg)解压后产生的"YUV"目标码文件的说明:
Y文件的长度为:84,480 BYTE
U,V文件的长度分别为:21,120 BYTE
84480/21120=4
对该组YUV文件可得出结论:Y:U:V=8:2:2
RGB图象存储机制:
R:表示红色信息,占用1个字节(8bit)
G:表示绿色信息,占用1个字节(8bit)
B:表示蓝色信息,占用1个字节(8bit)
R:G:B = 8:8:8
YUV与RGB图象之间的变换关系:
Y= 0.2990R+0.5870G+0.1140B
U=-0.1687R-0.3313G+0.5000B + 128
V= 0.5000R-0.4187G-0.0813B + 128
反变换关系:
R= 1.0Y + 0 +1.402 (V-128)
G= 1.0Y - 0.34413(U-128)-0.71414(V-128)
B= 1.0Y + 1.772 (U-128)+0
另一种变换关系:
Y = <(R + 2G + B)/4>
U = R - G
V = B - G
反变换:
G = Y - <(U +V)/4>
R = U + G
B = V + G
说明:式中<W>表示<=W的最大整数
以前曾见看过这类的文章,
下面是他们的转换公式。
Y = 0.299 R + 0.587 G + 0.114 B
U = - 0.1687 R - 0.3313 G + 0.5 B + 128
V = 0.5 R - 0.4187 G - 0.0813 B + 128
R = Y + 1.402 (V - 128)
G = Y - 0.34414 (U - 128) - 0.71414 (V - 128)
B = Y + 1.772 (U - 128)
YUV的颜色空间和RGB的颜色空间范围有些差异,而且YUV色系的颜色不是线性变化的,实际处理上有很多麻烦的地方。
对于很大的图或者视频流用上面的转换公式速度会很慢,我没有分析过解霸,但是他曾经说过每个bit是2个时钟周期,我想他利用的一定是查表法。
不然当年的486下不可能那么流畅。
由于在"Y文件"中,一个象素占一个BYTE,所以一帧数据应该是:352*240=84480 BYTE
在"U,V"文件中,每四个象素占一个BYTE,所以一帧数据的长度因该是:352*240/4=21120 BYTE
[br]<p align=right><font color=red>+5 RD币</font></p> |
|