Экспонометрия, ISO, RAW, JPEG и вот эта вот вся каша

Адамс предписал Зоны. Одиннадцать штук.
Это имело последствия.
В цифровом случае, похоже, тяжелые.
Илья Борг

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

Несмотря на это, начну в очередной раз по порядку:

  1. Как нам пишут в википедии, есть 5 стандартных (описанных в стандарте) способов измерения чувствительности, включая измерения по выдаваемым камерой JPEG-файлам.
  2. Производители с удовольствием этим пользуются.
  3. Однако вот методы измерения (как минимум, оба, попавшие в стандарт ISO из CIPA-004) камерный процессинг никак не ограничивают.
  4. В результате появляются многочисленные монстрики:
    • Фейковые промежуточные ISO на камерах Canon (скажем, ISO160 на 6D - это сенсор поставленный в режим ISO200 и передержка в 1/3EV)
    • Фейковые нижние ISO на Canon
    • Просто безумие у Olympus: ISO100 не просто фейковое, а чувствительность его выше, чем у ISO200
    • Отсутствие влияния ручки ISO на RAW, как у Sigma DPx Merrill: все на ISO100, если вы поставите 1600, то результат в RAW будет как у 100 с той же экспопарой (то есть 4 стопа недодержки)
  5. Производители это (недодержку RAW и вытягивание JPEG) делают из вполне понятных соображений
    • На низких ISO - остается больше места в светах, проще жить с экспозиционными ошибками.
    • На высоких ISO - можно цифирку побольше нарисовать.

Но что происходит дальше? А дальше фотограф, снимавший в RAW, несет свои файлы в конвертор. В родной. Или в адобовский. И он ожидает увидеть RAW с примерно такой же яркостью, что и у камерного JPEG. А если он этого не видит - он пугается и плачет (замечание в сторону: трудности в освоении RPP у пользователей современных камер связаны, в частности, с тем, что изображения выглядят темными в сравнении с привычными).

Авторы конверторов не хотят, чтобы пользователь пугался и плакал - и вносят скрытую экспопоправку (см. по ссылкам выше). В случае Adobe она состоит из почти не скрытой части (в частности, Adobe DNG Convertor пишет ее в тег BaselineExposure) и скрытой, но вроде бы одинаковой - добавляется ~0.3EV, что соответствует в sRGB подъему от 118 (где должен быть 18%-й серый по науке) до 127 (где этот среднесерый ожидает увидеть среднесерый же пользователь).

Ужас в том, что эти поправки разные:

  • Для разных камер.
  • Для одной камеры при разных установках чувствительности.
  • (бывает редко, вроде бы не бывает большой разницы) для одной камеры, одной чувствительности, но камера перекалибровалась.

В результате, возникают всякие странные городские легенды, примерно вот такие:

  • У камер пананикон света тянутся лучше, чем у солимпусов.
  • У камер нисоник больше ДД в светах, чем у пентонов.
  • Шумы на ISO160 меньше чем шумы на ISO200 (это в одном режиме сенсора!)
Ну и так далее.

Проиллюстрирую этот бардак следующим примером.

Вот нормально проэкспонированный кадр, как его показывает FastRawViewer 1.0 при нулевой экспопоправке (увеличивается по клику):

Вот он же, но в левой части JPEG-рендеринг из камеры, как мы видим изрядно светлее

Но нам интересно не это, а индикация пересветов. Если смотреть на RAW как оно есть, то чуть заметный пересвет начнется при коррекции +1/3EV, а при +1/2 будет уже совсем заметно:
Пимпа OE включена, а в таблице статистики нам показывают, что без коррекции было пересвечено 18 пикселов (из 36М), а с коррекцией +0.5 - 42k.

Откроем теперь этот же файл в Adobe Camera Raw, поставим там "все по нулям" и включим индикацию пересветов:

Ой, оно красненькое. А все по нулям. Но мы сделаем ОТРИЦАТЕЛЬНУЮ КОРРЕКЦИЮ
Почти помогло (разница за счет того, что кривые контраста немного разные, а ACR считает пересвет непонятным мне образом, но втч и по рендеру)

Вот, казалось бы, чудо. Если изображение было пересвечено (в RAW), то как его можно было спасти отрицательной коррекцией?

Объяснение простое: ACR-овские 0.0 это (для данной камеры при данном ISO) +0.65. А -0.65 - это, на самом деле, 0.0.

А если бы у меня была другая камера, то на ISO200 адобовский 0 был бы в +0.8, а на ISO100 - в -0.54 (к BaselineExposure прибавить 0.3). А экспонометр у этих двух камер мерял бы на одном ISO - одинаково.

