Термин Y‘CbCr обозначает цветовое пространство (Colorspace), т. е. это специфический способ определить значения пикселя в цветном изображении.
Y‘CbCr – стандарт цветового пространства, используемый для цифровой обработки видео (определенный стандартом ITU-R BT.601, ранее известного как CCIR-Rec.601). Любое упоминание в справочной информации о цифровом видео потоке термина YUV почти наверняка говорит об Y‘CbCr. YUV4MPEG2 потоки, созданные MJPEGtools, также используют цветовое пространство Y‘CbCr.
R’G’B’ против Y’CbCr
Если Вы имеете отношение к компьютерной графике, Вам знакомо R‘G‘B‘ цветовое пространство. Цвет пиксела на экране компьютера представлен тремя значениями – R‘, G‘ и B‘, и зависит от суммы красного, зеленого и синего в пикселе. Из R‘, G‘ и B‘ состоит триада на экране ЭЛТ (CRT). (Из первичных цветов – красного, зеленого и синего можно создать любой цвет.)
Этот же самый пиксел можно представить тремя значениями – Y‘, Cb и
Cr. Y‘ соответствует воспринимаемой яркости пиксела (люма Пойнтона, или гамма-скорректированный/нелинейный сигнал яркости – gamma-adjusted/non-linear luminance), независимой от оттенка пиксела. Вся информация об оттенке (hue, или сигнале цветности – chroma) содержится в значениях Cb и Cr. Их также называют цветоразностными (color difference) каналами, потому что Cb – это (B‘ – Y‘), а Cr – это (R‘ – Y‘). (В векторном представлении Y‘, Cb и Cr формируют ортонормальный базис цветового пространства, который ориентирован таким образом, что ось Y‘ проходит вдоль диагонали R‘G‘B‘ от (0,0,0) до (1,1,1) ).
Весомой причиной использования Y‘CbCr цветового пространства для цифрового видео является то, что в ней информация luma (яркости – brightness) отделяется от информации о насыщенности цвета (color). Так как человеческий глаз менее чувствителен к изменениям насыщенности цвета чем к изменению яркости, изолированная информация о насыщенности цвета может быть выбрана в более низком решении чем luma, без ухудшения качества изображения.
Важные факты
При кодировании в стандартной компьютерной графике R‘G‘B‘
(8-bit на канал) принимают значения в диапазоне от 0 до 255. Уровень (0,0,0) соответствует черному, а уровни (255,255,255) – белому.
При кодировании в Y‘CbCr (*всегда* 8-bit на канал) :
– Y‘ может принимать значения от 16 до 235. 16 является самым темным, 235 – самым ярким.
– Cb и Cr принимают значения от 16 до 240. 128 – нулевая точка (zero-point).
Таким образом, (16, 128, 128) – чисто черный, а (235, 128, 128) – чисто белый. (Некоторые некачественные программы понимают масштабирование правильно, но пропускают значение 16 !)
Отметьте, что существуют отдельные комбинации “действительных” значений Y‘, Cb, и Cr, которые будут некорректны для цветов R‘G‘B‘ ! Например – (235, 240, 240)….
Матрицы пересчета
Следующие формулы могут использоваться при преобразовании пикселей между цветовыми пространствами R‘G‘B‘ и Y‘CbCr.
Здесь мы используем символы нижнего регистра, чтобы определить компоненты с нормализованным
масштабированием (scaling): r’, g’, b’, y': [0.0, 1.0]; и cB, cR: [-0.5, +0.5].
Преобразование в y’cBcR из r’g’b’
y‘ = 0.299 х r‘ + 0.587 х g‘ + 0.114 х b‘
cB = -0.168736 х r‘ + -0.331264 х g‘ + 0.500 х b‘
cR = 0.500 х r‘ + -0.418688 х g‘ + -0.081312 х b‘
Преобразование в r’g’b’ из y’cBcR
r’ = 1.0 х y‘ + 0 х cB + 1.402 х cR
g’ = 1.0 х y‘ + -0.344136 х cB + -0.714136 х cR
b’ = 1.0 х y‘ + 1.772 х cB + 0 х cR
Чтобы использовать эти уравнения, Вам необходимо умножить 8-битные значения R‘, G‘ и B‘ на коэффициент 1/255. Аналогично, 8-битное значение Y‘ необходимо умножить на 219, и к результату прибавить 16. Значения 8-битных сB и сR необходимо умножить на 224, а к результату прибавить 128:
r‘ = R‘ / 255
g‘ = G‘ / 255
b‘ = B‘ / 255
Y‘ = (y‘ х 219) + 16
Cb = (cB х 224) + 128
Cr = (cR х 224) + 128
Источник
Над материалом работал GS1966