Обработка RAW

Кратко о чувствительности цифровых камер

Я несколько опережаю события и фактически презентую незаконченное микро-исследование, но мне кажется полезным немножко обсудить методику с сообществом, прежде чем доделывать работу до конца.

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

Вместе с тем, линейная передаточная характеристика современных цифровиков и доступность RAW-данных в цифровом виде позволяют подойти к проблеме и с другой стороны.

Расщепи своих каналов

Выпустил LibRaw 0.7-BETA1.

Каких-либо изменений собственно библиотеки в сравнении с предыдущей Alpha6 нет, но зато добавлено новое тестовое приложение, которое мне кажется очень полезным в хозяйстве:

4channels - сохраняет RAW-файл в виде четырех отдельных TIFF-файлов, по одному на канал.

DNG, уровень черного и dcraw

В стандарте DNG 1.2 правильной поддержке уровня черного уделена масса внимания: можно задать базовый паттерн произвольного размера с разными уровнями (скажем, поканальными) и коррекцию этого паттерна для каждой конкретной строки и столбца. Для большинства практических применений этого достаточно, нормально описать таким способом нельзя, пожалуй, только неповернутый паттерн Fuji SuperCCD.

Надо сказать, что Adobe DNG Converter креативно пользуется этими возможностями. Скажем, для новых камер Canon (смотрел 50D и 5DmkII) считается только базовое значение, тогда как для старых (смотрел 400D) считается уровень черного для каждой строки. И это правильно, товарищи!

Но вот dcraw, а за ней и все приложения, использующие её код, начиная с LightZone и ACDSee, а заканчивая LibRaw, поступают с этими данными тупо и глупо: все что есть в DNG-файле усредняется и это среднее вычитается из всех значений.

Естественно, это все касается только тех форматов данных, где вычитание базового черного не делает сама камера. Из распространенных - это камеры Canon (все), ряд моделей Sony и многие P&S камеры.

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

Пользователи LibRaw будут со временем осчастливлены кодом получше, а вот пользователям других производных от dcraw я бы посоветовал форматом DNG без нужды не увлекаться.

Техника мезурбации

Мы, мезурбисты, народ мускулистый!

Несмотря на всю критику тестов, что оптики, что камер (я вот тоже люблю поругать тесты DPReview), деваться от этого некуда. Большинство фотографов не имеет возможности перепробовать все представленные на рынке модели, а среди имеющегося богатства надо как-то выбирать. А среди критериев выбора качество (вместе с ценой) играет не последнюю роль (хотя я вот выбрал себе штатный зум по цене и весу только что).

Однако большой интерес к теме не подкреплен реальными значимыми результатами. Тестовых данных - много, но какие-то они все противоречивые. Кроме DPReview (претензии к которому многократно обсуждались в комментах в этом блоге), на этом поле отметилась DxODxOmark), ну и естественно отдельные результаты, полученные отдельными тестовыми лабораториями, бывают самыми удивительными.

LibRaw 0.7.0 Alpha5

Спешу анонсировать LibRaw 0.7.0-Alpha-5

Эта альфа завершает цикл крупных изменений, затеянных в версии 0.7. В последней версии новая схема чтения, реализованная поверх C++-враппера, коий враппер каждый может заточить под свои нужды (одна из высказанных пользователями нужд, например, это извлечение метаданных из начала файла, который качается по PTP).

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

Вопрос про firmware ф/а Canon

Граждане читающие,

А может кто знает:

  • Позволяют ли DSLR Canon даунгрейд прошивки (скажем, стоит 1.06, могу ли я обновиться до 1.05)? Камера - 5D Mark II, но я думаю что это для всех свежих одинаково.
  • (при положительном ответе на первый вопрос) - где взять образ прошивки 1.06 для вышеупомянутой камеры? Может быть ее можно как-то из камеры списать? На официальном сайте лежит, естественно, только последняя, 1.07

Очень хочу поизучать черные точки и что с ними сделали в прошивке 1.07, но хочется иметь возможность откатиться назад, если "что с ними сделали" мне не понравится.... (на руках камера с прошивкой 1.06)

