Я запутался с тем, как конвертировать RGB в YCrCb - PullRequest
0 голосов
/ 03 ноября 2019

Учитывая, что:

Y = 0,299R + 0,587G + 0,1144B

Какие значения мы вводим для R, G и B? Я предполагаю 0-255. Ради аргументов: если R, G, B - каждый по 50, то означает ли это Y = 0,299 (50) + 0,587 (500) + 0,11 (50)?

Следующие два также сбивают с толку. Как может B - Y вообще быть возможным, если Y содержит синий, тогда не B - Y просто убирает себя?

Cb = 0,564 (B - Y) Cr = 0,713 (R-Y)

1 Ответ

2 голосов
/ 03 ноября 2019

Это просто (сбивающая с толку) математика ...

Примечание: существует несколько стандартов 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] и округлен.

...