1. 程式人生 > >影象RGB2YUV與YUV2RGB格式互轉介紹

影象RGB2YUV與YUV2RGB格式互轉介紹

1 YUV格式與RGB格式說明

  由於不同國家的電視訊號系統支援的影象格式不同,有YUV格式成像,也有RGB格式成像,因此為了保證相容性,需要進行RGB與YUV格式的互轉。

另外YUV格式具有亮度資訊和色彩資訊分離的特點,但大多數影象處理操作都是基於RGB格式,需要將RGB格式轉為YUV格式。而當影象進行後期顯示時,又需要將YUV轉換為RGB域。

2 RGB格式轉為YUV格式轉換公式

  

d3d中shader轉換矩陣:

float4x4 matr2y = {
        0.299000f,    -0.169000f,    0.500000f,    0.000000f,
        0.587000f,    -0.33100f,    -0.419000f,    0.000000f,
        0.114000f,    0.500000f,    -0.081000f,    0.000000f,
        0.000000f,    0.000000f,    0.000000f,    0.000000f };

  將上述矩陣乘法展開,YUV(256 級別) 可以從8位 RGB 直接計算如下:

  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 

3 YUV格式轉為RGB格式轉換公式

  

D3D中shader轉換矩陣:

float4x4 maty2r = {
        1.000000f,    1.000000f,    1.000000f,    0.000000f,
        0.000000f,    -0.34414f,    1.177200f,    0.000000f,
        1.402000f,    -0.71414f,    0.000000f,    0.000000f,
        0.000000f,    0.000000f,    0.000000f,    0.000000f };

  將上述矩陣乘法展開,8位RGB可以從YUV(256級別) 直接計算如下:

  R = Y + 1.402 (V-128)

  G = Y - 0.34414 (U-128) - 0.71414 (V-128)

  B = Y + 1.772 (U-128)

4 RGB格式轉為YCbCr格式轉換公式

  YCbCr格式是基於YUV格式的一個偏移,具體轉換如下:

  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

D3D中shader轉換矩陣:  

float4x4 matr2y = {
    0.256788f,    -0.148223f,    0.439216f,    0.000000f,
    0.504129f,    -0.290993f,    -0.367788f,    0.000000f,
    0.097906f,    0.439216f,    -0.071427f,    0.000000f,
    0.062745f,    0.500000f,    0.500000f,    0.000000f };

5 RGB格式轉為YCbCr格式轉換公式

  轉換格式如下:

  R' = 1.164*(Y’-16) + 1.596*(Cr'-128)
  G' = 1.164*(Y’-16) - 0.813*(Cr'-128) -0.392*(Cb'-128)

        B' = 1.164*(Y’-16) + 2.017*(Cb'-128)

推匯出:

R' = 1.164*Y' + 1.596 * V' - 222.9
G' = 1.164*Y' - 0.392 * U' - 0.823 * V'+ 135.6
B' = 1.164*Y' + 2.017 * U'- 276.8 

D3D中shader轉換矩陣為:

 float4x4 maty2r = {
    1.164384f,    1.164384f,    1.164384f,    0.000000f,
    0.000000f,    -0.391762f,    2.017232f,    0.000000f,
    1.596027f,    -0.812968f,    0.000000f,    0.000000f,
    -0.874202f,    0.531668f,    -1.085631f,    0.000000f };