【问题标题】:Why were the constants in YUV <-> RGB chosen to be the values they are为什么选择 YUV <-> RGB 中的常量作为它们的值
【发布时间】:2018-12-28 02:13:22
【问题描述】:

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

来自 YCbCr 上的wiki

ITU-R BT.601 转换 Y′CbCr 的形式定义为 ITU-R BT.601(原 CCIR)中使用的标清电视 601) 用于数字分量视频的标准源自 对应的RGB空间如下:

Kr=0.299

Kg=0.587

Kb=0.114

选择这些常数值的原因是什么?为什么它们在其他标准中有所不同?可以看到here

【问题讨论】:

  • 实验,主要是 CIE1931,以及显示技术的变化(601 很好地映射到 CRT,709 更适合 LCD)
  • 太好了,谢谢!

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


【解决方案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 ]

哪些来自维基。

【讨论】:

  • 很好的答案!欢迎来到本站。
猜你喜欢
  • 1970-01-01
  • 2013-01-27
  • 2014-11-12
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
相关资源
最近更新 更多