О линейности RAW: Nikon D5x00

Модифицировал свой тул для дампа RAW-кривых, так что он стал понимать не только кривые из EXIF (как у Sony), но и кривые, хранящиеся вместе с RAW-данными. И смотрю, значит, в Nikon D5xx.

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

Масштаб осей - логарифмический, 1 клеточка по вертикальной оси - стоп, отчего тонкие особенности загиба не видны, а общая картина видна прекрасно:

  • Всего разных RAW-значений - 769 (минимум кривой - 0, максимум 768). То есть больше градаций просто не будет никогда. Это "9.6 бит".
  • На выходе: 12 линейных бит, диапазон 0-4095
  • Число градаций в верхних 5 стопах: 229-161-116-86-64. Что, естественно, хуже, чем у честной 12-битной камеры (2048-1024-512-256-128), но для самых важных 4-5-го стопов сверху (полутона) это лучше чем было бы у линейной 10-битной (512-256-128-64-32).
  • Дальше в тени все линейно, как у "обычной" камеры без RAW-кривой.
На графике в логарифмическом масштабе видно плохо, но наклон доходит до 11 в самом верху самого верхнего стопа (распакованые значения 3687-4016), а на последних 16 строчках таблицы есть закорючка с наклоном 5. Может быть случайно так получилось :), а может быть - чтобы модуляции в самых-самых светах спасти.

Какие из этого есть следствия:

  1. ETTR почти бессмысленен. Ну переехали вы из зоны -5EV (от насыщения) в -4EV, ну так градации не удвоились, а из 64 стало 86.
  2. Градаций в полутонах безобразно мало. Честные рабоче-крестьянские 12 бит в полутонах дали бы в 2-3 раза больше градаций и, соответственно, гораздо больший простор для редактирования.
  3. Для чего Nikon делает так - портит линейную 12-битную картинку (предполагая, что там линейный 12-битный АЦП, что, вообще говоря не факт) - я не знаю. Ну то есть ради компактности RAW, конечно. Т.е. ради скорости съемки серией, например.

У D5100 все совершенно аналогично, но в 4 раза толще:

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

  • 3073 градации всего (11.6 бита)
  • 4-й стоп сверху - 340 градаций, остальные - по аналогии.
  • Загогулина вверху с наклоном 5 осталась, но уже не на 16 входных уровней, а на 64. Остальные значения наклона - такие же, насколько точно они повторяют кривую D5000 не проверял, но очень похоже, что достаточно точно.
И вот к такой кривой у меня уже сильно меньше претензий, чем к предыдущей:
  1. 256-340 уровней на стоп в полутонах - достаточно.
  2. Все преимущества 14-битного АЦП в тенях (бОльшее число уровней) - на месте.
  3. А много уровней в светах и не нужно, их и в сжатом виде более чем достаточно. Ну вот в верхнем стопе - 907 уровней, без кривой было бы 8192. Оба варианта - избыточны.

Для желающих повторить своими руками дарю хинт: если в LibRaw после вызова LibRaw::unpack() сдампить значение imgdata.color.curve[], то это и будет именно ОНО. Хачить можно любой пример, самый компактный - dcraw_half.

Comments

D0x00 ;)

Сони с Никоном дошли до нелинейности. Ждём третий пятак от Кэнона.

Интересное исследование.
Я про такое слышал года 4 (5?) назад, тогда шла речь про D50.
Сколько лет прошло, а Никон все тот же, в дешевых моделях по мелочи ворует полутона.

А нет ли данных по Сони и Кэнонам ?

Про Sony я уже писал: http://blog.lexa.ru/2011/10/28/o_lineinosti_raw_i_ettr.html
Но там все-таки полутонов достаточно остается (11 бит входных значений)

У Canon: в 14-битных камерах все линейно и просто. В 12-битных CR2 - формат предусматривает тоновую кривую, но живьем я ее не видел (возможные кандидаты 1D и 1Ds первые, руки не доходят посмотреть)

Что нужно сделать, чтобы узнать то же самое для старушки-40D?
В магии кода не разбираюсь.

В первом попавшемся под руку кадре с Canon 40D - "кривая линейна". ISO400, возможно это имеет значение.

Спасибо.
Значение имеет всё. Кроме размера , пожалуй.

Собственно, 14-битная камера. Там при любом ISO распаковка "as is", кривая не применяется.

а что пишeт Panasonic в своих мелких сенсорах (18mp GH2, 16mp G3, 12 mpGF3) ?

G3 - 12 бит,честные. На остальные не стал смотреть.

А почему из малого числа строк таблицы делается вывод о разрядности выходного файла? Там вполне может быть интерполяция для данных между отсчетами. Чтоб такую кривую описать 769 точек вполне достаточно. Кстати, в пользу моей версии говорит и странное число отсчетов 769. На самом деле таблица содержит круглое число - 768, но не точек, а отрезков. А по отрезкам - линейная интерполяция.

Потому что я другим глазом смотрю на процедуру распаковки.
Которая выглядит как out = curve[pixel-value-unpacked-from-raw]

Нет тут места для интерполяции.

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

"в первом приближении" => "как минимум в первом приближении"

Да, это я невнимательно читал. Про 769 строк таблицы описывающей кривую я прочел, а про то, что реальный диапазон значений RAW тоже 0..768 - как-то мимо прошло.

