编码方式
转换
YUV与RGB的转换公式
U和V可以被表示成原始的R、G、B(R,G,B为γ预校正后的)
YUV=0.299∗R+0.587∗G+0.114∗B=−0.169∗R−0.331∗G+0.5∗B+128=0.5∗R−0.419∗G−0.081∗B+128
如一般顺序,转移元件的范围可得到
Y∈[0,255]U∈[0,255]V∈[0,255]
再逆转关系上,从YUV到RGB,可得
RGB=Y+1.13983∗(V−128)=Y−0.39465∗(U−128)−0.58060∗(V−128)=Y+2.03211∗(U−128)
取而代之,以矩阵表示法,可得到公式
YUVRGB=0.299−0.1690.50.587−0.331−0.4190.1140.5−0.081RGB+0128128=111−0.00093−0.34371.772161.401687−0.714170.00099YU−128V−128
YUV转RGB
将YUV format转换成简单的RGB format可以用浮点运算
Y’UV444
大多数YUV格式平均使用的每像素位数都少于24bit
- YUV444,一格不删,即每4个Y,配上4个U还有4个V
- YUV422则是UV格式上减半,即每4个Y,配2个U和2个V
- YUV420则是UV上减1/4,即每4个Y,配1个U和1个V
这些公式都是NTSC standard
Y′UV=0.299∗R+0.587∗G+0.114∗B=−0.147∗R−0.289∗G+0.436∗B=0.615∗R−0.515∗G−0.100∗B
在早起的非SIMD(non-SIMD)构造中,floating point arithmetic会比fixed-point arithmetic稍慢,所有一个替代公式如下:
CDE=Y′−16=U−128=V−128
使用前面的系数并且用clip()注明切割的值域是0至255,如下公式是从Y’UV到RGB(NTSC version)
R=clip((298∗C+409∗E+128)>>8)G=clip((298∗C−100∗D−208∗E+128)>>8)B=clip((298∗C+516∗D+128)>>8)
注意:上述的公式多暗示为YCbCr,虽然成为YUV,但应该严格区分YUV和YCbCr这两个专有名词有时并非完全相同
https://zh.wikipedia.org/zh-hans/YUV