2013-03-22 97 views
2

rgb2ycbcr在Matlab的幫助文檔說爲什麼Y在Matlab中被rgb2ycbcr轉換的範圍是[16,235]?

如果輸入是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,它是不在範圍[16235]。令R = 255,G = 255和B = 0,我們得到Cb = 0.5,這也不在範圍[16,240]。

爲什麼rgb2ycbcr使Y在[16,235]的範圍內並使Cb/Cr在[16,240]的範圍內?

+2

維基百科有相同的轉換爲MATLAB函數。根據維基百科的說法:「導致使用數字值的較小範圍的縮放比表示輸入數據的標稱範圍可能看起來需要的縮放允許在處理過程中的一些」過沖「和」下衝「而不需要如「xvYCC」所規定的,「頭頂」和「腳趾間」也可用於擴展名義色域。 – Justin

+0

另外:「結果信號範圍從16到235;從0到15的值被稱爲footroom,而從236到255的值被稱爲淨空。」 – Justin

+0

謝謝@jucestain。 –

回答

1

正如@jucestain說,有來自Wikipedia一個答案:

Y' values are conventionally shifted and scaled to the range [16, 235] (referred to as 
studio swing) rather than using the full range of [0, 255] (referred to as full swing). 
This confusing practice derives from the MPEG standards and explains why 16 is added to 
Y' and why the Y' coefficients in the basic transform sum to 220 instead of 255. U and V 
values, which may be positive or negative, are summed with 128 to make them always positive.