Это просто (сбивающая с толку) математика ...
Примечание: существует несколько стандартов YCbCr , для которых применяется следующая формула BT.601 с "полным диапазоном":
Уравнение (1): Y = 0.299R + 0.587G + 0.114B
Общее определение YCbCr предполагает, что R, G и B представляют собой 8-битные целые числа без знака в диапазоне [0, 255].
В некоторых случаях R, G, B являются значениями с плавающей запятой в диапазоне [0, 1] (нормализованные значения).
В некоторых случаях HDR , например, диапазон составляет [0, 1023],
В случае R=50
, G=50
, B=50
вам просто нужно присвоить значения:
Y = 0.299*50 + 0.587*50 + 0.114*50
Результат: Y = 50
.
Поскольку Y представляет люму (линейное свечение), а RGB=(50,50,50)
- серый пиксель, имеет смысл, что Y = 50
.
Следующие уравнения Cb = 0.564(B - Y)
, Cr = 0.713(R - Y)
являются неверными .
Вместо Cb
и Cr
они должны называться Pb
и Pr
.
Уравнение (2): Pb = 0.564(B - Y)
Уравнение (3): Pr = 0.713(R - Y)
Уравнения означают, что вы можете сначала вычислить Y
, а затем использовать результат для вычисленияPb
и Pr
.
Примечание: не округляйте значение Y
, когда вы используете его для вычисления Pb
и Pr
.
Вы также можете назначить уравнение (1) в (2) и (3):
Pb = 0.564(B - Y)
= 0.564(B - (0.299R + 0.587G + 0.114B))
= 0.4997*B - 0.3311*G - 0.1686*R
Pr = 0.713(R - Y)
= 0.713(R - (0.299R + 0.587G + 0.114B))
= 0.4998*R - 0.4185*G - 0.0813*B
Есть некоторые небольшие неточности.
Википедия более точна (но все же является просто результатом математических заданий):
Y = 0.299*R + 0.587*G + 0.114*B
Pb = -0.168736*R - 0.331264*G + 0.5*B
Pr = 0.5*R - 0.418688*G - 0.081312*B
В приведенных выше формулах диапазон Pb, Pr равен [-127,5, 127,5].
В формуле "полный диапазон" YCbCr (не YPbPr) к Pb и Pr добавляется смещение 128 (поэтому результат всегда положительный).
В случае 8 битов, конечный результатограничен диапазоном [0, 255] и округлен.