UniWB: установка на камере и результаты использования

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

Как мы видим, внутрикамерные средства контроля экспозиции - гистограмма и индикация пересвета - не отражают реального состояния данных RAW:

  • камера может показать нормальную гистограмму и отсутствие пересвета, тогда как на самом деле в одном или двух каналов имеет место клиппинг (ситуация типична для съемки при дневном освещении)
  • и наоборот, камера может диагностировать пересвет, которого на самом деле нет (это часто бывает при искусственном свете).

Таким образом, любимый прием многих цифровых фотографов - контроль светов по гистограмме (Expose To The Right / ETTR) - начинает работать плохо, ибо реальных средств диагностики клиппинга у фотографа нет.

Частичным решением проблемы является установка баланса белого в камере, которая не исправляет разбаланс чувствительности по каналам. Другими словами, поканальные множители баланса должны быть одинаковыми или практически одинаковыми (при стандартных настройках множители у красного и зеленого каналов могут отличаться в 2-2.5 раза). Этот подход получил название UniWB и постепенно приобретает популярность у цифровых фотографов. Стандартного средства установки UniWB в современных цифровых камерах нет, однако камеру можно обмануть.

Лучший способ такого обмана, подходящий практически для всех камер, придуман Guillermo Luijk, этот способ заключается в синтезе правильной мишени установки баланса белого на мониторе компьютера. Я уже рассказывал об этом способе у себя в блоге, но пришло время для нового варианта текста. Собственно методика не изменилась, поэтому она приводится практически дословно, но исходный текст дополнен примерами, показывающими результат применения метода.

Необходимые приборы и материалы

  1. калибруемая фотокамера
  2. компьютер с цветным монитором
  3. графический редактор (фотошоп подойдет)
  4. программа dcraw скомпилированная под вашу операционную систему (скомпилированные варианты под Windows и Mac OS X можно взять отсюда).

Определение нейтральной точки камеры

Возьмем файл мишени с большим количеством цветов, например зафиксируем зеленый компонент на уровне 64, а красной и синей компонентами переберем все возможные значения от 0 до 255 (картинка слева; png-файл мишени можно скачать из attachments данной статьи внизу текста). Откроем этот файл фотошопом, выведем на экран в полный размер (100%) и сфотографируем:

  1. в RAW-формате
  2. со штатива
  3. максимально длиннофокусным объективом (используемое фокусное расстояние зависит от размеров комнаты с компюьтером) - чтобы максимально избежать виньетирования за счет косого падения света на матрицу;
  4. на максимально закрытой диафрагме (тоже для подавления виньетирования);
  5. слегка расфокусировавшись (чтобы не словить интерференцию между матрицей камеры и регулярной структурой экрана компьютера);
  6. ось объектива должна быть перпендикулярна плоскости монитора - нам нужно получить квадрат без искажений, проще всего это обеспечить вертикальностью монитора, горизонтальностью оси объектива и подбором высоты штативом;
  7. с достаточно длинной выдержкой, чтобы гарантировать непопадание в мерцание монитора (длинную выдержку обеспечит закрытая диафрагма)
По опыту автора, объектив с фокусным расстоянием 135 мм уже удовлетворяет критериям по виньетированию и искажениямю.

Далее сконвертируем RAW файл в формат tiff (16 бит, линейная гамма) с минимально-возможными преобразованиями и заданными единичными коэффициентами баланса белого:

dcraw -h -T -r 1 1 1 1 -k 0 -o 0 -4 имя-файла

Далее:

  1. Открываем полученный tiff-файл в Фотошопе, присваиваем ему какой-то RGB-профиль с гаммой 1.0 (в конце статьи можно скачать профиль AdobeRGB с гаммой 1.0).
  2. Выделяем снятую мишень (если снимали аккуратно, она должна получиться квадратной), остальное отрезаем.
  3. Делаем ресайз в размер исходной мишени (768x768)
  4. Переводим в Lab (для удобства дальнейшей обработки), на экране должно получиться что-то похожее на картинку слева: цвета сдвинуты (мы отключили баланс белого) и более блеклые.

Делаем следующие три операции:

1. Gaussian Blur с радиусом 2-3, чтобы шум и муар дальше не мешали

2. Корректирующий слой: подъем кривыми контрастности по каналам a-b (должна сохраняться нейтральная точка, например -127/-26 -- 127/26 по обоим каналам):

3. Еще один корректирующий слой с подъемом насыщенности до 98-99:

Далее находим точку, насыщенность которой не поднялась (она и есть самая нейтральная), запоминаем ее координаты по пикселям:

На исходной мишени (она того же размера, мы же делали ресайз) находим точку с теми же координатами X-Y и считываем RGB-значения (в том цветовом пространстве, в котором исходная мишень):

