本文参考下面两处资料整理而成:
http://blog.sina.com.cn/s/blog_5713096b0100059i.html
http://www.fourcc.org/fccyvrgb.php
--------------------------------------------------------------------------------------------------------------------------------
先区分一下YUV和YCbCr
YUV色彩模型来源于RGB模型,该模型的特点是将亮度和色度分离开,从而适合于图像处理领域。
应用:模拟领域
Y'= 0.299*R' + 0.587*G' + 0.114*B'
U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y')
V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y')
R' = Y' + 1.140*V'
G' = Y' - 0.394*U' - 0.581*V'
B' = Y' + 2.032*U'
YCbCr模型来源于YUV模型。YCbCr是 YUV 颜色空间的偏移版本
应用:数字视频,ITU-R BT.601建议
Y' = 0.257*R' + 0.504*G' + 0.098*B' + 16
Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128
Cr' = 0.439*R' - 0.368*G' - 0.071*B' + 128
R' = 1.164*(Y'-16) + 1.596*(Cr'-128)
G' = 1.164*(Y'-16) - 0.392*(Cb'-128) - 0.813*(Cr'-128)
B' = 1.164*(Y'-16) + 2.017*(Cb'-128)
PS: 上面各个符号都带了一撇,表示该符号在原值基础上进行了伽马校正,伽马校正有助于弥补在抗锯齿的过程中,线性分配伽马值所带来的细节损失,使图像细节更加丰富。在没有采用伽马校正的情况下,暗部细节不容易显现出来,而采用了这一图像增强技术以后,图像的层次更加明晰了。
所以说H264里面的YUV应属于YCbCr
实际计算应以下面的关系为准:
RGB to YUV Conversion
Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128
Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
YUV to RGB Conversion
R = 1.164*(Y - 16) + 1.596*(V - 128)
G = 1.164*(Y - 16) - 0.391*(U - 128) - 0.813*(V - 128)
B = 1.164*(Y - 16) + 2.018*(U - 128)
在matlab里输入
>> A=[0.257,0.504,0.098;-0.148,-0.291,0.439;0.439,-0.368,-0.071]
A =
0.2570 0.5040 0.0980
-0.1480 -0.2910 0.4390
0.4390 -0.3680 -0.0710
>> A^-1
ans =
1.1641 -0.0018 1.5958
1.1641 -0.3914 -0.8135
1.1641 2.0178 -0.0012
这是矩阵逆变换后的值,舍去比较小的系数,得到上面的关系。