为什么在Matlab中由rgb2ycbcr转换的Y在[16,235]范围内?

时间:2013-03-22 02:51:26

标签: matlab

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]范围内?

1 个答案:

答案 0 :(得分:1)

正如@jucestain所说,Wikipedia有一个答案:

  

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