Преобразование RGB-значений одного пространства в RGB-значения другого сводится к следующим шагам:

1. Привести RGB к значениям в диапазоне 0..1
2. Выполнить гамма-преобразование для приведения RGB в линейный вид
3. Выполнить расчет матрицы преобразования из исходного RGB в целевое RGB и преобразовать RGB
4. Выполнить гамма-преобразование для целевого пространства
5. Привести RGB к 8-битному или 16-битному виду

Пункт 3 будет раскрыт подробно ниже. Рассмотрим на примере перевод RGB (169, 240, 135) из пространства Adobe RGB (D65, gamma 2.2) в пространство sRGB (D65, gamma ~2.2).

Откроем Adobe Photoshop, создадим новый документ в пространстве Adobe RGB (1998) и зальем его фон цветом RGB (169, 240, 135), затем выполним команду Edit->Convert to Profile и выберем профиль sRGB IEC61966-2.1 (Intent=Relative Colorimetric, Engine=Adobe (ACE), Use Black Point Compensation=False, Use Dither=False). Возможно, для кого-то будет удивительным, но RGB-значения станут 128, 240, 129.

Рассмотрим детально, что при этом происходит.

1. Перевод из 8-битного значения производится делением каждого канала на 255.

2. Гамма преобразование для Adobe RGB производится возведением каждого канала в степень 2.2.

В MS Exсel для п.1-2 можно использовать функцию =СТЕПЕНЬ(X/255;2,2) или =(X/255)^2.2, где X - это ячейка со значением канала RGB.

3. Расчет матрицы преобразования сводится к следующим шагам:

3.1 Выполнить расчет матрицы преобразования RGB в XYZ
3.2 Если исходное и целевое RGB имеют разные цветовые температуры, выполняем хром-адаптацию к D50
3.3 Выполнить расчет матрицы преобразования из XYZ в целевое RGB
3.4 Аналогично п.4, если исходное и целевое RGB имеют разные цветовые температуры, выполняем хром-адаптацию к D50

Расчет матрицы из RGB в XYZ возможен, если известны координаты основных цветов (primaries) и координаты белой точки. Ниже приведена таблица основных цветовых пространств:

Name Gamma Reference
White
Red Primary Green Primary Blue Primary
xR yR YR xG yG YG xB yB YB
Adobe RGB (1998) 2.2 D65 0.6400 0.3300 0.297361 0.2100 0.7100 0.627355 0.1500 0.0600 0.075285
Apple RGB 1.8 D65 0.6250 0.3400 0.244634 0.2800 0.5950 0.672034 0.1550 0.0700 0.083332
Best RGB 2.2 D50 0.7347 0.2653 0.228457 0.2150 0.7750 0.737352 0.1300 0.0350 0.034191
Beta RGB 2.2 D50 0.6888 0.3112 0.303273 0.1986 0.7551 0.663786 0.1265 0.0352 0.032941
Bruce RGB 2.2 D65 0.6400 0.3300 0.240995 0.2800 0.6500 0.683554 0.1500 0.0600 0.075452
CIE RGB 2.2 E 0.7350 0.2650 0.176204 0.2740 0.7170 0.812985 0.1670 0.0090 0.010811
ColorMatch RGB 1.8 D50 0.6300 0.3400 0.274884 0.2950 0.6050 0.658132 0.1500 0.0750 0.066985
Don RGB 4 2.2 D50 0.6960 0.3000 0.278350 0.2150 0.7650 0.687970 0.1300 0.0350 0.033680
ECI RGB v2 L* D50 0.6700 0.3300 0.320250 0.2100 0.7100 0.602071 0.1400 0.0800 0.077679
Ekta Space PS5 2.2 D50 0.6950 0.3050 0.260629 0.2600 0.7000 0.734946 0.1100 0.0050 0.004425
NTSC RGB 2.2 C 0.6700 0.3300 0.298839 0.2100 0.7100 0.586811 0.1400 0.0800 0.114350
PAL/SECAM RGB 2.2 D65 0.6400 0.3300 0.222021 0.2900 0.6000 0.706645 0.1500 0.0600 0.071334
ProPhoto RGB 1.8 D50 0.7347 0.2653 0.288040 0.1596 0.8404 0.711874 0.0366 0.0001 0.000086
SMPTE-C RGB 2.2 D65 0.6300 0.3400 0.212395 0.3100 0.5950 0.701049 0.1550 0.0700 0.086556
sRGB ≈2.2 D65 0.6400 0.3300 0.212656 0.3000 0.6000 0.715158 0.1500 0.0600 0.072186
Wide Gamut RGB 2.2 D50 0.7350 0.2650 0.258187 0.1150 0.8260 0.724938 0.1570 0.0180 0.016875

