2013-03-22 1 views
2

помощь документ rgb2ycbcr в Matlab говорит, чтоПочему Y, преобразованный rgb2ycbcr в Matlab, в диапазоне [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 называются комнатой для хранения, а значения от 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. 
Смежные вопросы