Риторические вопросы:

  • Способствует ли такой подход пониманию того, что реально происходит при съемке в RAW?
  • Способствует ли такой подход использованию разных камер?
  • Нужно ли делать так, как Adobe (т.е. "при всем по нулям" - матчить JPEG по яркости) или нужно делать как RPP?

P.S. Риторический ответ: на массовую аудиторию, увы, нужно делать "под Adobe/под JPEG". Потому что иначе массовый пользователь пугается и плачет. Для не-массовой, соответственно, давать отключить.

Comments

И хотелось бы чтобы они "давали отключить" уже с какого-нибудь Lightroom 6 и ACR 9. А то уже надоело... Переконтрастшенные картинки в LR уже надоели, особенно после того что я вижу в FastRawViewver, а использовать на постоянку RPP нет большого желания из-за управления и отсутствия нормального каталога.

Теоретически (не проверял) можно наверное похакать DCP для камеры.

"похакал" вспомнив старый разговор в блоге Дмитрия Новака.
https://dl.dropboxusercontent.com/u/17316825/2.png - это FastRawViewer c кастомным ББ и Л-кривой против этого же фото открытого в LR 5.7 c профилем Adobe.
https://dl.dropboxusercontent.com/u/17316825/1.png - а вот уже та же фотография но с хакнутым профилем для Е-М1 от HueLight, версия V30, Medium. Использовалась, наверное, вам знакомая утилита dcptool. Прочие крутилки-вертелки в лайтруме не трогались, за исключением всё того же кастомного ББ по той же точке, что и в FastRawViewer.
Что скажите?

Ну вроде больше соответствия по общей яркости?

В FRV надо ставить кривую Adobe Linear или Standard Tone, они ближе к адобовской линейной.

Соответствия по яркости и контрасту в разы больше. В FRV не вижу смысла ставить Adobe Linear или Standard Tone поскольку "адобовская линейная" совсем, как вы знаете, не линейна. То как они с ней издеваются над всеми изображениями заслуживает "похвалы"... Поэтому я продолжаю искать способ, как сделать так, чтобы в лайтруме увидеть картинку, как в FRV при L-кривой.

Готового рецепта у меня нет, но действовать надо как-то так
1) Взять серую шкалу (хоть с IR, хоть откуда), отключить в FRV Color Management, заскриншотить. Это будет нужный вам рендеринг, переведенный в sRGB
2) Подобрать кривую в DCP, чтобы повторяла

> Подобрать кривую в DCP, чтобы повторяла

вот надо как раз добавить feature... в rawdigger например (типа profile edition)... автоматизация подбора кривых для таких-то конвертеров

Z / V

Да, это давно болтается в TODO.
Только надо еще TIFF/PNG/JPG научиться читать (а для JPG - еще и в YCC-виде тоже потому что никто не видел глазами как оно там).
Постепенно сделаем.

A просто поставить в dcp d тэг 0xc7a5 с нужным значением не пробовали?

я практически переделываю dcp для компенсации обеих скрытых поправок в ноль, вставляю туда (в dcp) явнo линейнуй кривую (ToneCurve = 0,0; 1,1) и invariant/untwist'ю... отдельное спасибо Sandy Mc-как-его-там за dcptool.

Z / V

От вас этот способ и раздобыл, общаясь в другом блоге. Вот только что есть "invariant/untwist'ю"?
Я правлю ExposureBaseline в 0 (если стояло что-то другое) и делаю линейную кривую.
PS - вы правите адобовские профили (в них уж очень много данных) или отдельно созданные/скаченные?

> Я правлю ExposureBaseline в 0

если смотреть на сумму обеих поправок у Adobe - одна в коде ACR/LR и одна в dcp профиле - соотв. я в свой dcp профиль ( тэг BaselineExposureOffset ) ставлю обратную величину к тому что в коде ( что видно в тэге BaselineExposure если сконвертировать в DNG используя Adobe продукт - ACR или DNG converter ) ... ну а для случаев когда в коде для разных ISO разные поправки (как для ненастоящих низких ISO, так и для ненастоящих высоких ISO), то я просто ненастоящие ISO не использую.

Z / V

> PS - вы правите адобовские профили (в них уж очень много данных) или отдельно созданные/скаченные?

так все на что глаз упадет ... в том числе и те которые Adobe поставляет, а оригинальные соотв. удаляю чтобы не засоряли drop down в UI

Z / V

> Вот только что есть "invariant/untwist'ю"?

