Rawspeed: записки на манжетах

Есть такая библиотека RawSpeed, которая натурально написана с душой и склонностью к правильным оптимизациям. Например, файлы .CR2 распаковываются раз в пять быстрее чем это делает LibRaw.

В стремлении эту несуразность поправить, фтыкаю в ее исходники одним глазом, вторым и третьим - в результаты прогона профайлера на LibRaw и RawSpeed на одном и том же файле.

И вижу интересное (в исходниках, не в профайле): Canon 1D Mark III обрабатывается у Коффина в dcraw (и у нас) специфическим способом. Там, как обычно, грубый хак, но работающий. Касается этот хак буквально двух пикселов по ширине на рамке, видимой части изображения - не касается. Ага, сказали мужики и достали лом побольше пошаговый отладчик и grep.

Зная, что меня читают некоторые пользователи RawSpeed, имею сказать, исключительно в информационных целях:

  • RawSpeed извлекает уровень черного только из DNG и NEF, в остальных случаях берется predefined-значение из базы данных по камерам.
  • Уровень черного - это одно число. Даже не два, как в LibRaw/dcraw и не сложная структура, как оно бывает в некоторых камерах вроде PhaseOne (да и DNG - тоже. DNG-шные теги усредняются).
В результате будет два интересных эффекта:
  • Banding не подавить. Его не так много на современных камерах, однако ж.
  • Беря общий для всех камер (данной модели) уровень черного - легко испортить тени. На кэноновских камерах уровень черного на разных ISO отличается до нескольких единиц (на одной камере и на кадрах снятых подряд), что немало, если учесть что в последнем "стопе с деталями" всего 8-16 (а то и меньше, в зависимости от уровня требовательности) уровней.

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

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

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

Клаусу напишу, но пока не починили - пользоваться RawSpeed лучше с учетом вышенаписанного.

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

Comments

Ну и как - есть какой-нибудь прогресс в этом вопросе у RawSpeed? А то ведь его теперь в darktable впилили...

Я на прошлой неделе делал SVN diff c той версией, которая описана выше в посте.
Увидел разницу в обработчике .PEF (Pentax) - там есть специфический случай с фирмварью для K-5 (или K-r, я их путаю) и по сути - все.

Т.е. если прогресс и есть, я его не углядел. С Клаусом мы попереписывались тогда, а потом переписка заглохла как-то.

Печально...