Программы преобразования RAW-файлов в цветное изображение


Камера — это измерительный прибор для регистрации изображения. Результатом ее работы является необработанная последовательность чисел (raw — «сырой», необработанный), каждое из которых зарегистрировано соответствующим чувствительным элементом камеры. Этот массив существует всегда в памяти или оформленный в виде файла. Программа для работы с ним тоже нужна всегда. Она может выполняться камерой или внешней большой ЭВМ, но она всегда присутствует. В предельном случае ее выполняет экспериментатор, замеряя напряжение на фотоприемниках и закрашивая разграфленную на квадраты миллиметровку в соответствии с полученными значениями. Для того чтобы превратить массив данных в изображение, нужно знать параметры матрицы, как минимум число чувствительных элементов в строке и направление строк относительно кадра. Как с помощью Photoshop в этом случае получить черно-белое изображение, описано в статьях: Клад, зарытый Casio и Цифровой задник Leaf valeo 11. Чтобы восстановить цвет, надо еще знать цвет и порядок расположения фильтров перед чувствительными элементами. Если камеры записывают необработанные данные только для внутренних целей, то файл с ними обычно устроен очень просто, но если его собираются отдать фотографу, то его структура усложняется,  производится сжатие без потерь, записывается дополнительная информация о параметрах съемки, может помещаться миниатюра для предварительного просмотра. Обычно камеры сразу внутренними средствами преобразуют исходные данные в цветное изображение, но часть информации при этом теряется.  Поэтому у фотографа, привыкшего самостоятельно проявлять пленку, возникает  естественное желание получить полный контроль над обработкой исходных данных.

Для полного контроля нужно знание операций, производимых с данными программой, и конструкции камеры. Этим условиям отвечает известная с 1997 года программа DCRAW  Д. Коффина (Dave Coffin) которая содержит, кроме алгоритма обработки, и информацию о конструкции огромного количества камер. Ее роль в цифровой фотографии трудно переоценить. Чтобы понять, насколько велико ее влияние, достаточно зайти на страничку разработчика. Собственно программы этого типа являются необходимым и достаточным условием существования цифровой фотографии. Все остальное блажь и роскошь. Но роскошь иногда бывает очень приятна и удобна, поэтому на ней мы остановимся во второй части статьи.

Как следует из текста на странице автора, код этой программы используется почти во всех альтернативных (программам производителя) программах преобразования RAW файлов в цветное изображение. В том числе, и в таких, в целом, платных программах, как Photoshop. Сам модуль преобразования Photoshop Camera Raw plug-in, впрочем, для Photoshop CS, распространяется свободно. Используется эта программа и в бесплатном прекрасном редакторе GIMP.

Сама программа DCRAW существует в виде исходного кода на C. Все остальное сделали другие люди. Программа на сегодняшний  день поддерживает 142 камеры. В том числе, большинство RAW форматов, которые могут быть вызваны только из служебного меню. Например: Casio Exlim Pro 700! Включенная в Photoshop часть этой программы позволяет преобразовывать только официальные файлы RAW, их в последней версии только 70.  Поскольку программа написана на С, то в случае появления новой камеры, со слегка отличающимися параметрами, модернизировать программу для работы с этой камерой может любой, более-менее знакомый с языком С.

В прекомпилированном виде эта утилита включена во многие дистрибутивы Linux, имеется в портах FreeBSD, в качестве бинарного пакета есть и для DragonFlyBSD (и доступна, как и все бинарники для этой ОС, на сайте GoBSD.) Есть версии и для DOS.

Самая простая реализация этой программы позволяет запустить ее из командной строки.

$ dcraw file_name

Что на выходе даст одноименный (не считая суффикса) файл в формате PPM (Portable Pixel Map или здесь), был предложен Jef Poskanzer в 1988 году. Для работы с этим форматом существуют библиотеки на С pbmplus и libnetpbm. То есть на такой конвертированный файл можно обрушить, например, всю мощь Gimp'а. Что уже само по себе неплохо...

DCRAW располагает достаточно обширным набором опций. Ознакомиться с ними можно на man-странице — man (1) dcraw. Или просто запустив эту программу без опций и аргументов. Попробуем проделать это и мы, разумеется, сопроводив вывод комментариями на рiдной мове (русскоязычного хелпа эта программа, вроде бы, пока не имеет):
° -i идентификация raw-файла, данного в качестве аргумента команды, без его конвертации; вывод ее выглядит примерно так:
имя_рек.raw is a Casio EX-P600 image.
° -c конвертация raw-файла с направлением результата на стандартный вывод; очевидно, что в ответ последует сообщение о невозможности вывода изображения на терминал; однако если перенаправить вывод в файл —эту команду в форме
° dcraw -c file_name.raw > file_name1.ppm
° можно использовать для присвоения выходному файлу произвольного имени;
° -v вывод сообщений в ходе конвертации;
° -f интерполяция RGBG как 4-цветного изображения (Interpolate RGBG as four colors);
° -d конвертация в черно-белое изображение в режиме документа (Document Mode (no color, no interpolation));
° -q быстрая, низкокачественная интерполяция цветов (Quick, low-quality color interpolation);
° -h (Half-size color image (3x faster than -q));
° -g установка показателя степени гамма (Set gamma (0.6 by default, only for 24-bpp output));
° -b установка значения яркости (Set brightness (1.0 by default));
° -a использование автоматического баланса белого (Use automatic white balance);
° -w (Use camera white balance, if possible)
° -r (Set red multiplier (daylight = 1.0))
° -l (Set blue multiplier (daylight = 1.0))
° -2 запись ppm-файла в формате 8 бит на канал, опция по умолчанию (Write 24-bpp PPM (default))
° -3 запись PSD-файла в формате 16 бит на канал (Write 48-bpp PSD (Adobe Photoshop))
° -4 запись ppm-файла в формате 16 бит на канал (Write 48-bpp PPM)

