Преобразование Yxy в RGB
Я пытаюсь реализовать метод преобразования из цветового пространства Yxy в RGB. Это делается путем первого преобразования в XYZ, а затем в RGB. Я узнал, что "официальная" матрица для Yxy -> XYZ
3,2410 -1,5374 -0,4986 -0,9692 1,8760 0,0416 0,0556 -0,2040 1,0570
Это также тот, который используется в книге Мэтта Фарра "Физически обоснованный рендеринг".
С другой стороны, многие люди в области 3D-графики используют
2,5651-1,1665 -0,3986 -1,0217 1,9777 0,0439 0.0753 -0.2543 1.1892
Теперь, насколько я понимаю, если х = 0,33333 и у = 0,33333, Yxy дает серый оттенок. Это действительно то, что я получаю со второй матрицей. Первый создает красное значение RGB.
Вторая матрица работает, но откуда она? Я нахожу много людей, использующих его в своих примерах кода, но никто не объясняет, имеет ли он физическое происхождение.
заранее спасибо
1 ответ
Преобразование из xyY в XYZ является нелинейным, то есть не может быть вычислено умножением матрицы. Из Википедии о цветовом пространстве CIE 1931:
X = Y / y * x
Z = Y / y * ( 1 - x - y )
Кажется, обе ваши матрицы предназначены для преобразования XYZ в RGB. Первая дана праймериз sRGB и белой точкой. Второй по праймериз очень близок к sRGB (зеленый имеет x = 0.29
, y = 0.60
) и x = 0.334
, y = 0.334
белая точка.
Если вы хотите использовать другие основные цвета RGB и белые точки, список можно найти по адресу: http://brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html