Баланс белого в RAW регулируется множителями RGB, которые по своей сути указывают RAW-конвертеру во сколько раз умножить значение конкретного канала. Другими словами, управление балансом белого сводится к экспокоррекции каналов. При этом большинство RAW-конвертеров использует для регулировки баланса белого инструменты Temperature (температура) и Tint (смещение оттенка). Температура задает величину CCT (Correlated Colour Temperature - коррелированная цветовая температура), которая выражается в Кельвинах и варьируется от теплых (желтых) оттенков с низкой температурой до холодных (голубых) с высокой температурой.

Давайте взглянем на значения баланса белого одного и того же снимка в режиме AsShot (т.е. как снято камерой) в разных RAW-конвертерах:

Слева внизу приведена таблица, чтобы было наглядно видно на сколько отличаются Temp/Tint. Почему же один и тот же баланс белого различается в разных программах? Предлагаю сперва ознакомиться с небольшой, но очень полезной теорией.

Любой цвет в модели RGB можно выразить в виде относительных значений (весов): r = R / (R+G+B), g = G / (R+G+B), b = B / (R+G+B). Причем, r+g+b=1 и каждое значение лежит в диапазоне от 0 до 1. Отсюда напрашивается вывод: достаточно знать значения всего двух координат, чтобы получить полное представление о цвете. Например, зная весовые доли g и b, мы получаем r = 1 - g - b. Значит, цвет можно представить в двумерной системе координат. Это и было сделано в 1931 году Международной комиссией по освещению (МКО или CIE -International Commission on Illumination). В силу того, что RGB не годится для выражения всех цветовых оттенков, было решено использовать теоретическую систему XYZ, полученную в результате исследований реакций человеческого глаза (X - отклик L-колбочек (красный), Y - M-колбочек (зеленый), а Z - S-колбочек (синий)).

Точно также, x = X / (X+Y+Z), y = Y / (X+Y+Z), z = Z / (X+Y+Z) и x+y+z=1. Используя x и y, был разработан график МКО, на который нанесли область, включающую весь видимый спектр. Область ограничена с одной стороны кривой, называемой линией спектральных цветностей, на которой нанесены значения длин волн, с другой прямой линией пурпурных цветностей.

Поверхность, которая полностью поглощает все падающие на неё излучения называется черной. Полагаю, почему называют космические дыры черными, а не серыми или белыми, понятно, смысл тот же - они полностью поглощают все, что в них попадает. Представьте полый шар с черной внутренней поверхностью и узким отверстием, через которое внутрь шара попадает свет и, многократно переотражаясь, полностью поглощается. Отверстие при этом выглядит снаружи совершенно черным. Это устройство называют черным телом (точнее абсолютно черным телом), или полным излучателем, или излучателем Планка (в англ. Planckian radiator).

Если такой шар равномерно нагревать до высоких температур, стенки внутри начнут излучать видимый свет определенной цветности, от теплых до холодных оттенков. Это излучение черного тела можно увидеть в узком отверстии. Распределение энергии светового потока, который выходит из отверстия зависит только от температуры черного тела, которую называют цветовой температурой и определяют в Кельвинах. На графике МКО можно нанести точки, соответствующие цветностям черного тела при различных температурах. Соединив эти точки, мы получим линию цветностей черного тела или кривую Планка (Planckian locus). Вот так она выглядит.

Любой источник света обладает некоторой цветностью, которую можно нанести на график МКО в виде точки. Если эта точка не располагается на линии цветностей черного тела, выбирается ближайшая и по ней определяется коррелированная цветовая температура (ССТ - Correlated Colour Temperature). На графике показан участок графика МКО с нанесенными точками цветностей некоторых стандартных источников цвета.

В тех RAW-конвертерах, где для управления ББ используются инструменты Temp/Tint, Temp означает коррелированную цветовую температуру, т.е. точку на линии цветностей черного тела, а Tint - это расстояние от этой линии до точки цветности источника света. Из графика видно, что смещение Tint происходит в среднем диапазоне температур от зеленого к пурпурному, в теплом диапазоне от желтого к пурпурному, в холодном от сине-зеленого к пурпурному. В конвертерах обычно упрощают это и просто рисуют от зеленого к пурпурному, да еще и шкалу определяют в каких-то своих попугаях. Т.е. если Temp еще хоть как-то примерно совпадает в разных конвертерах, то c Tint "кто в лес, кто по дрова".

