3/26/2007

Новые возможности dcraw

Как уже отмечалось здесь, в Линукс достаточно приложений по обработке RAW-файлов. Этот пост посвящён более глубокому описанию dcraw - лучшей утилиты для конвертирования RAW-файлов. Её возможностей хватит и фотографам, и даже таким специфическим пользователям, как физики-оптики.

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


Возможности dcraw
Описание соответствует dcraw версии 8.64 (последняя версия утилиты тут) и выше (пост будет периодически обновляться), в значительной степени основанное на руководстве (русская версия и оригинал на английском). Скажу сразу: программа консольная и не предназначена для интерактивного использования, для этого есть несколько графических обёрток, например UFRaw. Параметры программы сгруппированы по типу операций, для наглядности будут приведены рисунки.

Вызов программы стандартный:
dcraw [ПАРАМЕТРЫ]... [ИМЯ_ФАЙЛА]
Если параметров несколько, они разделяются пробелами.


Диагностика и вспомогательные операции
Параметр
Описание

-v
Заставляет программу выводить больше диагностических сообщений в процессе конвертирования. По умолчанию программа будет "молча" конвертировать файлы (и это правильно, и это unix way).

Пример:
dcraw -4 -v img_1981.cr2
Loading Canon EOS 400D DIGITAL image from img_1981.cr2 ...
Scaling with black 256, multipliers 2.630775 1.000000 1.249379 1.000000
AHD interpolation...
Converting to sRGB colorspace...
Writing data to img_1981.ppm ...

-e

Позволяет выделить из RAW-файла миниатюру для предварительного просмотра. Полученное изображение будет иметь прибавку к имени вида .thumb.jpg

Пример:
dcraw -4 -v -e img_1981.cr2
Writing data to img_1981.thumb.jpg ...


-i
Получить информацию о RAW-файле без конвертирования.

-i -v
Получить не только информацию о файле, но и показать метаданные, записанные при съёмке.

Пример:
dcraw -v -i img_1981.cr2

Filename: img_1981.cr2
Timestamp: Sun Mar 18 22:27:38 2007
Camera: Canon EOS 400D DIGITAL
ISO speed: 100
Shutter: 30.0 sec
Aperture: f/5.6
Focal length: 55.0 mm
Secondary pixels: yes
Embedded ICC profile: no
Decodable with dcraw: yes
Thumb size: 1936 x 1288
Full size: 3948 x 2622
Image size: 3906 x 2602
Output size: 3906 x 2602
Raw colors: 3
Filter pattern: RGGBRGGBRGGBRGGB
Daylight multipliers: 2.423860 0.921348 1.151113
Camera multipliers: 1813.000000 1133.000000 2229.000000 1133.000000

-z
Изменить время доступа и модификации на AVI, JPG или RAW файлах на время, когда фотографии были сняты. Предполагается, что формат времени установлен по Гринвичу (UTC).
Пример:
До применения команды

$ ls -lh | grep cr2
-rwxr-xr-x 1 penta4 penta4 8,0M 2007-03-18 22:28 img_1981.cr2
После применения команды$ dcraw -z img_1981.cr2 $ ls -lh | grep cr2-rwxr-xr-x 1 penta4 penta4 8,0M 2007-03-19 01:27 img_1981.cr2


Шумоподавление
Параметр

Описание

-n
Установить порог для вейвлет-метода подавления шумов. Лучшие результаты при n=100...1000.
С версии 8.60 до 8.63 в dcraw использовался метод шумоподавления Daubechies 9/7 из стандарта сжатия изображений JPEG2000. С версии 8.64 используется алгоритм "A trous" с вейвлетом типа "Мексиканская шляпа" (Mexican Hat) с параметрами (-0.25 0.5 -.025). Из частных сообщений с автором программы, Дэйвом Коффином.


-K темновой_кадр.pgm
Вычитание темнового кадра из изображения для уменьшения влияния шумов фотоприёмника. Чтобы получить такой кадр, следует сделать снимок в RAW при закрытой крышке объектива и дать команду dcraw -D -4 -j -t 0 имятемногокадра



Дополнительные параметры изображения
Параметр

Описание

-s [0-99]
Выбрать другое изображение из RAW-файла, если их там несколько. Число указывает номер изображения внутри файла. Например, камера Fuji Super CCD SR генерирует второе недоэкспонированное изображение для того, чтобы показать тонкие детали в светлых областях.

