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]范围内?
答案 0 :(得分:1)
正如@jucestain所说,Wikipedia有一个答案:
Y'值通常被移动并缩放到范围[16,235](称为工作室摆动),而不是使用[0,255]的全范围(称为全摆)。
这种令人困惑的做法源于MPEG标准,并解释了为什么16被添加到Y'以及为什么基本变换中的Y'系数总和为220而不是255.U和V值,可以是正数或负数,与128相加。使他们永远积极。