Есть несколько методов определения CCT, каждый из которых обладает некоторой точностью (погрешностью). Один из наиболее распространенных методов, используемых в RAW-конвертерах, приведен на сайте Брюса Линдблума в виде кода на языке си и является реализацией метода Робертсона. Чтобы конвертеру превратить множители баланса белого в Temp/Tint, необходимо:

1. множители превратить в значение XYZ
2. воспользоваться кодом Линдблума (или его модификацией).

Если со вторым пунктом все понятно, то с первым не все так просто. Мы можем превратить множители в значения RGB от 0 до 1: r=MAX(RGB)/R, g=MAX(RGB)/G, b=MAX(RGB)/B. Далее нужно воспользоваться матрицей преобразования цвета 3*3 из камерного пространства в XYZ. Такие матрицы многие конвертеры заимствуют из DCRAW, а Дейв Коффин их взял из Adobe DNG Converter.

Как получить эти матрицы для своей камеры? Берете RAW и конвертируете его в формат DNG. Далее можно воспользоваться программой ExifTool, которая выдаст нужную информацию из exif dng-файла, а именно (пример для Canon 5D Mark III):

Calibration Illuminant 1 : Standard Light A
Calibration Illuminant 2 : D65
Color Matrix 1 : 0.8689 -0.3995 0.0886 -0.3222 0.9142 0.4805 -0.0503 0.1306 0.6186
Color Matrix 2 : 0.6963 -0.0923 -0.0659 -0.4577 1.2254 0.2617 -0.129 0.2302 0.6166
Camera Calibration 1 : 1.0138 0 0 0 1 0 0 0 0.9784
Camera Calibration 2 : 1.0138 0 0 0 1 0 0 0 0.9784
Analog Balance : 1 1 1

В dcraw используется только Color Matrix 2. Это матрица преобразования из пространства XYZ (D65) в пространство камеры. Соответственно, чтобы выполнить преобразование в обратном направлении, нужно инвертировать матрицу (почитайте про обратную матрицу в математике).

Теперь обратите внимание, что в exif DNG по две матрицы (Color Matrix и Camera Calibration). Каждая из них рассчитана на свой источник света (Calibration Illuminant). Смысл в следующем. Если мы используем только одну матрицу цвета (Color Matrix), как в dcraw (а равно как и в RawTherapee, UfRaw и, возможно, еще где-то), мы получаем хорошую точность при температуре 6500K, а в остальных случаях несколько хуже. Для этого введены две матрицы, чтобы можно было интерполировать между ними для нужной температуры. И тут возникает вопрос: как узнать эту нужную температуру?

Ответ: методом научного тыка! Метод реализуется подбором (угадыванием) целевой температуры. Т.е. выбрали диапазон температур, выбрали ровно посередине, нашли интерполированную матрицу для этой температуры, умножили на множители ББ, получили значение XYZ, методом Робертсона получили температуру и сравнили с той, что выбрали для интерполирования, и если температуры не сошлись, уменьшаем диапазон. Т.е. используем бинарный или двоичный поиск.

Отдельного внимания заслуживают матрицы Camera Calibration и Analog Balance. В соответствии со спецификацией DNG, Camera Calibration также должна интерполироваться и вместе с Analog Balance использоваться для формирования матрицы XYZ -> Camera RGB. В итоге мы имеем ситуацию, когда одни конвертеры занимаются поиском подходящей матрицы, а другие просто используют матрицы для XYZ (D65) -> Camera RGB.

Кроме того, матрицы у разных производителей RAW-конвертеров могут отличаться (и должны отличаться), поскольку Adobe не является организацией, стандартизирующей матрицы преобразований, а производители камер не делятся своими секретами (а матрицы являются коммерческой тайной и того, кто опубликует эти сверхсекретные данные сразу посадят на кол или казнят более изощренным способом). Да и матрицу такую, по уму, вообще нужно создавать самому для своего экземпляра камеры. А то, получается, что сперва конвертер конвертирует значения камерного пространства через некоторую "среднюю по больнице" матрицу в XYZ (а зачастую в sRGB), а затем конвертирует через созданный профиль (если он создается для камеры) в целевое пространство.

Я, пожалуй, не стану более глубоко объяснять проблему несоответствия Temp/Tint в разных конвертерах, поскольку обычно на этом уровне слушатели (читатели) теряют связь с действительностью и впадают в нирвану. Поэтому подытожим, основные причины отличий Temp/Tint заключаются в следующем:

1. Различие в единицах измерения Tint
2. Использование разных методов определения Temp/Tint и способов реализации
3. Использование разных матриц XYZ->Camera RGB

 

 

 

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


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