Возможности у dcraw, как видно, неслабые. И, теоретически рассуждая, вполне доступны для пользователя. Вот только использовать их непосредственно из командной строки не так уж и просто. Не из-за какой-то особой сложности опций самих по себе, а в принципе: подбор тех же значений гамма-коррекции, да еще без визуального контроля получившегося результата, — дело не очень тривиальное. И возникает вопрос — а нельзя ли к dcraw прикрутить какой-нибудь графический интерфейс для упрощения таких действий? Ведь даже самый ярый приверженец командной строки согласится с тем, что кесарево —кесарю, а слесарево — слесарю…

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

Gimp

А вот тут пора бы и вспомнить о давно обещанном Gimp'е. Тема эта несколько сложна для рассмотрения. С одной стороны, за что ни возьмись в растровой графике — Gimp окажется при деле, и хоть пару слов о нем сказать можно. С другой же — сразу оказывается, что пары слов будет мало, и приходится говорить еще и еще. Поэтому собственно о Gimp'е речи тут не пойдет — лишь о том, как прикрутить его к обработке кадров цифровых камер.

GIMP
GIMP
GIMP
GIMP
GIMP
GIMP
GIMP
GIMP
Так выглядит интерфейс GIMP. Даже из этой картинки легко заметить, что все необходимое в нем есть, и построен он весьма логично. Учитывая, что вместе с необходимой библиотекой он занимает всего 10 Мб, стоит скачать и попробовать самому :-)
Готовая к установке программа по адресу: http://gimp-win.sourceforge.net/stable.html.
Около 10 Мб двумя файлами: GTK+ 2 for Windows (version 2.4.14) и The Gimp for Windows (version 2.2.3)

Одна из отличительных особенностей Gimp'а — его практически неограниченная расширяемость, вытекающая из его природы: открытые исходники, однако же… И реализуется эта расширяемость двумя способами: с одной стороны, через так называемые script-fu (то есть программы, написанные на языках сценариев типа Perl или Sheme), с другой — plug-in'ами, небольшими Си-программами, требующими автономной компиляции, но естественным образом интегрируемыми в общую структуру Gimp'а.

Так вот, dcraw и может выступить в качестве одного из таких Gimp plug-in'ов. Для этого достаточно установить все тот же пакет dcraw. после чего попытка открыть посредством Gimp'а любой из raw-форматов, ранее безуспешная, вызывает панель следующего вида

Raw Photo Loader
Так Gipm plug-in открывает raw-файлы

Ничего нового, собственно говоря, мы на этой панели не увидим: переключатели соответствуют описанным выше опциям командной строки dcraw, и то не всем. Однако она избавляет от необходимости их запоминания. А главное, подбирать яркость или баланс цветов, щелкая по стрелкам, несколько проще, чем задавать их вручную. Правда, функции предпросмотра получившегося результата мы не обнаруживаем — все равно придется выполнить конвертацию. Но, тем не менее, некий визуальный контроль все же имеет место быть. Вообще с задачей графического интерфейса этот вариант справляется плохо, поэтому рассмотрим еще два из них, скомпилированные для Windows. Естествеено, близкого результата можно добиться и для других ОС, просто разделение труда между авторами статьи привело к тому, что эта часть тестировалась на машине, умеющей работать только с окнами.

RawPhoto GIMP-2.0 plug-in

Автор: Pawel T. Jochym

Raw Photo Loader

dcraw

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

UFRaw

Автор: Udi Fuchs

UFRaw содержит код dcraw внутри себя, имеет более богатые настройки, отображает две гистограммы яркостей — до и после преобразований. Эта программа может работать и независимо от GIMP и сохранять результаты в файле. Обработка проводится с 16 битными числами и только затем перед передачей в GIMP числовые значения округляются до 8 бит. 8 бит — это, пожалуй, единственное, что меня останавливает от полного отказа от Photoshop. Любопытно, как эта программа обрабатывает экзотический снимок камеры FUJIFILM FinePix F700.

UFRaw

UFRaw

