为什么选择YUV <-> RGB中的常数作为它们的值

时间:2018-12-28 02:13:23

标签: image-processing video rgb video-processing yuv

我已经阅读了各种资源,这些资源定义了用于从RGB转换为YUV的常量,并且这些常量在具有不同值的不同标准中被重新定义。

来自YCbCr的wiki

  

ITU-R BT.601转换为以下目的定义的Y'CbCr形式   ITU-R BT.601(以前称为CCIR)中使用的标清电视   601)用于数字分量视频的标准是从   对应的RGB空间如下:

     

Kr = 0.299

     

千克= 0.587

     

Kb = 0.114

选择这些常量值的原因是什么?为什么它们在其他标准上有所不同?如here

所示

1 个答案:

答案 0 :(得分:1)

它们是根据CIE xy色度图中的RGB和标准光源xy坐标计算得出的。

根据Rec.601 625-CIE xy色度值为:

Wx = 0.3127; Wy = 0.3290; // White Point D65
Rx = 0.640;  Ry = 0.330;  // Red primary
Gx = 0.290;  Gy = 0.600;  // Green primary
Bx = 0.150;  By = 0.060;  // Blue primary

Yxy and XYZ个色彩空间的定义:

Y = 1.0; // maximum luminance
x + y + z = 1;
Xw = Wx / Wy; // from X = Y * x / y
Zw = Wz / Wy; // from Z = Y * z / y

在xy图上混合RGB原色会产生一些中心点。 RGB空间要求中心点是白点。因此,我们必须使用下面的方法(也是RGB-> XYZ转换矩阵)来计算RGB缩放系数(Ra,Rg,Rb):

Ra * Rx + Ga * Gx + Ba * Bx = Xw = Wx / Wy
Ra * Ry + Ga * Gy + Ba * By = Yw = 1
Ra * Rz + Ga * Gz + Ba * Bz = Zw = Wz / Wy

当我们求解以上方程时,我们得到:

Ra = 0.9059594488629998
Ga = 0.8259453663844839
Ba = 1.4326521467778324

我们可以用来生成RGB(Rec.601 625)-> XYZ转换矩阵:

[ Ra * Rx, Ga * Gx, Ba * Bx ]
[ Ra * Ry, Ga * Gy, Ba * By ]
[ Ra * Rz, Ga * Gz, Ba * Bz ]

并且中心行将包含[Kr,Kg,Kb] Y系数:

[ 0.2123763607050675, 0.7010598569257229, 0.08656378236920959 ]

YCbCr的Kr,Kg,Kb与wiki完全不同。 因为该Wiki上的系数是针对SMPTE C色彩空间的,因此具有:

Wx = 0.3127; Wy = 0.3290; // White Point D65
Rx = 0.630;  Ry = 0.340;  // Red primary
Gx = 0.310;  Gy = 0.595;  // Green primary
Bx = 0.155;  By = 0.070;  // Blue primary

如果重复以上操作,我们将获得SMPTE-C的[Kr,Kg,Kb] Y系数:

[ 0.29896661812479, 0.5864212101329835, 0.1146121717422266 ]

来自Wiki的人。