Записки разработчика RAW-обработчика

bug3.jpg Поправил сегодня серьезную багу в LibRaw, что заставило меня призадуматься о жизни. Если в подробностях, то:

  • У некоторых мыльниц (ряд моделей Nikon, Pentax, Samsung, Casio) режим RAW включается через инженерное (скрытое) меню.
  • В этих RAW нет никаких метаданных, а только данные с сенсора, обычно просто дамп байтов в каком-то некомпрессированном формате.
  • Метаданные сохраняются в JPEG-файле с обычным снимком, который записывается рядом (с тем же именем файла и другим расширением или же с другим номером файла).
  • В dcraw, а оттуда и в LibRaw есть поддержка этого составного формата: вычисляется имя файла, открывается, загружается EXIF.

И вот эта вот поддержка - категорически не работала. Даже хуже: наличие JPEG с метаданными приводило к неправильной распаковке собственно RAW, а отсутствие этого файла - к падениям.

Эта ошибка была начиная с LibRaw 0.0 и до сегодняшнего дня. И ни одна зараза - не заметила. Несмотря на то, что LibRaw уже несколько месяцев используется в digiKam и Krita, а у этих программ должны быть десятки тысяч пользователей, если не больше.

Fuji SuperCCD: сложно о сложном

Расположение пикселов разной чувствительности и цвета на сенсоре SuperCCD, помимо того, что маркетинг Fuji изрядно запудрил всем уши, само по себе нетривиально. Я не уверен, что у меня получится легко про него рассказать (хотя это уже третий пост на данную тему), но буду пробовать.

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

RAW еще сырее: LibRaw 0.7.0-A4

Отрываю ненужные куски от LibRaw (попавшие туда из dcraw) и никак не могу остановиться. В очередной версии сделал отключаемым пропускание RAW-данных через тоновую кривую.

Естественно, этот режим работы может быть интересен только тем, кто сам пишет RAW-конверторы или анализаторы RAW или подобные вещи. Ну и любопытствующим, ибо поставляемый в составе библиотеки пример unprocessed_raw (в версиях под Win32/Mac/Linux он лежит скомпилированным и готовым к использованию) способен эту опцию включить и показать ваши данные прямо как они из файла раскодированы.

Тоновая кривая есть не во всех камерах и форматах данных, среди распространенных это Nikon (compresssed NEF) и Sony A700/A900 (8-битный cRAW)

Достаточно очевидно, что от тоновой кривой нет вреда (или практически нет вреда) если выходное пространство шире чем входное, скажем из 8 бит делаем 12 (как оно у Sony). А вот если входное и выходное пространство имеют одинаковую битность, а кривая отлична от линейной, то мы обязательно потеряем градации. Такое должно случаться, насколько я понимаю, с 12-битными NEF-ами, было бы прикольно, если бы кто-то проверил.

Аналогично предыдущему анонсу просьба: если unprocessed_raw -N падает на каком-то файле, то я хочу этот файл пощупать.

Sharpen Action от Маргулиса

Я уже пиарил тут Yahoo-группу Applied Color Theory in Photoshop (часто ее называют ACT), но думаю что есть смысл повторить.

В частности, "в ответ" на Smarter Sharpen, который тут уже обсуждали, Дан Маргулис выкатил свою action, которая кажется черезвычайно удобной в применении: можно пускать батчем сразу, а потом доточить по месту, регулируя прозрачность слоев и их маски. Результат - хороший, но предназначенный для печати, для веба нужно, по всей видимости, подобрать параметры и сделать по образу и подобию.

К сожалению, нормальную прямую ссылку прямо на архив дать не получается, группа закрытая, поэтому могу только порекомендовать подписаться. Для этого нужна регистрация на Yahoo, а потом посылается запрос на подписку на группу (синяя кнопка Join Group). По моему опыту, запрос должен быть содержательным, а не просто "хочу читать"). Язык всего (и запроса на подписку и самой группы) - английский.

Если кто-то не поленится и адаптирует эту action к Lab (она RGB-only), я буду весьма благодарен....