об этом например опять же автор dcptool писал в его блоге (ну и другие тоже)

Z / V

ну вот например = http://dcptool.sourceforge.net/Hue%20Twists.html

Z / V

Я не большой знаток вопроса но "пользователь плачет" это примерно вот об этом?:
http://pavel-kosenko.livejournal.com/196488.html?thread=13969800#t13969800

Это вот ровно про это самое, но не плачут, а недоумевают (и действительно же, отрицательная коррекция не должна помогать).

А плача я наслушался по выходу FRV 1.0: тамошние 0.0 коррекции не соответствуют ACR-ным 0.0 и это людей пугает. В 1.0.1 по умолчанию будет не так.

Засуньте куда-нибудь галку "чистый 0.0".
А ещё лучше добавьте отдельное окно с этим вопросом прямо в инсталлятор. И лучше с картинками разницы, пусть и фейковой (одна пара на все случаи жизни).

Обосную своё ИМХО, почему 0.0 по дефолту лучше.
Когда я вижу RAW с пересветами, сразу возникает ощущение жопы.
А недодержку (или просто серятину) воспринимаю спокойно.

Опять же, этот дефолт можно вообще сделать настраиваемым: "Тру" + "Фотошоп" + окошки, куда можно вбить цифры руками. Люди всё воспринимают индивидуально, но предпочтения у каждого весьма стабильны.

Смотрите какая тут история.

1) Очень много кто пользуется потом адобом для конвертации. Сильно больше половины. Вот эти вот "сильно больше половины" - аргумент за то, чтобы в FRV и Adobe цифры экспопоправки выглядели бы одинаково. То есть ну вот действительно странно - JPEG камерный, Adobe "по нулям" - выглядят похоже, а FRV резко выбивается в минус при "по нулям" и в плюс при включенном ETTR-автомате.
Пугаются и плачут.

2) Даже в этом режиме (когда FRV сходу внес поправку в плюс) возможность контроля экспозиции собственно RAW остается, одним из двух способов
а) по статистике, колонка OE (без корректировки)
б) можно выключить 'Exposure correction affect overexposure display'

3) По Shift-A (автоэкспозиция в ETTR-стиле) у кадра экспонированного впритык к правому краю (или пересвеченному) - FRV сделает все разумно. Он поставит автокоррекцию равную "минус адобовская поправка".
Ну станет -0.65 на Sony A7R, это вот тот самый предел, дальше которого крутить в минус смысла нет.

4) Конечно, мы даем настроить это смещение в другое значение, отличное от адобовского. Одно значение, общее для всех камер/ISO, но тем не менее.

Если вы читали анонс свежей (вчерашней) беты, то там эта галка есть.
Называется 'Apply Adobe hidden exposure correction'

Увидев такой вопрос в инсталляторе - 90% людей испугаются и заплачут. А для остальных вот 10% - есть галка.

Еще я недоумеваю по поводу различий в "красненьком" на картинках 3 и 4. На третьей его более всего - в горах а на четвертой - на берегу. Это о чём говорит?

Ну потому что ACR явно считает в RGB и явно что-то странное.

Вот я, к примеру, взял кадр (без пересветов), загнал движок сильно вправо, а пересветов еще нет: https://www.dropbox.com/s/0lqvqqmhmy5tqzi/Screenshot%202014-12-03%2013.4...

Тогда как в реальности они появляются при коррекции +0.4: https://www.dropbox.com/s/zjo16g61vwkz5si/Screenshot%202014-12-03%2013.4...

Судя по всему, в нейтральных областях, которые можно вытащить через highlight recovery, ACR показывает пересветы менее охотно.

Ну вот и на горках так: горки белые, можно восстанавливать что хочешь, пока хоть один канал есть. А берег - окрашенный и там HL recovery работает плохо.

Во, вот гистограмма этого кадра (он недодержан прилично так, на стопчик): https://www.dropbox.com/s/o7s5miq9o1htavx/Screenshot%202014-12-03%2013.5...

Судя по всему, ACR начинает ругаться на нейтральных областях когда все три канала уходят за край. А тут - красный практически кончается чуть ниже 4000, т.е. вот 2 с хвостиком стопа запаса явно есть по этому критерию.
Если смотреть на ACR, то первые красные точки появляются при +1.7 (и еще +0.65 встроенной), а при 1.6 - ничего нет: https://www.dropbox.com/s/230pun7fwdonyx1/Screenshot%202014-12-03%2013.5...
Выходит, с точки зрения ACR, можно тянуть на 2.35 - что более-менее совпадает с гистограммой красного канала.