Координаты белых точек:

Illuminant Xw Yw Zw
A 1.09850 1.00000 0.35585
B 0.99072 1.00000 0.85223
C 0.98074 1.00000 1.18232
D50 0.96422 1.00000 0.82521
D55 0.95682 1.00000 0.92149
D65 0.95047 1.00000 1.08883
D75 0.94972 1.00000 1.22638
E 1.00000 1.00000 1.00000
F2 0.99186 1.00000 0.67393
F7 0.95041 1.00000 1.08747
F11 1.00962 1.00000 0.64350

3.1.1 Расчитывается матрица M':

xR/yR xG/yG xB/yB
1 1 1
(1-xR-yR)/yR (1-xG-yG)/yG (1-xB-yB)/yB

3.1.2 Матрица M' инвертируется (см. обратная матрица) и умножается на точку белого

(Sr,Sg,Sb) = invert(M') * (Xw,Yw,Zw)

В MS Exсel используются функции МОБР и МУМНОЖ. (Sr,Sg,Sb) и (Xw,Yw,Zw) располагаются в одну колонку (значение канала в отдельной строке).

3.1.3 Расчитывается матрица M: элементы матрицы M' умножаются построчно на элементы (Sr,Sg,Sb)

Sr*(xR/yR) Sg*(xG/yG) Sb*(xB/yB)
Sr Sg Sb
Sr*((1-xR-yR)/yR) Sg*((1-xG-yG)/yG) Sb*((1-xB-yB)/yB)

Для AdobeRGB->XYZ расчеты в Excel выглядят так:

3.3 Расчитывается матрица XYZ->sRGB. Чтобы её получить необходимо выполнить те же действия, только с primaries для sRGB, а полученную матрицу sRGB->XYZ инвертировать:

На сайте Брюса Линдблума приведена следующая схема расчета матриц для преобразования из RGB в XYZ (возможно, более понятная, чем вышеописанный алгоритм):

Итоговая матрица AdobeRGB->sRGB получается перемножением матриц XYZ->sRGB и AdobeRGB->XYZ.

Линейные значения Adobe RGB (169, 240, 135) в диапазоне 0..1 = (0.404540823, 0.875137582, 0.24680042). Перемножив полученную матрицу AdobeRGB->sRGB получим линейные значения sRGB = (0.217110065, 0.875137582, 0.21982069). Здесь нужно выполнить нормализацию данных: любые отрицательные значения заменить на 0, а все, что больше 1 заменить единицей. То есть происходит обрезание всего, что выходит за охват пространства sRGB, что соответствует режиму Relative Colorimetric.

4. Гамма-коррекция в sRGB выполняется не через возведение в степень 1/2.2, а через следующее условие (ф-ция Excel):

=ЕСЛИ(X<=(0,04045/12,92);X*12,92;1,055*СТЕПЕНЬ(X;1/2,4)-0,055)

5. Умножив полученные значения на 255 мы получим итоговые значения sRGB = (128.342, 240.4574, 129.0799). Отбросив дробные части, мы получаем те же значения, что посчитал нам выше старый добрый Photoshop.

Мы не рассмотрели вопрос хром-адаптации. У Брюса Линдблума есть схема:

В Photoshop используется метод по Брэдфорду и соответственно MA принимается равной:

0,8951
0,2664
-0,1614
-0,7502
1,7135
0,0367
0,0389
-0,0685
1,0296

Если что-то осталось непонятным и/или интересно поразбираться со всей этой математикой в Excel, здесь можно скачать архив с файлом xlsx, в котором я экспериментировал и делал расчеты.

 

 

 

Добавить комментарий


Защитный код
Обновить