Генерация мишени для установки баланса

Создаем новое изображение (в том же цветовом пространстве, что и исходная мишень), заливаем его целиком найденным на предыдущем шаге цветом (у меня это 108-64-111 RGB для камеры Kodak SLR/c и 143-64-101 для камеры Canon 1D Mark III), получаем на экране мишеньку цвета magenta.

Фотографируем мишень (опять, лучше расфокусировавшись, длиннофокусной оптикой и т.п., все как выше) и ставим по ней мишени баланс белого. Проверяем результат:

  • cнятая нами мишень с новым балансом должна стать серой;
  • нейтральные объекты, снятые при дневном свете, - должны позеленеть (на экране камеры и при конверсии RAW c балансом 'as shot');
  • dcraw -w -v должна показывать коэффициенты конверсии близкие к 1.0 по всем каналам:
    /dcraw_dist -w -v _81E0897.CR2 Loading Canon EOS-1D Mark III image from _81E0897.CR2 ...
    Scaling with darkness 1026, saturation 15280, and
    multipliers 1.000000 1.013814 1.018557 1.013814
Как видно по выдаче dcraw, полученный баланс белого отклоняется от идеального примерно на 2%, что для всех практических применений более чем приемлемо.

Полученный баланс белого нужно запомнить в камере как один из пресетов (если камера это позволяет), либо же установить навсегда.

Демонстрация результатов

Как мы помним из предыдущей статьи, стандартные камерные установки ошибаются и при показе гистограммы и при индикации пересвета. Проверим новую установку для двух стандартных случаев.

Дневной свет

На картинке, сверху вниз, показаны (задний экранчик камеры грязный, да):

  • Гистограмма камеры при установке Auto White Balance - впечатление сбалансированности по каналам
  • Гистограмма камеры при установке UniWB - зеленый канал проработан куда лучше
  • Реальная гистограмма RAW-данных - повторяет UniWB
Как мы видим, UniWB-гистограмма куда лучше показывает реальный взаимный баланс каналов, хотя конечно гистограмма в линейном пространстве (нижняя) и гамма-скорректированная гистограмма (средняя) выглядят принципиально по разному.

Лампы накаливания

При свете ламп накаливания автоматический баланс белого провирается в другую сторону, а опять UniWB дает почти реальную картинку (сверху вниз):

  1. Auto White Balance показывает передержку по красному каналу (черные пятна вокруг куклы - области передержки)
  2. UniWB показывает хорошую проработку по красному и зеленому
  3. В реальных данных есть еще полстопа запаса по красному и зеленому.
Опять, UniWB гораздо ближе к реальности. И опять подстройка настроек контрастности помогла бы получить еще более точное приближение камеры к реальности.

Что мы потеряли и что приобрели

Приобретения

Поканальная гистограмма и области пересвета стали гораздо ближе к реальным данным RAW. Это позволяет лучше контролировать экспозицию сразу после съемки при любых условиях освещения.

Потери

  • Потерян реально выглядящий просмотр на камерном экранчике, показать результат модели (или, тем более, жене) уже нельзя, увидят зеленый оттенок и выцарапают глаза.
  • Снимать в JPEG с такой настройкой бессмысленно.
  • Потеряна возможность конверсии с балансом белого 'As Shot'.
Среди всех потерь, наиболее серьезная - последняя, ибо конверсия As Shot сильно ускоряет постобработку. Можно рекомендовать снимать первый кадр в новых световых условиях с автонастройкой, а остальные - уже с UniWB.

Comments

А чем "as shot" лучше, чем

А чем "as shot" лучше, чем "auto white balance" в конвертере? Насколько я понимаю у камеры нет какого-то отдельного датчика баланса белого и автомат баланса белого работает исключительно программно по raw-данным?

На самом деле у ряда камер

На самом деле у ряда камер (например, у Никонов) датчик баланса белого отдельный и по raw-данным не работает. Те же камеры, где баланс устанавливается по данным raw, легко отличить с помощью небольшого трюка - о котором мы ещё напишем.

Алгоритмы все-таки разные. И

Алгоритмы все-таки разные. И Кэноновский мне вполне приятен - если нужно что-то сделать быстро, а качество не очень важно.

На самом деле, если пресеты

На самом деле, если пресеты переключаются легко, то можно ставить UniWB на время съемки тестового снимка, а потом возвращать auto wb

У меня workflow ровно

У меня workflow ровно обратный - я все настройки делаю по первому снимку серии, а потом копирую их на все остальные.

Но последнее время склоняюсь к идее отключить экранчик совсем нафиг.

Что значит "копирую"? По

