Кратко о чувствительности цифровых камер

Я несколько опережаю события и фактически презентую незаконченное микро-исследование, но мне кажется полезным немножко обсудить методику с сообществом, прежде чем доделывать работу до конца.

Текущие стандарты (ISO 12232) на чувствительность цифровых камер довольно креативны: специфицируется значение, которое должен иметь средний тон (18%-й серый) в sRGB-файле, а про RAW ничего не говорится. Неявно предполагается, что RAW обрабатывается каким-то проявителем конвертором и, соответственно, чувствительность оценивается у всего комплекса камера-конвертор. Собственно, оно так и было в пленочном мире, пока не проявишь - ничего не понятно.

Вместе с тем, линейная передаточная характеристика современных цифровиков и доступность RAW-данных в цифровом виде позволяют подойти к проблеме и с другой стороны.

Методика

Где должен быть 18% серый в RAW-данных? Они линейны, значит получается что на 18% от максимума. Да, при этом мы оставляем всего 2.45 стопа в светах, но как минимум для низкоконтрастных сюжетов это вполне оправданно: полутона сразу окажутся там, где им и предписано.

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

  1. Если камера не вычитает уровень черного (bias), а, например, RAW-данные с камер Canon именно такие, то этот черный надлежит вычесть из всех значений в RAW-файле самостоятельно.
  2. Нужно еще снять кадр с пересветом и определить таким образом уровень насыщения у камеры (вычтя оттуда уровень черного при необходимости) - это будет весь размах сигнала.

Кроме того, мы помним, что экспонометры принято калибровать не на 18%, а на 12.5-14 и если средний тон мы получим на этом уровне, значит нам дают в светах не 2.45 стопа, а 2.7-3.

Результаты

Была взята камера Canon 450D и вышеописанная операция была проделана при дневном (пасмурном московском) свете. Серая карта (лист пенокартона) занимала весь кадр, снимал с расфокусировкой и все такое. Что получается:

  1. Показания экспонометра камеры и внешнего экспонометра (Sekonic L-558) полностью совпадают.
  2. Показания экспонометра и, собственно, результаты съемки одинаковы для всех режимов замера камеры и всех ISO.
  3. И результаты эти таковы:
    • Для ISO100: серое поле в зеленом канале имеет усредненное значение 1409, а точка насыщения - 13579 (обе цифры - после вычитания черного).
    • Для ISO1600: серое поле имеет значение 1540, точка насыщения 15075

Иными словами, константа калибровки экспонометра - 10.2-10.3%. Это на четверть стопа меньше, чем констата калибровки Sekonic, а если считать стандартом серую карту - то на 0.8 стопа меньше.

Выводы или как к этому относиться

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

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

Чувствительность пленки нет смысла рассматривать без учета процесса проявления. Можно считать, что стандартный проявитель конвертор (DPP в случае кэнона) делает push на 0.8 стопа (отчего снятая серая карта оказывается в нужном тоновом диапазоне), а если мы пользуемся собственным проявителем (без тоновой кривой выгнутой вверх) то надо считать, что чувствительность у нас не ISO100, а ISO58.

Понятно, зачем так делают производители: передержку не спасти никак, а лишний шум в тенях большинство потребителей не заметит.

В-общем, старые пленочные приемы, когда снималась серия тестовых кадров (и серая шкала в эти тесты входила) и данному сочетанию "партия пленки-режим проявки" присваивалась чувствительность - они никуда не деваются и могут быть с успехом использованы и в цифровую эру. Тем более, что эксперимент простой, с помощью средств из LibRaw можно уложиться в несколько минут (собственно, 4channels почти все делает).

Желающим повторить оный эксперимент хочу отдельно указать, что Photoshop показывает 16-битные значения в шкале 0..32767 т.е. банально делит все на два. Поубивав бы.

Кроме того, стало примерно ясно, как относиться к цифрам чувствительности от DxO. Для 450D они указывают ISO80 для установленных на камере ISO100. Это поправка не относительно 18%-го серого, а относительно принятой сейчас калибровки экспонометра (12.5%)

Comments

О! То-то я меньше +1 на камере не держу...
Надо будет как вернусь с Индии померять точнее.

Я уже все как-то померял для 350d :) Поэтому у меня тоже обычно положительная экспокореркция.

Производители полагабют, что в RAW 18% серый должен быть на том месте, которое превратится в 18% в sRGB :) Отсюда - его уползание вниз. Ты же помнишь, что внутрикамерный конвертор у многих камер по умолчанию не использует верх ДД.

Ааааааааааааааааааааа ......... :)

Что значит "не использует"? Там тоновая кривая вроде вот этих вот: http://www.libraw.su/articles/ettr-underexposure-wedges.html

Аааааааааааа ..... уже по другому поводу :)

Ты же читал
http://skoblov.livejournal.com/23906.html

там тема про "запас в светах" и последний график, наглядно демонстрирующий его наличие. Ну и цифры в таблице, в которых видно, что при jpeg=255 RAW еще очень далек до максимума.

мы же это обсуждали кучу раз.