LibRaw 0.7.0 Alpha-3: еще более RAW

Я точно знаю, что есть люди, читающие анонсы LibRaw именно здесь, остальным придется потерпеть.

В третьей альфе LibRaw 0.7.0 случились две группы существенных идеологических изменений и одна группа несущественных:

  1. Данные для камер FujiFilm распаковываются без поворота на 45 градусов. Это открывает путь к легкому получению 12-мегапиксельных картинок с Fuji S5Pro и прочим подобным радостям. При этом, горизонтальное разрешение должно быть заметно лучше, чем у 6-мегапиксельных, выдаваемых dcraw и всеми использующими этот код.
    Посмотреть на реальные RAW-данные Fuji можно с помощью примера unprocessed_raw, очень поучительно (чтобы извлечь второй кадр, используйте ключ -s 1).
  2. Не менее сильно поработали над PhaseOne:
    • Придуман и для PhaseOne реализован режим (не)фильтрации данных, отключающий тоновую кривую для RAW (более raw-данных вы еще не видели!). Идея мне настолько понравилась, что в следующих версиях тоновую кривую можно будет отключить для всех случаев, когда она есть (Nikon NEF, Adobe DNG, далее везде).
    • Рассчитанные камерой уровни черного доступны в метаданных
    • Исправлена ошибка расчета уровня черного, имеющаяся в dcraw (впрочем, на результат она влияет не очень сильно).
  3. Ну и по мелочи: баги, ключ -s у unprocessed_raw, импортирована свежа версия dcraw.

Более подробно и более формально в changelog, скачивать с той же страницы

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

Маркетинг и правда

Начитавшись всяких datasheets от задников, я был уверен что у PhaseOne (свежих: P45, P65) - 16-битный АЦП.

Однако читаю код распаковки, по смыслу там вот такое вот:

image[x,y] = pixel << 2 - (тут расчет уровня шума для столбца-полустроки)
дальше там наложение всяких кривых и прочие упражнения, которые в данном контексте неважны.

Вот ведь думаю, и рыбку съели (нету одинаковых битов ни внизу, ни наверху) и АЦП у них таки 14-битный.

Кипя гневом, полез читать даташиты заново, а там все аккуратно написано: 10 бит антиблюминга, 12 стопов динамического диапазона, разрядность выходного файла - 16 бит (кто бы спорил).

Вот как маркетинг животворящий зомбирует!

UPDATE: а в реальных данных в бликах максимальное значение до умножения и вовсе 8192 (при этом по всем четырем каналам одинаковые значения т.е. это честный блик). Итого - 13 бит. А значит врут они про 12 стопов ДД.

Еще о Fuji S5

fuji_ccd_layout.jpgЧтобы не писать очередного update к предыдущей записи напишу я новую.

Все упражнения с поворотом, а затем с масштабированием файлов Fuji S5, которые проводятся в dcraw - они конечно интересны. Но ровно до тех пор, пока в руки не попадется "12-мегапиксельный" JPEG, который делает сама камера. Из его размеров становится очевидным, что камера делает очень просто: растягивает файл вдоль короткой стороны, отчего он из (примерно) 4300x1400 становится 4300x2800. И все, собственно.

Используются ли при этом данные со второго набора сенсоров - мне непонятно. Для полутонов их, по всей видимости, использовать можно, для теней - нельзя, для светов - нежелательно использовать первый набор.

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

Меж тем, Fuji - не первая компания, использующая сей нехитрый трюк. Как мне напомнили, у Nikon D1X та же фигня: пиксели прямоугольные, разрешение сенсора 4028x1324, правда камера масштабировала эту картинку в примерно 6 мегапикселей, а не в 10.5. При этом, разница горизонтального и вертикального разрешения у D1X (по DPReview) очень даже есть.

Применение психотропных препаратов к обработке RAW

psychotropic_drugs.jpg В процессе подбора правильных психотропных препаратов для целей программирования правильного чтения черных рамок у RAW-файлов с камер Fuji (SuperCCD) я на эти данные внимательно посмотрел и... фалломорфировал удивился.