Что значит "копирую"? По первому снимку откорректировал экспозицию и снимаешь. В каком положении потом стоит WB - уже не важно.

Отключить экранчик - это хорошо, но тогда где польза от UniWB?

Копирую - это означает

Копирую - это означает "копирую все положения движков в конверторе".

Если отключить экранчик - пользы от UniWB естественно не будет.

Так я говорил про съемку, а

Так я говорил про съемку, а не обработку.

Первый снимок - тестовый, для него ставим UniWB, определяеем экспозицию, стираем если совсем не надо, а остальное снимаем с авто, чтобы превьюшка была хорошая. Если первы не стерли, то при постпроцессинге просто берем параметры со второго снимка

спор ни о чем :)

Помогите

не могу набрать комманду (первую в статье)
пишет Will not write am image to the terminal

что я не так делаю? вызвал cmd, вошел в папку с прогой и файлами CR2
набираю полностью строку как вы написали - и получаю это сообщение!

вроде разобрался))) у

вроде разобрался)))
у параметра "-с" не нужен "0" судя по хэлпу

О, это у меня была старая

О, это у меня была старая версия. -с в текущей версии просто не нужен, там нужен -o 0

Сейчас исправлю,

Выставил на 40D баланс белого

Выставил на 40D баланс белого по абсолютно черному кадру - результат:

Loading Canon EOS 40D image from IMG_5832.CR2 ...
Scaling with darkness 1024, saturation 16224, and
multipliers 1.000000 1.000000 1.000000 1.000000

Во, это и есть тот способ,

Во, это и есть тот способ, который мы хотели предъявить народу как простой.

Проблема в том, что на моем 1D-mk3 он с новым firmware перестал работать.

Сейчас еще попробую.....

Что-то ничего у меня не

Что-то ничего у меня не выходит.
После таких слоёв Sat везде 100%, до них -- везде порядка 32%, картинка изначально гораздо насыщенней, чем показано...

Но таки получилось

Но таки получилось сделать

1.037190 1.057851 1.000000 1.057851

Это Pentax K10D, цвет для моего калиброванного монитора -- RGB:(106,64,80).

Попробывал данный способ...

Попробывал данный способ... Но ББ, так то оно так, я тоже думал...во интересно, реальная гистограмма. Но потом в конвертере, все равно меняешь приблизительно на ту температуру на которой бы снимал камерой. И получается в итоге тоже самое, разбаланс каланов и пересвет того канала, при температуре (реальной) которая бы получилась стандартно с камеры... Тогда в чем смысл? Я понимаю избежать реально пересветов или недосветов... А так каналы ровные, а потом тоже самое делать в конвертере, что могла бы сделать камера.

Смысл именно в контроле. Если

Смысл именно в контроле. Если исходные данные не обрезанные, то и результат конверсии будет лучше

Реальной разницы не заметил,

Реальной разницы не заметил, пробывал разные сюжеты, на глаз разницы не видно...особенно думал лучше будет при контровом свете с завалом переднего плана или пробоем фона, но по гистограмме вроде хорошо, а после конверсии тоже самое! Может есть смысл показать конечный результат на реальном фото-примере!?

UniWB никак не влияет на

UniWB никак не влияет на данные RAW. Поэтому если у вас при UniWB и без него - одинаковая экспозиция, то и результат будет абсолютно одинаков.

Соответственно, UniWB имеет смысл рассматривать как способ контроля экспозиции в светах и не более того. Если вы по результатам рассмотрения UniWB-гистограммы поправили экспозицию - значит смысл появился.

Попробуйте в конверторе дать

Попробуйте в конверторе дать отрицательную компенсацию экспозиции. Если не помогает, попробуйте другой конвертор.

Здравствуйте! Интересует

Здравствуйте! Интересует вопрос, как определяется точка, насыщенность которой не поднялась после подъема насыщенности на 98-99%?

Вопрос непонятен. Если

Вопрос непонятен. Если насыщенность не поднялась, возможно точка была нейтральной?

Olympus E-520

Решил проверить данный способ на своём 520-ом Олике. Проверял довольно небрежно, без штатива, и немалой дисторсией квадрата, но в PS подтянул, замерил (кстати, насыщенность на 100 поставил - нейтральную точку видно сразу) и снял ББ.
Результаты впечатляющие, правда, дополнительно подвинул ползунок Amber в камере на -1 (при работе гистограмма правильная без поправки):
1.000000 1.007874 1.007874 1.007874
Теперь буду пробовать съёмку с этим пресетом))
Огромное спасибо за статью!

Чисто теоретически...

