Leave a comment

pavel_burov February 12 2009, 23:43:04 UTC


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

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

Подопытные:

* Canon EOS 40D;

* X-Rite Mini Gay Balance Card;

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

Вычислял средние по RAW каналам из центрального квадрататика 200×200 пикселей (4 раза по 100×100 пикселей).
Производилось ли вычитание чёрного не знаю, так и не разобрался ещё, как это в LibRaw-0.7.0-a3 работает (текст программы здесь).
Итого:

* R = 12.1 %; G1 = 13.2 %; B = 8.3 %; G2 = 13.2 %;

* конвертация в Canon DPP, sRGB, PS: Faithful, все настройки «по нулям», ББ &lauqo;авто»: R = 165; G = 119; B = 78;

* конвертация в Canon DPP, sRGB, PS: Faithful, все настройки «по нулям», ББ &lauqo;пипеткой по карте»: R = G = B = 119.

Удивительное рядом!
В RAW 13 процентов, в sRGB  18.

Reply

alextutubalin February 13 2009, 05:22:04 UTC
Об том и речь - фирменный проявитель делает пуш на 2/3 стопа.

Reply

alextutubalin February 13 2009, 05:26:45 UTC
Вдогонку - если вы filtration_mode не меняете, оставляя умолчание, то LibRaw черный - вычитает.

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

Reply

alextutubalin February 13 2009, 05:48:37 UTC
И еще вдогонку.
Был неправ в предыдущем комментарии. Если вы делаете unpack(), а более ничего не делаете, то для кэноновских файлов проведено подавление banding, а черный не вычтен.

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

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

Reply

pavel_burov February 13 2009, 09:46:13 UTC
Вот это, кстати, для меня загадка. Читаю уже минут пятнадцать документацию по LibRaw, где и как уровень чёрного вычесть найти не могу. Скорее всего, не там смотрю :-( [идёт читать документацию дальше]

Reply

alextutubalin February 13 2009, 09:55:40 UTC
Уровень черного лежит в 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 )

Reply

pavel_burov February 13 2009, 09:57:43 UTC
Спасибо.

Reply

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

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

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

Reply

alextutubalin February 13 2009, 10:58:36 UTC
Неправильно поняли :)

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

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

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

Reply

pavel_burov February 13 2009, 11:04:28 UTC
> Предполагается, что если вы это выключили - то вам нужны сами исходные данные и вы знаете что с ними делать (например, посчитаете уровень черного сами по рамке).

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

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

Reply

alextutubalin February 13 2009, 11:15:44 UTC
Да, _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)

Reply

pavel_burov February 13 2009, 11:16:50 UTC
Отлично, спасибо.

Reply

pavel_burov February 13 2009, 11:08:26 UTC
Вопрос. Подавление бандинга относится к препроцессингу черного?

Reply

alextutubalin February 13 2009, 11:16:48 UTC
Yeah.

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

Reply


Leave a comment

Up