-j
Показывает изображение, повёрнутое на 45 градусов для камер Fuji Super CCD. Относится к камерам Fuji Super CCD и другим с пикселями не квадратной формы. Опция гарантирует, что каждый выходной пиксель соответствует одному RAW-пикселю. Если к вашей камере это не относится, опция будет проигнорирована.

-t [0-7]
Повернуть изображение (по умолчанию поворота нет, t 0). Поворот на 90, 180 и 270 градусов по часовой стрелке это t 1 2 и 3 соответственно; против часовой стрелки t 4 5 и 6 на те же углы.


Работа с цветом
Параметр

Описание

-b
Позволяет настроить яркость изображения. По умолчанию запись в 8-битный формат идёт в соответствии с телевизионным стандартом ITU-R BT.709. Это означает, в частности, что цветовая температура устанавливается как 6702К. Если результат слишком светлый или тёмный, следует воспользоваться ключом -b для корректировки. Как выяснилось из частного общения с автором программы, указание параметра приводит к простому умножению данных на значение параметра, до применения гамма-коррекции. По умолчанию -b 1.0


-a
Использовать автоматический баланс белого: по умолчанию это фиксированный баланс белого, основанный на фотографии белого листа бумаги в солнечном свете.

-A отступ_слева отступ_сверху ширина высота
Рассчитывает баланс белого, используя прямоугольную область изображения. Вначале выполните dcraw -j -t 0 и выберите область с нейтрально-серым цветом.

-C множ_увеличения_красного множ_увеличения_синего
Эта опция позволяет компенсировать хроматические аберрации изображения, увеличивая красный и синий цветовые слои в заданное множителями количество раз (обычно от 0.999 до 1.001) для устранения хроматической аберрации.

-w
Использовать баланс белого, определённый настройками камеры. Если сведений о балансе белого нет, будет использовано умолчание (солнечный свет).


-r
множR множG множB множG
Коэффициенты цветового масштабирования, colour scaling. Они применяются к изображению потому, что на матрице камеры стоят светофильтры и специальный IR-блокирующий фильтр. Чтобы вернуть правильное соотношение интенсивностей цветовых каналов, электроника камеры рассчитывает цветовые множители для данного снимка - это четыре числа, соответствующие пикселям под светофильтрами R G B G. Важно отметить, что эти множители от кадра к кадру меняются. Для зелёного коэффициентов два, и чаще всего они совпадают - но не всегда. Очень важно для получения цветных линейных изображений из RAW-файла.


-k
число
Установить уровень чёрного - это значит, что все отсчёты по уровню ниже, чем число, будут объявлены нулём, то есть чёрным (потому что ниже этого уровня, как правило, шумы). Эта опция очень важна для профессионального применения: дело в том, что установив параметр "-k 0" можно получить реальный уровень шумов фотокамеры. По умолчанию зависит от уровня постоянного шума камеры, который умеет свойство увеличиваться с возрастанием экспозиции.


-H [0-9]

Обработка светлых областей.
-H 0 - срезать пересвеченные области до сплошного белого цвета, режим по умолчанию.
-H 1 - не срезать пересвеченные пиксели, отображать оттенками розового (позволяет сохранить детали изображения).
-H 2-9 - восстанавливать пересветы. Меньшие цифры лучше подходят для белых областей, высокие - для цветных областей.
-H 5
приводится Дэйвом Коффином как компромиссный вариант.
Пример на рисунке ниже, -H 0 (слева) -H 1, -H 2, -H 5 -H 9 (справа)


-o [0-5]
Цветовое пространство выходного изображения:
0 Собственное цветовое пространство камеры;
1 sRGB D65 (по умолчанию);
2 Adobe RGB (1998) D65;
3 Wide Gamut RGB D65;
4 Kodak ProPhoto RGB D65;
5 XYZ;

Пример на рисунке ниже, от -o 0 (слева) до -о 5 (справа)



-p camera.icm [ -o output.icm ]
Возможность использования специфических цветовых профилей. По умолчанию используется sRGB.


-p embed

Использование цветового профиля, указанного в RAW-файле.


Интерполяция баеровского массива
Параметр
Описание

-q [0-3]
Управление качеством интерполяции, применение методов:
-q 0 билинейная интерполяция (высокая скорость, но плохое качество).
При визуальном наблюдении заметны артефакты на контрастных участках.
-q 1 алгоритм по Переменному Числу Градиентов (Variable Number of Gradients, VNG)
Артефактов, по сравнению с билинейной интерполяцией, заметно меньше.

