我对如何将 RGB 转换为 YCrCb 感到困惑

I’m confused with how to convert RGB to YCrCb

鉴于:

Y = 0.299R + 0.587G + 0.114B

我们为 R、G 和 B 输入什么值?我假设是 0-255。为了论证,如果R、G、B各为50,那么是否意味着Y=0.299(50) + 0.587(500) + 0.11(50)?

后面两个也很迷惑。如果 Y 包含 Blue 那么 B - Y 怎么可能甚至是 B - Y 只是带走自己?

Cb = 0.564( B − Y ) Cr =0.713(R−Y)

这只是简单(令人困惑)的数学...

备注:YCbCr以下公式适用BT.601的标准很少,有"full range":

等式 (1):Y = 0.299R + 0.587G + 0.114B

YCbCr 的通用定义假定 R、G 和 B 是 [0, 255] 范围内的 8 位无符号整数。
在某些情况下,R、G、B 是 [0, 1] 范围内的浮点值(归一化值)。
例如,还有 HDR 范围为 [0, 1023] 的情况。

如果R=50G=50B=50,你只需要赋值:
Y = 0.299*50 + 0.587*50 + 0.114*50
结果:Y = 50

由于Y代表Luma(线发光),而RGB=(50,50,50)是一个灰度像素,所以Y = 50是有道理的。


以下等式 Cb = 0.564(B - Y)Cr = 0.713(R - Y) 不正确
而不是 CbCr 它们应该被命名为 PbPr

公式(2):Pb = 0.564(B - Y)
等式(3):Pr = 0.713(R - Y)

等式意味着你可以先计算Y,然后用结果计算PbPr

注意:在计算PbPr时,不要对Y的值进行四舍五入。

您也可以将等式(1)代入(2)和(3):
Pb = 0.564(B - Y) = 0.564(B - (0.299R + 0.587G + 0.114B)) = 0.4997*B - 0.3311*G - 0.1686*R

Pr = 0.713(R - Y) = 0.713(R - (0.299R + 0.587G + 0.114B)) = 0.4998*R - 0.4185*G - 0.0813*B

有些小错误。
维基百科更准确(但仍然只是数学分配的结果):
Y = 0.299*R + 0.587*G + 0.114*B
Pb = -0.168736*R - 0.331264*G + 0.5*B
Pr = 0.5*R - 0.418688*G - 0.081312*B

上式中Pb、Pr取值范围为[-127.5, 127.5]。

在YCbCr(不是YPbPr)的"full range"公式中,Pb和Pr增加了128的偏移量(所以结果总是正数)。
在 8 位的情况下,最终结果限制在 [0, 255] 范围内并四舍五入。