350D (12-битная) - это другая статья, в новых камерах все иначе. Интересно, кстати, что оно показало бы для автоматического баланса, у тебя же оно не уравняно там.

Руки дойдут - сделаю. Пока что я вижу на практике, что запас есть.

ББ у меня стоял какой-то реалистический, кажется. Да и автоматический ББ в идеале лишь выровнял бы перекос по каналам, и усреднил запас, который у меня присуствует во всех каналах, но сильно разный.

Ну какой он реалистический.
Вот в среднем тоне R/G/B=120/146/156

Сделай файл с такой заливкой, подывысь.

<p>
Спасибо, интересные наблюдения.
</p>

<p>
Интересное рядом. Провёл эксперимент на дому.
</p>

<p>
Подопытные:<br/>
* Canon EOS 40D;<br />
* X-Rite Mini Gay Balance Card;<br />
* три энергосберегающих лампы непонятного происхождения (не я покупал), светящие в потолок.
</p>

<p>
Вычислял средние по RAW каналам из центрального квадрататика 200&times;200 пикселей (4 раза по 100&times;100 пикселей).
Производилось ли вычитание чёрного не знаю, так и не разобрался ещё, как это в LibRaw-0.7.0-a3 работает (текст программы <a href="http://forum.ixbt.com/topic.cgi?id=20:25524-16#409">здесь</a>).
Итого:<br />
* R&thinsp;=&thinsp;12.1&thinsp;%; G<sub>1</sub>&thinsp;=&thinsp;13.2&thinsp;%; B&thinsp;=&thinsp;8.3&thinsp;%; G<sub>2</sub>&thinsp;=&thinsp;13.2&thinsp;%;<br />
* конвертация в Canon DPP, sRGB, PS: Faithful, все настройки &laquo;по нулям&raquo;, ББ &lauqo;авто&raquo;: R&thinsp;=&thinsp;165; G&thinsp;=&thinsp;119; B&thinsp;=&thinsp;78;<br />
* конвертация в Canon DPP, sRGB, PS: Faithful, все настройки &laquo;по нулям&raquo;, ББ &lauqo;пипеткой по карте&raquo;: R&thinsp;=&thinsp;G&thinsp;=&thinsp;B&thinsp;=&thinsp;119.<br />
</p>

<p>
Удивительное рядом!
В RAW 13 процентов, в sRGB&nbsp; 18.
</p>

Об том и речь - <i>фирменный проявитель</i> делает пуш на 2/3 стопа.

Вдогонку - если вы filtration_mode не меняете, оставляя умолчание, то LibRaw черный - вычитает.

Правда в этом месте были всякие ошибки-недоделки, которые к BETA2 вроде как все выловлены. Лучше пересобрать
http://www.libraw.su/download#beta

И еще вдогонку.
Был неправ в предыдущем комментарии. Если вы делаете unpack(), а более ничего не делаете, то для кэноновских файлов проведено подавление banding, а черный не вычтен.

Итого, константа экспонометра не 13% а процентов 8-10, а может и меньше (уровень черного около 1024, а какой вы намеряли максимум - не знаю, нужно кадр на насыщение снимать на самом деле).

Я вчера в этом месте сначала ошибся - если черный не вычтен, то у 450D константа экспонометра получается 0.17