Описанные программы предполагают, что с их возможностями вы будете разбираться самостоятельно, потому только обращу внимание на параметр: Clip Saturated pixels в первой программе и Unclip во второй. Он отвечает за то, что делать, если в одном из каналов сигнал зашкалил — отбросить и значения в других каналах или дать, как есть. Если сравнивать с тем, как этот файл обрабатывает  Photoshop Camera Raw plug-in, то легко заметить, что есть разница.

Photoshop Camera Raw plug-in 

Что лучше, я судить не берусь, но есть повод задуматься, какую программу лучше использовать в каждом конкретном случае. В дополнение отмечу, что Photoshop Camera Raw plug-in  имеет больше возможностей, относящихся к дополнительной обработке. Можно регулировать подавление шумов и попытаться исправить хроматические аберрации, причем иногда весьма успешно. 

Photoshop Camera Raw plug-in 
Photoshop Camera Raw plug-in 
До коррекции
Photoshop Camera Raw plug-in 
После коррекции. Изображение при верстке увеличено в 2 раза.

Как это собрать

Выше мы неоднократно подчеркивали, что все упомянутые здесь программы доступны в виде прекомпилированных пакетов для подавляющего большинства дистрибутивов Linux и BSD-систем. Однако возможно, что по закону всемирного свинства именно для вашей системы их и не окажется. Или — в ней будет устаревшая версия. Или, наконец, вы захотите добавить какие-либо функции. В общем, причин для самостоятельной сборки программ из исходников может быть множество - вплоть до оптимизации под наличное "железо". Так что уделим этому вопросу несколько слов.
Подавляющее большинство исходных текстов свободных программ распространяется в виде тарбаллов — tar-архивов, сжатых с помощью утилит компресии gzip или bzip2, и имеющих вид *.tar.gz или *tar.bz2, соответственно. Так что первый шаг после получения такого тарбалла из Сети — его распаковка в подходящее место:
$ tar xzvf name.tar.gz
или
$ tar xjvf name.tar.bz2
соответственно, и переход в образовавшийся подкаталог командой cd name. А дальше все происходит посредством трех волшебных слов - команд

$ ./configure

$ make

$ make install

Первая команда выполняет сценарий предварительного конфигурирования (создание такового — задача разработчика), вторая осуществляет собственно сборку программы, третья интегрирует образовавшиеся исполнимые бинарники, библиотеки, документацию и прочее в должные места файловой системы (по умолчанию обычно - в подкаталоги каталога /usr/local, такие, как /usr/local/bin, usr/local/lib, и так далее.
Правда, сначала неплохо выполнить еще одно предварительное действие - команду
$ ./configure --help
и внимательно ознакомиться с ее выводом — это будет список всех предусмотренных разработчиком опций конфигурирования. Подробности про сборку программ можно прочитать здесь.
Таким образом собирается большинство программ, вплоть до очень сложных, вроде Gimp'а. Однако если обратиться к вышеупомянутой страничке Дэвида Коффина, то можно увидеть, что его программа dcraw представляет собой всего один файл — исходный текст на языке Си под именем dcraw.c. И — ни малейшего сценария конфигурирования…
В этом случае дело обстоит еще проще — напрямую вызывается компилятор языка Си (и в Linux, и BSD-системах им будет gcc) с аргументом — именем файла исходника, и опцией, значением которой будет имя целевого бинарника:
$ gcc -o dcraw dcraw.c
Правда, в такой форме мы немедленно получим сообщение об ошибке — ибо для сборки и работы dcraw необходимы некоторые библиотеки (в частности, графических форматов, типа libjpeg), о местоположении которых в самом исходнике, естественно, не сказано ни слова (нахождение нужных библиотек — одна из задач сценария конфигурирования). Что ж, укажем пути к библиотекам явным образом. В Linux это, скорее всего, будет каталог /usr/lib, в BSD-системах в данном случае потребуется /usr/local/lib. А еще потребуются пути к так называемым заголовочным (header) файлам (своего рода оглавлениям библиотечных функций) - это, скорее всего, будут /usr/includes и /usr/local/includes, соответственно. И в итоге команда для сборки dcraw примет следующий вид:
$ gcc -I /usr/local/include/ -L /usr/local/lib/ -o dcraw dcraw.c
Теперь остается только скопировать получившийся бинарник в подходящее место — например, в /usr/local/bin. Правда, таким путем мы получим только сам конвертор raw-файлов, пригодный для использования в командной строке. Чтобы встроить его в Gimp и получить, таким образом, доступ к графическому интерфейсу, потребуется еще и собственно программа-plugin — rawphoto. Это точно такой же одинокий файл — rawphoto.c, который также берется со страницы Дэвида Коффина. И поступить с ним нужно точно так же — скомпилировать с указанием соответствующих путей и имени целевого бинарника rawphoto. Только вот поместить последний нужно в каталог для plug-in'ов Gimp — например, в ~/.gimp-2.2/plug-ins для пользования собой, любимым, или куда-нибудь типа /usr/X11R6/share/gimp/plug-ins — чтобы сделать достоянием всех пользователей (пример дан для файловой иерархии DragonFlyBSD, в Linux путь будет иным, зависящим от дистрибутива).

Заключение

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






Дополнительно

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.