P.S. Вообще-то подобный формат называть RAW-ом уже неправомерно. Это уже никак не сырые данные с сенсора. И ради чего все это затеяно было, ради 30% сжатия?

Для 14 битного варианта - у меня претензий нет. Ну кому нужны 8к уровней в самом светлом стопе, их на все изображение столько не надо.

С D5000 не так однозначно, 64 уровня в 5-м стопе сверху - все-таки обидно, шансы влететь в постеризацию растут.

А что называть RAW - вопрос философский. Вон у RedOne там вообще lossy-компрессия (JPEG2000) и ничего. А у D1 там и баланс белого был

"По процедурному вопросу" - чтобы не давать к графикам в логарифмическом масштабе длинных пояснений о вариациях наклона, хорошо раскрашивать их какой-нибудь радугой, пропорционально производной. Так люди, как правило, лучше видят. И загогулина в верхнем правом углу была бы видна. :)

Я по старинке, в экселе. Он умеет такое?

По сути же - это все несущественно. То есть все это трепыхание происходит в светах, на которые по большому счету наплевать...

Вроде Excel не умеет. Я думал, тут еще более "по-старинке" - gnuplot :) Я так, об общем случае, тут-то все и так ясно.

"ETTR почти бессмысленен" - ну здрасте!

Кроме шумов хранения есть шумы камеры, это раз.

Контрастные области никто не отменял - это два.

Контрастные тени?

Основной вопрос с ETTR заключается в том, как быть с профилями. Много раз уже тут обсуждали.

Тени в контрастных сюжетах.

В случае матричных профилей я не понимаю, какие могут быть проблемы. Там всё линейно.

У кэнона профили табличные. Там да. Но это говорит, скорее, и том что табличные нелинейные профили - не очень хорошо.

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

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

По моему, сейчас дискуссия пришла к тому, чтобы математически точно описать ETTR

Особенно с учётом того, что в контрастных сценах есть совершенно черный, и совершенно яркий белый (например, источники света).

Не, я о другом. Давайте постепенно.

Тезис1: Главный объект на отпечатке - в подавляющем количестве случаев - будет печататься в светлоту "18%" (Lab50), ну плюс-минус стоп.

Двигаться дальше имеет смысл только если Тезис1 принят т.е. черные квадраты, черные силуэты на фоне солнца и т.п. - не рассматриваем.

Ну вообще говоря бывает разное.

То есть, взять и выкинуть целый жанр low-key фотографии - это как-то...

Но, я готов на разговор "рассмотрим, что нам нужно делать для этого варианта".

Да, довольно сознательно и силуэты и low-key (и high-key туда же).

Так вот. Экспозиция "по экспонометру по главному объекту" сделает нам желаемое автоматически. Плюс-минус калибровка экспонометра, конечно, но так и будет.
А ETTR - это переэкспонирование относительно такого замера.

Так вот,
Тезис2: в "контрастных сценах" (контраст сцены больше 7-8-9Ev) с главным объектом (и Тезисом1) у нас контраст создается светами а не тенями.
Т.е. разбег яркостей от "главного объекта - 18%-й серой карты" в света будет больше чем 2.7-3 стопа. Даже если исключить из состава светов то, где нам детализация вовсе не нужна (и переэкспонирование, соответственно, ничего не портит, про блюминг забудем).

Не очень понял.

В случае сюжета "Я на фоне неба - солнца" метод ETTR - это недоэкспонирование. Иначе небеса уйдут в белое.

Ну, я люблю проработанное небо, а лишний стоп шумов на объекте, - да фиг с ним, всё равно тут ISO малошумящее.

Ага. Вот и выяснилось
- я под ETTR понимаю исключительно сдвиг вправо с переэкспонированием главного объекта относительно того, что по нему спотметр намерял.
- а вы - "вдумчивое заполнение ДД объектами"

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

А Никон проводил такие рассчеты?

Смысл - поэкономить 20% ненужных данных. И для 14-битной камеры я даже согласен.

Понятно, хотя блондинкам очень долго доходит=)

Очень интересно было бы посмотреть на такую информацию по "народному ФФ" от никона - то бишь D700. Спасибо.

Там же какие-то разные режимы у RAW, правильно? Где бы взять образцов, чтобы быть точно уверенным в режиме?

а в каких режимах и что снять?

А какие будут RAW - из тех и вынем кривую. Если она там есть.

Есть там "compressed RAW" ? Вот там может быть кривая.

сюжеты и бб важен?

Для этого места (кривая в RAW) - нет, не важны.

Ну то есть скажу аккуратнее - у всех кадров с D5000/5100, что я смотрел - кривые строго одинаковые. Возможно, что камера что-то там думает и кривые делает разные для разных сюжетов - и это интересно было бы пронаблюдать.

ББ точно не важен (для этого теста) т.к. одна кривая применяется ко всем каналам одинаково.

да, но в д700 можно загнать свой профиль который можно сделать самой в Picture controls utility, кстати в д5100 эта возможность появилась тоже.

На распаковку RAW он, похоже, не влияет. И применяется где-то позже.

Во всяком случае, ваши примеры с "FUJI" кривой и с SD - имеют одинаковую RAW-кривую там, где она есть.

сделала, куда давать ссылку?

Cюда, или сюда или сюда. Но займусь только завтра.