Цветовая наука/V1/Компонентное видео

Компонентное видео

YCbCr и Y′CbCr

От nonlinear R′G′B′ к Y′CbCr: luma vs luminance, BT.601/709/2020 matrices, Cb/Cr normalization, narrow/full range, subsampling, chroma siting и типичные matrix errors.

Y′CbCrBT.709 matrixRangeSiting
Простыми словами

Y′CbCr не является цветовым пространством вроде Rec.709. Это способ представить уже определённый nonlinear RGB signal как luma-like Y′ плюс две colour-difference components — удобно для video coding и chroma subsampling.

11 разделов4 первичных источников

Ключевые факты

Определения и цифры, которые стоит держать перед глазами

BT.709 Y′
0.2126 R′ + 0.7152 G′ + 0.0722 B′
BT.601 Y′
0.299 R′ + 0.587 G′ + 0.114 B′
BT.2020 NCL Y′
0.2627 R′ + 0.6780 G′ + 0.0593 B′
Y′ ≠ Y
Luma-like ≠ CIE luminance
10-bit chroma neutral
Cb=Cr=512

Для narrow-range digital representation.

Y′CbCr

Luma-like component + две цветоразностные компоненты

R′G′B′
нелинейно кодированный RGB
Y′
KrR′ + KgG′ + KbB′
Cb / Cr
blue/red difference
STDY′ WEIGHTSUSE
BT.6010.299 / 0.587 / 0.114SD
BT.7090.2126 / 0.7152 / 0.0722HD
BT.20200.2627 / 0.6780 / 0.0593UHD / WCG
Y′ — luma, не physical luminance Y
Matrix зависит от colorimetry
Subsampling применяется к Cb/Cr, а не к Y′
01

Почему в Y′ есть штрих

Matrix обычно применяется к nonlinear R′G′B′ — уже после OETF/transfer encoding — поэтому результат обозначают Y′. CIE luminance Y рассчитывается из linear tristimulus/light relationships. Эти величины связаны, но не взаимозаменяемы. Фраза «Y channel = luminance» технически слишком груба.

02

Общая идея Y′CbCr

Сначала Y′ строится как weighted sum R′G′B′. Затем Cb хранит blue-difference component, Cr — red-difference component. В normalized форме часто удобно мыслить Cb=(B′−Y′)/(2−2Kb) и Cr=(R′−Y′)/(2−2Kr), где Kr/Kb зависят от стандарта. Neutral grey имеет Cb=Cr=0 до integer offset.

03

BT.709 matrix

Для HDTV BT.709: Y′=0.2126R′+0.7152G′+0.0722B′. Соответственно Cb≈(B′−Y′)/1.8556, Cr≈(R′−Y′)/1.5748. Эти коэффициенты связаны с BT.709 primaries/colorimetry и не должны автоматически применяться к SD BT.601 signal.

04

BT.601 matrix

Для legacy SD BT.601 используются Kr=0.299, Kg=0.587, Kb=0.114. Поэтому старое SD video, неправильно интерпретированное как BT.709 matrix, получает небольшие, но систематические изменения hue/luma. Это один из классических источников «почему старый клип после transcode стал другим».

05

BT.2020 non-constant luminance matrix

Для BT.2020 NCL: Y′=0.2627R′+0.6780G′+0.0593B′, Cb=(B′−Y′)/1.8814, Cr=(R′−Y′)/1.4746. В стандарте также существует BT.2020 constant-luminance variant — это отдельная representation и отдельный matrix_coefficients signalling, её нельзя смешивать с обычным BT.2020 NCL.

06

Как normalized components превращаются в integers

В narrow video Y′ обычно занимает 16–235 в 8-bit или 64–940 в 10-bit. Chroma имеет neutral offset: 128 в 8-bit / 512 в 10-bit и nominal extremes 16–240 / 64–960. Это объясняет, почему neutral chroma не кодируется нулём и почему range conversion должен обрабатывать Y′ и Cb/Cr по разным nominal spans.

07

Почему именно chroma удобно subsample

Y′ несёт большую часть spatial detail, а Cb/Cr — colour-difference detail. Зрительная система обычно менее чувствительна к fine spatial chroma, поэтому 4:2:2/4:2:0 уменьшают bandwidth заметно дешевле по perceived quality, чем такое же уменьшение luma resolution. Но на graphics/keying это преимущество быстро исчезает.

08

Chroma sample location — скрытый параметр

Для 4:2:0 chroma sample может быть co-sited или centered относительно luma grid в зависимости от system/codec. H.26x/VUI metadata позволяет signal location types. Если upsampler предполагает другую phase, coloured edges смещаются и возникают false colour/softness на вертикальных или горизонтальных переходах.

09

YCbCr ≠ YUV ≠ YPbPr

YUV исторически относится к analog composite/component concepts, YPbPr — к analogue component representation, YCbCr — к digital component coding. В бытовой речи их часто смешивают, а fourcc/pixel-format names используют «yuv» как umbrella label, но при техническом описании лучше называть реальный representation.

10

Как выглядит wrong matrix

Wrong BT.601/709/2020 decoding редко выглядит как простой uniform tint. Меняются channel relationships, saturation и luma contribution: skin и saturated colours уходят по-разному. Если проблема зависит от цветности объектов, но black/white range нормальный, matrix mismatch — более правдоподобная гипотеза, чем levels.

11

Что проверять в Resolve

Resolve обычно декодирует YCbCr через codec/media pipeline до внутреннего RGB processing. Поэтому пользователю важны правильные media tags, Data Levels и input color space/transfer; YCbCr matrix mismatch может возникнуть до нод. Для сомнительного transcode сравните исходник и decode, inspect stream matrix_coefficients, а не пытайтесь вручную «вернуть цвет» колёсами.

Что это меняет в постпродакшне

Чтобы не путаться: сначала назовите исходный R′G′B′ colorimetry/transfer, потом matrix_coefficients, потом range. Только после этих трёх вопросов Y′CbCr numbers получают однозначный смысл.

Типичные ошибки
Называть Y′ физической luminance Y.
Считать YCbCr самостоятельным gamut.
Декодировать SD BT.601 matrix как BT.709.
Путать BT.2020 NCL и constant-luminance representation.
Игнорировать chroma neutral offset/range.
Игнорировать chroma siting при resampling.
Стандарты и первичные источники

Технические определения привязаны к организациям стандартов и первичным спецификациям там, где это действительно важно.