3

Matlab中rgb2ycbcr的帮助文档说

如果输入为 uint8,则 YCBCR 为 uint8,其中 Y 在 [16 235] 范围内,Cb 和 Cr 在 [16 240] 范围内。

据我所知,从 RGB 到 YCbCr 的转换公式是

Y   =     0.299  R + 0.587  G + 0.114  B
Cb  =   - 0.1687 R - 0.3313 G + 0.5    B + 128
Cr  =     0.5    R - 0.4187 G - 0.0813 B + 128

令 R=0,G=0 和 B=0,我们得到 Y=0,它不在 [16,235] 范围内。令 R=255, G=255 和 B=0,我们得到 Cb=0.5,这也不在 [16, 240] 范围内。

为什么rgb2ycbcr使 Y 在 [16,235] 范围内,而使 Cb/Cr 在 [16,240] 范围内?

4

1 回答 1

1

正如@jucestain 所说,维基百科有一个答案:

Y' 值通常会移动并缩放到范围 [16, 235](称为工作室摇摆),而不是使用 [0, 255] 的整个范围(称为全摇摆)。
这种令人困惑的做法源自 MPEG 标准,并解释了为什么将 16 添加到 Y' 以及为什么基本变换中的 Y' 系数总和为 220 而不是 255。 U 和 V 值(可能为正或负)与 128 相加让他们总是积极的。

于 2013-08-23T02:14:31.940 回答