Если мы посмотрим в исходники dcraw (или результат работы dcraw -j), то увидим, что при распаковке файлов от Fuji SuperCCD делаются такие вот шаги:

  • Сначала при распаковке пересчитываются координаты, таким образом в выходной битмэп пишется изображение, повернутое на 45 градусов (для разных камер - вращения в разные стороны).
  • Потом это изображение вращается еще раз, уже с интерполяцией данных (в dcraw - билинейная интерполяция, про другие конверторы - не знаю).

Увидев один раз повернутое, я до сегодняшнего дня был убежден (не вчитываясь в код), что это отражает организацию сенсора: строки идут под 45 градусов по диагонали (длина строк, соответственно, разная), а дальше надо просто повернуть.

Сегодня же, выспавшись, полез разбираться в деталях. Детали, прямо скажем, удивительные относительно того знания, которое было в голове.

Vuescan

Вот пишут мне знакомые в почту, что всем российским покупателям Vuescan автор предлагает халявно проапгрейдиться по случаю появления русского перевода. Даже тем, кто стандартную версию покупал с годом апгрейдов. Я, правда, не сумел вспомнить E-mail на который свою копию регистрировал и подозреваю, что это был профуканый мой мейлбокс на rambler.ru.

Сходил Vuescan-у на сайт, прослезился, вспомнил молодость. Оказывается, впрочем, разовый бесплатный апгрейд предлагают всем покупателям, по случаю 10-летия программы.

Dan Margulis on RAW module

dan_margulis_2008sm.jpg На LibRaw появился новый автор: Dan Margulis. Хочется надеяться, что сотрудничество будет не разовым, но гарантировать я это не могу. Пока же представляем вниманию читателей один текст на двух языках:

Dan Margulis on RAW module
The question that needs an answer is, for what purpose is the module designed. I can think of four different approaches to acquisition.
  1. I want the module to do nothing more than open the file without damage. I understand that it will probably be flat and colorless if I do this. I intend to fix the problems in Photoshop.
  2. Although I will refine the image in Photoshop, I would like to be able to make quick, obvious moves in the acquisition module to make life easier later.
  3. ....
Дан Маргулис: Мысли о назначении и некоторых проблемах конверторов RAW
Вопрос, которым следует задаться в первую очередь, - это место RAW конвертора в цепочке обработки изображения. Иными словами, требуется определить те цели, которые должны быть решены на этапе конвертации RAW-данных. Я могу представить себе 4 различных подхода к определению задач этого модуля.
  1. От модуля требуется лишь преобразование RAW-данных без потери качества. Мы отдаем себе отчет в том, что результат будет плоским (малоконтрастным) с ненасыщеными цветами. Для того чтобы вернуть изображение к жизни мы будем использовать Photoshop.
  2. ...

Ручная работа!

5d2-mask.png

Если рассматривать черную рамку у 5D Mark II, взяв кадры с разных камер, то становится очевидно, что матрицы делаются вручную (китайские крестьяне в своих фанзах?). Вот, собственно, пример: два кадра (сложены слоями в фотошопе со смещением), оба ISO 100, камеры разные. У одного по верхнему краю просто насечки от шестеренки, а у другого - еще и темная полоса.

Не корысти ради...

... а только с целью тестирования LibRaw и улучшения ея качества.

Имеется острая нужда в RAW-файлах следующих форматов:

  • Sony DSC-F828 Огромное спасибо за помощь!
  • Задники Imacon Ixpress - нужны RAW-файлы в родном формате;
  • Задники PhaseOne - нужны RAW в нежатом формате;
  • Задники Sinar - нужны RAW-файлы, снятые в режиме 4-shot

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

(Р)эволюция продолжается: LibRaw 0.7.0 Alpha-0

Вышла LibRaw 0.7.0-Alpha0.

Это довольно важный релиз, открывающий массу новых (но пока - потенциальных) возможностей для разработчиков, над некоторыми вещами я в фоновом режиме думал с начала осени и тороплюсь поделиться:

Pages

Subscribe to Обработка RAW