Чисто теоретически... Масштабирование каналов при применении ББ так или иначе усиливает шумы. Тогда для наименее шумного снимка имеет смысл вообще отказаться (свести к абсолютному минимуму) от программной коррекции, добиваясь нужной передачи цветов фильтрами на объективе с установкой UniWB. На практике задолбаешься, конечно, но в принципе это способно дать выигрыш по качеству?

В первом приближении дело

В первом приближении дело выглядит так как вы написали: экспонируя все каналы оптимально (так чтобы максимумы на белом были бы в одном и том же месте, там где решили) - мы понижаем шумы в (обычно) слабых каналах.

Второе приближение: сбалансировать каналы мы можем только понижением (эффективной) чувствительности зеленого (или какой там будет самый сильный). Следовательно, растет выдержка (считаем что диафрагму мы ставим из целей снимка, чтобы обеспечить нужную глубину резкости). Следовательно - времяпеременная часть шума вырастет. На современных камерах - незначительно, если речь идет об "обычных дневных выдержках". Если же снимаем ночью и, скажем, вместо 30 секунд вынуждены поставить 2 минуты - это уже очень большая разница.

Добрый день.

Добрый день.

1) Пробовал сделать юнибб, dcraw по указанной ссылке скачать не удалось, там предлагаются какие-то image editor-ы. Скачал программу на стороне, результат получил такой:

Loading SONY NEX-F3 image from DSC00255.arw ...
DSC00255.arw: Cannot use camera white balance.
Scaling with darkness 0, saturation 4095, and
multipliers 1.000000 1.000000 1.000000 1.000000

Проверил ранее сделанные равы с разными б_балансами, множитель везде оказался равен нулю. Я так понимаю, вот это "Cannot use camera white balance" - означает что dcraw просто не может прочитать wb этой камеры?

2) Пожалуйста, объясните, что означает "saturation 4095"? это насыщенность цвета, которую камерный профиль прибавляет к "настоящему" цвету камеры?

Про saturation проще ответить

Про saturation проще ответить: darkness (темнота) 0, saturation (насыщение) 4095 означает, что весь диапазон данных - от 0 до 4095. Saturation тут - в смысле "насыщение" (максимум) а не насыщенность. Cannot use camera white balance - это хуже. Дело в том, что в ряде версий dcraw была ошибка именно с камерами Sony, отчего она не могли читать ББ для этих камер. Ищите свежую dcraw, версии 9.20, там ошибка исправлена.

>Потеряна возможность

>Потеряна возможность конверсии с балансом белого 'As Shot'.

Только что глянул в вывод команды exiftool -v foo.cr2:

  1. | | | 27) ColorData4 (SubDirectory) -->
  2. | | | + [BinaryData directory, 2674 bytes]
  3. | | | | ColorDataVersion = 7
  4. | | | | ColorCoefs (SubDirectory) -->
  5. | | | | + [BinaryData directory, 210 bytes]
  6. | | | | | WB_RGGBLevelsAsShot = 1024 1024 1024 1024
  7. | | | | | ColorTempAsShot = 4071
  8. | | | | | WB_RGGBLevelsAuto = 2127 1024 1024 1889
  9. | | | | | ColorTempAuto = 4398
  10. | | | | | WB_RGGBLevelsMeasured = 2125 1027 1020 1887
  11. | | | | | ColorTempMeasured = 4398
  12. | | | | | WB_RGGBLevelsDaylight = 2175 1024 1024 1553
  13. | | | | | ColorTempDaylight = 5200
  14. | | | | | WB_RGGBLevelsShade = 2533 1024 1024 1317
  15. | | | | | ColorTempShade = 7000
  16. | | | | | WB_RGGBLevelsCloudy = 2346 1024 1024 1427
  17. | | | | | ColorTempCloudy = 6000
  18. | | | | | WB_RGGBLevelsTungsten = 1533 1024 1024 2320
  19. | | | | | ColorTempTungsten = 3200
  20. | | | | | WB_RGGBLevelsFluorescent = 1920 1024 1024 2180
  21. | | | | | ColorTempFluorescent = 3769
  22. | | | | | WB_RGGBLevelsKelvin = 2175 1024 1024 1553
  23. | | | | | ColorTempKelvin = 5189
  24. | | | | | WB_RGGBLevelsFlash = 2399 1024 1024 1419
  25. | | | | | ColorTempFlash = 6160

Если я правильно понимаю, камера всё равно пишет в метадату нужные Вам данные.

UniWB мне, впрочем, не нужен, и у меня некенон.

Пихните экзифтулом одно в

Пихните экзифтулом одно в другое, у него же есть режим работы "по папкам" (вместо файла можно указать папку) и рекурсивный (-r).

Ну и оригиналы предварительно схоронить, от греха.