對於每個取樣點的 R,G,B 值, 在轉換到 YUV colour space 時, 首先定義畫面的平均亮度值(Luminance), Y, 其計算公式爲:
Y = kr*R + kg*G + kb*B
kr, kg, kb 爲 weighting factors (加權因數), kr + kg + kb = 1 恆定.
(其中, ITU-R BT.601 定義 kb = 0.114 和 kr = 0.299)
然後定義 Cr, Cg, Cb 爲顏色強度 (colour intensity) 與這個 luminance 的差值:
Cb = B − Y
Cr = R − Y
Cg = G − Y
這時對於一個取樣點, 完整的信息被保存於 Y, Cb, Cr, Cg 四個變量裏, 此時相對於 RGB colour space 的三個變量值, 這樣的計算公式還沒有優勢.
但由於 Cb + Cr + Cg 是個常數, 我們可以用其中兩個變量來表達原來所需的三個, 並且在數據的貯存和傳輸中也只需使用其中的兩個變量. 這樣, 就完成了定義 YCbCr colour space 中的三個變量了: Y, Cb, Cr.
一個在 RGB colour space 中取樣值的三個變量 R, G, B 在轉換爲 YCbCr 的公式於是重新 定義/轉化 爲:
Y = kr*R + (1 − kb − kr )*G + kb*B........ (1)
Cb = 0.5(1 − kb) / (B − Y )
Cr = 0.5(1 − kr) / (R − Y )
然後再用公式 (1) 代換 Y, 得到僅含 R,G,B 的 Cb, Cr 函數 (kr,kb 視爲常數)
作簡單的代數也可以求出從 YCbCr 轉換至 RGB 的公式:
R = Y + (1 - kr)*Cr/0.5
G = Y - [kb*(1 - kb)*Cb]/ [0.5*(1 - kb - kr)] - [kr*(1 - kr)*Cr]/ [0.5*(1 - kb - kr)]
B = Y + (1 - kb)*Cb/0.5
代入 ITU-R BT.601 定義的 kb = 0.114 和 kr = 0.299
那麼 RGB ---> YCbCr 的公式爲:
Y = 0.299R + 0.587G + 0.114B........ (2)
Cb = 0.564(B − Y )
Cr = 0.713(R − Y )
同樣地, 然後再用公式 (2) 代換 Y, 得到僅含 R,G,B 的 Cb, Cr 函數 (kr,kb 視爲常數)
YCbCr ---> RGB 的公式爲:
R = Y + 1.402Cr
G = Y − 0.344Cb − 0.714Cr
B = Y + 1.772Cb
轉載文章讀後感:
係數是人爲(規範等)規定的,而不是推算出來的。另外,上述轉換實際上是RGB轉YUV444,因爲每一個像素點均有一對uv值。