Баланс белого в 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. Такие матрицы многие конвертеры заимствуют из Adobe Camera RAW. Можно, конечно, создать свои матрицы, только для этого придется заполучить все эти камеры, да еще и с объективами и откалибровать, т.е. получить примерно те же матрицы. Понятно, что такое под силу только крупным компаниям.

Как получить матрицы для своей камеры из ACR? Берете RAW и конвертируете его в формат DNG с помощью Adobe DNG Converter (для Windows, для Mac OS). Далее можно воспользоваться программой 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, Color Matrix определяет матрицу для некоторой референсной камеры и она одинакова для всех камер конкретной модели. А вот Camera Calibration рассчитывается для каждого экземпляра камеры (необходимые данные для этого есть в exif RAW-файла). Camera Calibration должна также интерполироваться, согласно спецификации, и вместе с Analog Balance использоваться для формирования матрицы XYZ -> Camera RGB. Однако на практике CameraCalibration1 и CameraCalibration2 одинаковы и интерполяция на самом деле не нужна для них. В итоге мы имеем ситуацию, когда одни конвертеры занимаются поиском подходящей матрицы (ACR), а другие просто используют матрицы для XYZ (D65) -> Camera RGB (RawTherapee).

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

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

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

Так ли важна точность CCT/Tint? Лично меня слабо интересует точность, но иногда цифры могут сигнализировать о проблемах, которые подуставшим глазом не видно. То, что я вижу в RawTherapee, при всем моем уважении к этому конвертеру и разработчикам, объективно вызывает определенную неуверенность.

И в заключение отвечу на один интересный вопрос: в exif-данных RAW-файлов Canon множители ББ сопровождаются значениями CCT, которые не совпадают с тем, что выдает ACR. Где более правдивые данные? Поскольку, я детально знаю как рассчитывается CCT/Tint в ACR, могу сказать, что значения в ACR выглядят вполне убедительными. А вот как их рассчитал Canon неизвестно. Тем не менее, по значениям WB RGGB Levels Daylight из exif рассчитывается матрица Camera Calibration.

 

 

 

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


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