Вот это, кстати, для меня загадка. Читаю уже минут пятнадцать документацию по LibRaw, где и как уровень чёрного вычесть найти не могу. Скорее всего, не там смотрю&nbsp;:-( [идёт читать документацию дальше]

Уровень черного лежит в imgdata.color.black
http://www.libraw.su/docs/API-datastruct-rus.html#libraw_colordata_t
(для PhaseOne - в imgdata.color.phase_one_data)

Там, к сожалению есть бардак, который унаследован от исходной codebase (dcraw), ну и от самих камер
- у некоторых камер все вычтено, париться не надо
- у которых не вычтено - рассчитываем единствнный параметр black который и будет вычтен на этапе постпроцессинга (если вы им пользуетесь)
- все более сложные случаи сводим к единственному black (все остальное вычитаем на этапе распаковки).

Пример вычитания черного мимо постпроцессинга - samples/4colors.cpp (от BETA3, вышедшей минут 20 назад, http://www.libraw.su/download#beta )

Спасибо.

Кстати да, про насыщение не подумал. Спасибо, уберегли от глупой ошибки. В imgdata.color.maximum у меня ажно 16224 лежит при том, что на ISO100 камера (Canon EOS 40D) даже 14 тысяч намерить не может.

На этих выходных поковыряюсь с новой версией LibRaw с уровнем чёрного и насыщением. Дюже интересно с экспозамером и программными гламуризаторами поиграться.

Насколько я понял, если <u>до</u> вызова LibRaw::unpack() сделать imgdata.params.filtering_mode = LibRaw_filtering( LIBRAW_FILTERING_NOZEROES | LIBRAW_FILTERING_NOBLACKS ), то чёрный вычитаться не будет, а подавление banding всё равно сработает. Правильно понял?

Неправильно поняли :)

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

http://www.libraw.su/docs/API-datastruct-rus.html#LibRaw_filtering

Да, дурная архитектура, но мы пока принципиально поддерживаем полную совместимость с dcraw по фичам т.е. можно собрать эмулятор, который будет производить битово-одинаковые результаты (с точностью до одного бага обработки PhaseOne, который таки поправили навсегда)

<em>> Предполагается, что если вы это выключили - то вам нужны сами исходные данные и вы знаете что с ними делать (например, посчитаете уровень черного сами по рамке).</em>

Именно это мне и нужно. Уровень чёрного (и не только) как раз сам хочу посчитать.

Кстати, подавление бандинга можно где-нибудь выключить? Чтобы получить as RAW as possible.

Да, _NOBLACKS вам выключит подавление бандинга. А уровень черного (средний между для четных и нечетных строк) - будет посчитан.

as RAW as possbibe - это LIBRAW_FILTRATION_NONE, который вообще весь возможный препроцессинг отключает (конкретно у Canon там только _NOBLACKS имеет значение).

LibRaw is very well documented, unfortunately it is all in C(++)

LIBRAW_FILTERING_NOZEROES =1, // no remove zeroes
LIBRAW_FILTERING_NOBLACKS =2, // no black subtraction
LIBRAW_FILTERING_NORAWCURVE =4, // no raw data postprocessing (e.g. PhaseOne corrections etc)
LIBRAW_FILTERING_NONE =7, // (_NOZEROES | _NOBLACKS | _NORAWCURVE)

Отлично, спасибо.

Вопрос. Подавление бандинга относится к препроцессингу черного?

Yeah.

Но чтобы быть полностью честным, оно есть только для Canon (рассчитывается для всех камер по рамке) и PhaseOne (данные для этого дает сама камера)

> еявно предполагается, что RAW обрабатывается каким-то проявителем конвертором

Внутрикамерным. Остальные должны подгоняться под него.

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

Кстати, откуда дрова про принятую сейчас калибровку экспонометра? Например, есть точное подтверждени от секоника, что он калибрует под 12,5?

У него прямо в инструкции оная константа написана.

Вот для 758-го
http://www.sekonic.com/upload/files/L-758_Operating%20Manual_English.pdf
9-й раздел Technical Data (стр 60):
Reflected Light Metering: K=12.5

Спасибо!

Ага, ты прав.

По счастью, для тамошнего С (340) это дает Reflectance в ~12% т.е. никакой практической разницы нет для замера полусферой.

Но вообще, мысль забавная, надо ее обдумать

Вообще, я так поискал, действительно похоже, что экспонометры где-то находятся в 12-14%.

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

три вопроса.
1) 18% в sRGB в гамма 1.8 это вроде не 18% в RAW. может быть нужно пересчитать % по гамме?
2) практический вопрос. получается, что ACR тоже делает для камер Canon пуш +2/3?
3) практический вопрос. правильно ли я понял, что рекомендуется всегда делать коррекцию экспозиции +2/3 при съемке и потом -2/3 в конвертере? смысл получается в том, что будет меньше шума и выше ДД.

1) Первый вопрос меня ввел в ступор. sRGB - это gamma 2.2 (это для simplified, для настоящего там чуть сложнее). Средний тон в RGB с gamma 2.2 должен иметь значения R-G-B равные 119.

2) ACR стандартно делает push около стопа. Это некая стандартная величина, на самом деле она у разных камер - разная. Вопрос нуждается в изучении, которое запланировано, но еще не проведено.

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

Как-то так. Надеюсь, окончательно запутал.

1) просто забыл константу :-)
3) пусть получил я некое эффективное ISO или запас, что с ним делать дальше? просто как FYI или всё же делать сдвиг при съемке?

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

Если мы по этому замеру снимем, то объект отрендерится туда, куда мы намеряли собственно снимая серую (белую) карту.
Если мы дадим экспопоправку в +3.2 стопа (пусть мы намеряли, что реальный серый отклик - 10.2% от максимума, как в моем эксперименте с 450D), то объект отрендерится в самый максимум, какой может быть без клиппинга в зеленом канале.

Теперь, допустим мы замеряли не основной объект, а самые света, где мы хотим получить следы фактуры (про highlight recovery забыли пока). В предыдущем абзаце ответ - дадим поправку +3.2 (относительно замера светов) и света окажутся ровно там, где мы хотим. Это, собственно, замер "как слайд снимали".

Headroom по двум другим каналам (при дневном свете) - больше.

Что будет с цветными объектами при дневном свете:
- зеленые в насыщение попадают раньше
- красные и синие - позже (при большей передержке относительно замера)

Что будет с другим освещением
- при переходе в теплую область разбаланс чувствительности каналов (эффективный) уменьшается, headroom увеличивается.

Что со вспышкой:
- т.к. светим мы на объект, а ярких светов обычно нет, то правильно дать вспышке коррекцию в плюс. Примерно +1. Но у современных камер много лишнего интеллекта, рекомендуют вспышечную коррекцию задавать на вспышке, а не на камере.

Спасибо за объективные пояснения насчет цветопередачи в RAW-формате.