As RAW as possible
Говоря о RAW-данных ("необработанные", "данные прямо с матрицы") большинство фотографов (да и не только фотографов) полагают, что сенсор - это очень простая штука: массив светочувствительных элементов, цветные фильтры, сбоку прикручен АЦП (или несколько). Появляется в рекламных буклетах производителей фраза "мы уменьшили зазор между микролинзами" - вспоминают еще и про микролинзы. Документации то разумной почти нет. Про острую нужду в кривых спектральной чувствительности мы уже писали в статье для Компьютерры, но есть острая нужда не только в этих данных.
Вот, например, "черная рамка" или маскированные пикселы. Они считываются с матрицы, но в финальное изображение - не попадают. Значения считанных оттуда пикселов - это источник данных для выставления уровня черного. Если читать исходные тексты dcraw, то видно, что для большого числа камер Dave Coffin (а за ним - и многие последователи) банально вычисляет среднее по некоему участку черной рамки (или же в последних версиях для некоторых камер делает чуть-чуть сложнее, считая отдельное среднее для четных и нечетных столбцов), затем это среднее вычитается из значений, считанных с активных пикселов и все.
Впрочем, некоторые производители завесу немножко приоткрывают. Вот, скажем, Kodak. В Кодаковских datasheets на сенсоры написано много всего интересного. И если почитать, например, документацию на KAF-50100 (картинка справа взята из нее), то становится понятно, что структура неактивных пикселов - сложная, тут и референс для выставления уровня черного и что-то тестовое и какие-то буферные пикселы.
Установка правильного уровня черного необычайно важно. Скажем, для камеры Canon 1D Mark III, примеры с которой мы будем рассматривать ниже, уровень черного при ISO100 - около 508-514 (реальные данные с моей камеры). Ошибка в усреднении в 4 единицы - это может быть либо потеря трех стопов в тенях (если ошибка в плюс), либо же, наоборот, очень сильная нелинейность в тенях, заметная уже на 4-5 стопов в тенях.
Давайте же посмотрим, как устроен верхний левый угол кадра у 1D3, если вычитание черного выключить, а маскированную рамку в выдачу - включить. Данные получены с помощью LibRaw 0.7-alpha0, которая пока публично не существует, но будет опубликована, как только выдача рамки будет поддержана для существенного количества камер, а не только для Canon-CR2:
Верхний левый угол сенсора Canon 1D-Mk3 (в новом окне)
Как видно на картинке, первые 3 строки рамки - это какой-то непонятный "мусор" с псевдо-случайными значениями. Следующие 17 строк - какие-то неясные, например там есть абсолютно черный (со строго нулевыми отсчетами) прямоугольник размером 64x8 пикселов. Зачем он - остается неизвестным.
Рамка слева от изображения - интереснее. Из исходников dcraw следует, что уровень черного рассчитывается именно по ней, причем не учитываются значения первых двух столбцов.
Однако если увеличить контраст изображения, то видно, что структура левой стороны рамки - сложнее:
Тот же угол сенсора, увеличенный контраст
Вдоль всего края сенсора идет светлая полоса шириной 2 пикселя, величина сигнала на ней существенно (примерно на 15 единиц для изображения в исходном масштабе) выше, чем на окружающей рамке. С учетом усреднения на полную ширину рамки, эта светлая полоса даст примерно 0.5 единиц в среднее, после округления до целых это выльется в потерю стопа в тенях с вероятностью 50%.
Мораль из сего несложного упражнения такова: во-первых, доверять исходным текстам dcraw в деле получения изображения наивысшего возможного качества не следует. Во-вторых, похоже что для многих моделей камер процедура вычисления уровня черного должна быть индивидуальной. В плохом случае процедура такого вычисления будет зависеть еще и от версии firmware и/или версии камеры.
Comments
как вы относитесь к инициативе Sony обрабатывать данные ещё
как вы относитесь к инициативе Sony обрабатывать данные ещё до записи в RAW? вроде как в Альфе шумодав (а может ещё что-то) применяется ещё до записи.
Вроде отвечал, а ответа не вижу. Кнопку забыл нажать??? В к
Вроде отвечал, а ответа не вижу. Кнопку забыл нажать???
В каком-то виде обработка и так есть, скажем вычитание темнового тока и оцифровка разницы.
Кроме того, вот это вот черное пятно 64х8 в данном примере - как мне подсказали, это попытка вычесть шумы аналоговой части ("мертвые" пикселы, принятые далее за нуль).
Вместе с тем, если та же рамка будет (умно - с учетом структуры сенсора и многоканальности АЦП) вычитаться прямо в камере, то в этом нет почти никакого вреда, ну кроме разве целочисленной арифметики с округлениями.
И тот же Кодак в SLR/c-n это и делает (а кроме того - еще и lossy-сжатие светов, тоже ничего плохого)
кстате из последних камер это вроде как относится как раз не
кстате из последних камер это вроде как относится как раз не к сони, а к никону в сравнении реализации одной и той же в основе матрице в А900 и Д3Х
И к Sony и к Никону и к Pentax. Если брать относительно нов
И к Sony и к Никону и к Pentax.
Если брать относительно новые DSLR и задники, то по тому что я за последние дни пересмотрел (далеко не все, прямо скажем), "настоящий RAW" только у Phase One и у Кэнона.
У A900 и у D3X черный уже вычтен. И если у D3X есть какое-то подобие рамки (с коей, впрочем, пока неясно что делать, ну может быть поканальный шум оценивать, будем еще посмотреть), то у A900 в самом формате (который, я, правда, знаю из слов dcraw.c) нет под рамку места.
Меж тем, народный опыт говорит, что будущее - за плавающей точкой, соответственно вычитание черного в целых числах довольно заметно испортит самые глубокие тени
Правильно понимаю, что именно про это вычитание Вы говорили
Правильно понимаю, что именно про это вычитание Вы говорили <a href="http://pavel-burov.livejournal.com/191443.html?thread=302803#t302803">здесь</a>?
Именно. Но для анализа шума оно проще - ничего просто не на
Именно.
Но для анализа шума оно проще - ничего просто не надо вычитать. Для Canon наверное завтра будет готово (для CR2 уже работает, но надо для sRAW еще проверить, а CRW уже занимаюсь), там просто флажок в options появился.
Ну и сами данные рамки (в виде 8 прямоугольников в пределе) - тоже будут доступны.
Для остальных камер того же самого - чуть позже.
А вот для реального вычитания - не посмотрев на сампл с камеры (да еще для разных ISO) сделать нормальное вычитание я не понимаю как. Да и то, читая того же Kodak-а - не имея описания сенсора я конечно легко выделю те куски, где среднее отличается на глаз и потому не подходит. А вот если это от температуры зависит или от выдержки?
Счастья нет.
<em>> А вот для реального вычитания - не посмотрев
<em>> А вот для реального вычитания - не посмотрев на сампл с камеры (да еще для разных ISO) сделать нормальное вычитание я не понимаю как.</em>
Ага, мы пытались во время оно (в, ЕМНИП, 2005-м) этим заняться, в итоге пришли к выводу, что правильно — отбивать ряд «тёмных» (с закрытыми байонетом и видоискателем) снимков на разных ISO и выдержках, а потом для каждой камеры исследовать полученные данные отдельно (где-то можно обойтись простым вычитанием подставки в виде C+k⋅T, где C и k — константы, T — выдержка, где-то C может зависеть от столбца/строки и т.д.).
Ничего умней, чем усреднение данных из некоторых строк/столбцов рамки, примерно как сделано в dcraw, придумать в общем случае не смогли.
Однако жаль, что Canon, Sony и прочие не выкладывают datasheets, как Kodak.
Оно близко тематически, но не совсем одинаково. Темновой кад
Оно близко тематически, но не совсем одинаково.
Темновой кадр должен получаться одинаковым по шумовым характеристикам с темной рамкой (нужной ее частью).
Т.е. если про температурную неравномерность и разные каналы АЦП забыть, то вычитание (нужной части) рамки - то самое оно и есть.
вроде существуют достаточно стандартные процедуры отбрасыван
вроде существуют достаточно стандартные процедуры отбрасывания слишком выбивающихся данных?
Да, но при этом полезно понимать про их структуру. Скажем,
Да, но при этом полезно понимать про их структуру.
Скажем, если мы знаем что считывание двухканальное, четные столбцы в один АЦП, нечетные - в другой, то мы разделим все на две кучки и подавим banding.
Если мы этого не знаем или в своем знании ошибаемся, то получится сильно хуже, чем могло бы быть.
Тест 2
Тест 2
Насколько я знаю, 64х8 - "мёртвые" пикселы, предназначенные
Насколько я знаю, 64х8 - "мёртвые" пикселы, предназначенные в качестве reference для аналогового тракта (шум считывания, усиления, конвертации в цифру). Так как эти шумы учтены в процессе конвертации в цифру, то этот блок в данных raw - всегда чёрный.
Неприятность ещё и в том, что часть данных рамки учитывается внутри камеры и не поступает на выход. То есть, описание рамки в спецификациях собственно сенсора - полнее и шире, чем рамка, доступная конвертору raw.
А какая там красота вылезла в верхней рамке у 5D2! Похоже,
А какая там красота вылезла в верхней рамке у 5D2!
Похоже, мой тул "unprocessed_raw.exe" выиграет приз "мезурбаторский тул года"
Давно любуюсь.
Давно любуюсь.
<em>С учетом усреднения на полную ширину рамки, эта светлая
С учетом усреднения на полную ширину рамки, эта светлая полоса даст примерно 0.5 единиц в среднее, после округления до целых это выльется в потерю стопа в тенях с вероятностью 50%.
А зачем нам уходить в целые числа раньше, чем при записи TIFF'а? Уже после всех WB, гамм и прочего-разного?
Низачем. Вместе с тем, очень мало программ, работающих с RAW
Низачем. Вместе с тем, очень мало программ, работающих с RAW в плавучке. Я знаю две.
Ну, мы же про библиотеку для будущего софта тут рассуждаем :
Ну, мы же про библиотеку для будущего софта тут рассуждаем :)
Ну а в этом смысле задача LibRaw - выдать все как есть и <b>
Ну а в этом смысле задача LibRaw - выдать все как есть и ничего не трогать
<b>стандартные процедуры изобретения велосипеда</b><br/> Про
стандартные процедуры изобретения велосипеда
Проблемами калибровки изображений астрономы занимаются давно. Странно что их наработки не используются, алгоритмы описаны, опубликованы и свободно доступны на arxiv.org. Сейчас в типовым методом является вычитанеие медианы строчки (или нескольких строчек), а вовсе не среднего. (гуглить по ключевым словам prescan+overscan+CCD)
Объяснение терминов "на пальцах" - http://astronomy.nmsu.edu/cwc/Software/CCD-calib.html
С инженерной точки зрения - это попытка убрать нестабильность ступеньки, смещающей сигнал в линейную область усилителя перед АЦП, т.е апроксимировать розовый шум по кусочкам (измеренным в области pre|overscan) в область где этот шум сложен с изображением. Медиана (возможно скользящим окном с захватом нескольких измеренных участков) справляется лучше, чем среднее. Выбор размера окна естественно зависит от схемы и характеристик чипа/усилителя/ацп.
Кстати интересно, а насколько стабилен bias (т.е. изображение снятое с нулевой выдержкой и без света) на зеркалках? Как я понимаю, он каким-то образом получен и вшит в пре-процессор и его автоматом вычитают, а по-хорошему его надо каждый раз снимать после включения, потому что характеристики матрицы плывут.
<b>Re: стандартные процедуры изобретения велосипеда</b><br/>
Re: стандартные процедуры изобретения велосипеда
Я же пишу об археологии велосипеда, выкопанной из исходников dcraw (а из этих исходников оно кочует много куда).
В частности, пример с 1D-mk3 интересен тем, что усреднение делается не по той области, по которой следовало (ошибка не очень большая, но есть).
Медиана - вполне возможно что даст лучший результат (хотя, конечно, фотографам глубокие тени не столь важны, как астрономам), но это уже следующий шаг, для начала нужно ее строить по правильным данным.
И именно восстановлением этой справедливости (возможность получить доступ к pre/overscan, возможность отключить фильтрацию) я сейчас и занимаюсь.
Что касается вычитания bias, то в разных камерах оно разным способом обстоит. Скажем, у свежих Nikon/Sony/Fuji - оно вычтено (при этом сенсоры очень близкие, но Nikon дает какие-то данные по pre/overscan, скорее всего усредненные, а Sony - нет).
У Canon - не вычтено (sRAW не рассматриваем). У PhaseOne есть два режима (и много всего другого интересного).
Вообще, я разнообразию форм жизни в этом месте не перестаю удивляться.
Огромное спасибо за комментарий, появляется все больше зарубок на будущее.
Наверное, не совсем в тему.
Извините, если совсем флуд и оффтоп. Меня сюда с фотоклуба.ру послали.
Вы не знаете, можно ли извлечь из raw-ки (например cr2, но не суть важно) изображение только из элементов за, например, красными светофильтрами?
Не могли бы вы сказать что-нибудь на тему того как это можно (если можно) сделать.
Не фотограф и не пытаюсь.
Но очень нужно.
Возьмите Libraw [link]
Возьмите Libraw (готовый бинарный дистрибутив под Windows или Мак).
Программа 4channels сделает ровно то, что вы просите - 4 tiff-файла, разложенные по каналам.
Спасибо.
Спасибо.