-q 2 алгоритм по Группировка Пикселей по Шаблону (Patterned Pixel Grouping, PPG)
-q 3 (по умолчанию) алгоритм использования Адаптивной Гомогенно-Ориентированной интерполяции (Adaptive Homogeneity-Directed, AHD)
Артефакты визуально не заметны, мелкие детали отрисованы хорошо.

-d
Документальный режим - без цветов, без интерполяции. На выходе - полутоновое изображение, к которому применены коэффициенты цветового масштабирования и срезание постоянной составляющей шума. Изображение не интерполировано, однако разогнано на весь диапазон значений 8 или 16 бит.

-D

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

Пример: отличие -d (слева) и -D (справа)



При этом в консоли даётся пояснение - никаких множителей цветов не применяется:
$ dcraw -v -d IMG_0065.CR2
Loading Canon EOS 400D DIGITAL image from IMG_0065.CR2 ...
Scaling with black 256, multipliers 2.630775 1.000000 1.249379 1.000000
Building histograms...
Writing data to IMG_0065.pgm ...

$ dcraw -v -D IMG_0065.CR2
Loading Canon EOS 400D DIGITAL image from IMG_0065.CR2 ...
Building histograms...
Writing data to IMG_0065.pgm ...

-h
Параметр позволяет получить изображение половинного размера очень быстро (вдвое быстрее, чем -q 0)
Пример: изображение по умолчанию (слева) и с ключом -h (справа)



-f
Интерполировать баеровский массив RGGB как четыре цвета.Эта опция полезна, когда выходное изображение содержит артефакты при интерполяции 2х2 как VNG алгоритмом, так и AHD.


Запись полученных изображений
Параметр
Описание

-4
Запись в 16-битный формат PPM с линейной гаммой. По умолчанию пишется в 8-битный формат с гаммой 0.45

-T
Запись в формат TIFF вместо PPM.

-c
Выдача результата в стандартных выход (в консоль) вместо записи в файл.

Заключение
Этот замечательный конвертор даёт очень много интересных возможностей для обработки изображений с фотоприёмников. Важно, что dcraw, в отличие от разного рода проприетарных поделий, гарантирует, что на выходе будет ровно то, что вы ожидаете, а не то, чем вводят в заблуждение изготовители цифровых камер.
Более того, у dcraw есть просто уникальные возможности по вытаскиванию чистых RAW-снимков - то есть буквально того, что видела матрица. Это критично для научных приложений: ни о каком применении гаммы, а тем более всяких повышающих резкость фильтров, не может быть и речи.
Таким образом, в наших руках, благодаря Дейву Коффину, есть замечательный, открытый и свободный конвертор, позволяющий использовать возможности цифровых камер на полную мощность.

14 комментариев:

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

    ОтветитьУдалить
  2. 2 Ivan Tarasov
    невнятно написано про цветовое пространство результата
    И что там невнятного!? Подробнее можно?

    после такого описания (а ещё и с картинками) пользователь сразу забьёт на использование этого параметра
    Если кто ещё не в курсе: dcraw - не интерактивная программа. Для этого есть UFraw.

    ОтветитьУдалить
  3. Я заниаюсь астрофотографией с Canon 350Da(baader filter).
    Последующую обработку делаю в IRAF-е, который работает с FITS-данными.
    CR2-файлы, есессно, конвертирую с помощью этой утилиты.
    Использую след. параметры:
    [b]dcraw -c -a -D -o 1 -H 1 -4 xx.cr2 | pnmtofits > xxx.fits[/b]

    И вот что получается, что с -D качество несколько хуже, чем с -d?
    В плане контраста...

    ОтветитьУдалить
  4. 2 BrainBug пишет...
    CR2-файлы, есессно, конвертирую с помощью этой утилиты.
    Использую след. параметры:

    В указанных параметрах есть несколько противоречий.

    -D делает слепок с матрицы в прямом смысле слова: то, что упало. Поэтому приказывать dcraw вытащить пересветы (-H 1) бессмысленно.

    -d делает из слепка с матрицы изображение, к которому применены цветовые коэффициенты баеровского массива, указанные на матрице. Интерполяции тут не было.

    И вот что получается, что с -D качество несколько хуже, чем с -d?
    В плане контраста...

    Это не качество хуже, это совсем другое дело. В -D вы требуете линейное изображение - то, что зафиксировал сенсор. Естественно, оно малоконстрастно. В -d вы просите разогнать изображение с учётом цветовых коэффициентов матрицы. Оно станет контрастнее, но вы лишаетесь некоторой части динамического диапазона, которым располагает фотокамера.

    1:31 PM

    ОтветитьУдалить
  5. Спасибо за разъяснение!
    Вот теперь понятно!
    -d и -H 1 выкину из скрипта по преобразованию кучи файлов...
    Мне нужен "чистый" слепок матрицы.

    ОтветитьУдалить
  6. И, если уж на то пошло, то -a тоже не нужен если есть -D?

    ОтветитьУдалить
  7. 2 BrainBug пишет...
    Спасибо за разъяснение!
    Вот теперь понятно!

    Пожалуйста, мне тоже стало понятно, когда автор в переписке объяснил :-) Нормальный мужик, кстати, ответил быстро и очень доходчиво.

    -d и -H 1 выкину из скрипта по преобразованию кучи файлов...
    Если нужен "разогнанный" файл на 16 бит, то лучше всего ключами -r выставить цветовые коэффициенты. Так я получил линейный цветной tif-файл - на моих виндовых коллег скрипт и длинна команды произвели впечатление :-)

    Мне нужен "чистый" слепок матрицы.
    dcraw -4 -D -T файл.рав
    и впасть в дзен.
    Это линейный полутоновой файл прямо с матрицы. У меня скоро будет пост на эту тему: "как из обычной цифровой камеры сделать измерительную". Stay tuned.

    И, если уж на то пошло, то -a тоже не нужен если есть -D?
    Нет, при установке ключа -D dcraw остальное, относящееся к цвету, игнорирует.

    ОтветитьУдалить
  8. Спасибо за разъяснения относительно dcraw! Было не ясно, как вытащить RGGB каналы в двухбайтовом формате из CR2. Теперь прояснилось. Кста, тоже для науки надо.

    ОтветитьУдалить
  9. "как из обычной цифровой камеры сделать измерительную" - а как скоро можно ждать эту документацию?
    Хотя бы приблизительно?
    Спасибо.

    ОтветитьУдалить
  10. 2 vgk комментирует...
    Спасибо за разъяснения относительно dcraw! Было не ясно, как вытащить RGGB каналы в двухбайтовом формате из CR2.
    Да, дело это не такое простое. Документация лаконична до предела, и некоторые подробности пришлось вытягивать из автора программы. Кстати, ответил он мне быстро и очень содержательно.

    Кста, тоже для науки надо.
    Понятное дело :-)

    2 Brainbug комментирует...
    "как из обычной цифровой камеры сделать измерительную" - а как скоро можно ждать эту документацию?
    Сейчас пишу статью по этой теме, в данный момент делаю лит.обзор и снимаю более точные показания с камеры. Не хочется сырое выкладывать, и там ещё не всё ясно. Думаю, к концу июля выложу. Должно быть несколько постов по этой теме.

    Хотя бы приблизительно?
    Дедлайн - август (ибо отпуск :-)) Там будет про линеаризацию, цветовые множители, насыщение, и многое другое.

    Из литобзора выясняются интересные подробности: в общем, такая программа, как dcraw, на самом деле не одна. Короче, всё интересное только разворачивается.

    ОтветитьУдалить
  11. 2 BrainBug

    Насчёт выкладывания материалов дальше, тут есть такой момент. Если у вас есть друзья\знакомые из академических институтов, занимающихся астрономией, мы могли бы встретиться на конференции. Так сказать, совместить приятное с полезным: встретиться и пообщаться, и выступить с докладом на эту тему. Или отправить статью в астрономический журнал.

    ОтветитьУдалить
  12. "Или отправить статью в астрономический журнал." - этот вариант более реален. Тем более, такой журнал есть:
    http://www.astronomy.ru/forum/index.php/topic,20187.0.html
    Так же есть вот ещё что:
    http://www.astronomy.ru/forum/index.php/topic,3117.0.html
    За дополнительной информацией обращайтесь ко мне на e-mail: cerebrum_06(цобако)yahoo . com

    ОтветитьУдалить
  13. 2 BrainBug пишет...
    За дополнительной информацией обращайтесь ко мне на e-mail
    Спасибо, Евгений! Обязательно обращуюсь - собственно, уже :-)

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

    ОтветитьУдалить
  14. Если нужен "разогнанный" файл на 16 бит, то лучше всего ключами -r выставить цветовые коэффициенты. Так я получил линейный цветной tif-файл

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

    ОтветитьУдалить