Май 27

Как добавить профиль камеры в Darktable

При проявке raw-файлов в Darktable часто приходит мысль, а можно ли использовать встроенные профили камер для обработки — поменять например режим со «Standart» на «Vivid» или на какой то свой, пользовательский. И мысль эта правильная, все таки разработчики фотоаппаратов занимаются не только маркетинговыми заявлениями, но и делают реальную работу по улучшению внутрикамерной обработки. Но это все делается для лучшего результата в JPG. Правда после обновления версии Darktable до 1.6 много фотоаппаратов перестали поддерживаться, и у многих теперь отображается «сырой», тусклый файл. Понять это можно, если к обрабатываемому снимку с настройками Darktable по умолчанию не применяется модуль Базовая кривая. Хотя его многие все равно отключают, но в нем как раз и находится информация о профиле камеры. Правда в очень усеченном варианте — если заглянуть в пресеты модуля, то можно выбрать почти для всех моделей камер только один. И это при широкой линейке фотоаппаратов, и не менее широком выборе настроек в отдельно взятой фотокамере. Но разработчики Darktable оставили возможность создавать и добавлять такие профили самостоятельно.

Добавляем профиль камеры в Darktable

Способ не слишком удобный, но вполне рабочий. И сделать все не так уж и трудно. О том как, есть статья  на официальном сайте. Правда она от 2013 года и уже устарела, поэтому там есть ссылка на Гитхаб – https://github.com/darktable-org/darktable/tree/master/tools/basecurve . Уже как-то не вдохновляет, но разве это трудности?.. Заходим, смотрим, есть список файлов для скачивания, среди них есть README, есть инструкция ниже. Уже неплохо, качаем все файлы оттуда в созданную папку basecurve. Автор делал эти процедуры на трех разных компьютерах с разными дистрибутивами Linux. В двух случаях одной этой директории было достаточно, в третьем пришлось качать архив с Darktable, распаковать его домашнюю директорию найти darktable/tools/basecurve и все дальнейшие действия производить там.

Также нам понадобятся несколько программ — dcraw, imagemagick, sqlite3, libexiv2-dev gnuplot

В Ubuntu их устанавливаем командой:

$sudo apt-get install dcraw imagemagick sqlite3 libexiv2-dev gnuplot

Теперь компилируем файл dt-curve-tool, который есть в каталоге basecurve

По инструкции надо, находясь в этом каталоге, выполнить в терминале команду

$make

После ее выполнения в каталоге должна появится два файла, dt-curve-tool и dt-curve-tool-helper

Можно попробовать собрать файл не с помощью команды make, а двух таких команд:

g++ -O3 -g -Wall -std=c99 -pedantic -c -o exif-wrapper.o exif-wrapper.cpp

g++ -O3 -g -Wall -std=c99 -pedantic exif-wrapper.o dt-curve-tool.o -lm -lexiv2 -o dt-curve-tool

Если вы скачали только содержимое папки basecurve и при компиляции при вводе команды make пишет «Не заданы цели и не найден make-файл. Останов.» или на ввод команды

g++ -O3 -g -Wall -std=c99 -pedantic -c -o exif-wrapper.o exif-wrapper.cpp

вылезает куча ошибок — где преобладает

« error: too many decimal points in number» , то надо скачивать и распаковывать весь дистрибутив Darktable и производить все операции в  darktable/tools/basecurve.

Даже в разных версиях той же «юзерфрендли» Ubuntu компиляция не проходит одинаково успешно. Поэтому придется применить свою сообразительность. На Gentoo компилировал файлы так — сначала в Ubuntu в директории basecurve была выполнена команда

g++ -O3 -g -Wall -std=c99 -pedantic -c -o exif-wrapper.o exif-wrapper.cpp

Затем basecurve была скопирована в домашнюю директорию Gentoo и там уже была выполнена вторая команда:

g++ -O3 -g -Wall -std=c99 -pedantic exif-wrapper.o dt-curve-tool.o -lm -lexiv2 -o dt-curve-tool

Файлы собрались.

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

В OpenSuse Leap 42.1 я сделал так – скачал установочный rpm-файл, открыл его в архиваторе, извлек архив дистрибутива darktable-2.0.3.tar.xz в домашнюю директорию, распаковал его:

tar -xpJf darktable-2.0.3.tar.xz
Дальше перешел в tools:

cd /darktable-2.0.3/tools/basecurve/

Ну и собрал еще одним способом из вышеуказанных ресурсов:

mkdir build
cd build/
cmake -DCMAKE_INSTALL_PREFIX=$YOUR_INSTALL_PATH -DCMAKE_BUILD_TYPE=Release ..

вместо $YOUR_INSTALL_PATH указать полный путь до каталога без кавычек, если в пути нет пробелов home/имя_пользователя/darktable-2.0.3/tools/basecurve

дальше сама сборка:
cmake –build . — install
Делалось 29 марта 2016 года, поэтому все разговоры что устарели файлы для компиляции являются всего лишь разговорами.

Если все прошло успешно, то надо проверить папку basecurve на наличие файла dt-curve-tool, через командную строку:

./dt-curve-tool -h

Продолжаем

Должна в выводе появиться справка с параметрами скрипта. Если все прошло успешно, попытаемся создать свой профиль, вернее скопировать его настройки с фотоаппарата с помощью dt-curve-tool.

Копируем пары RAW– и JPEG-файлов, снятых в одном из режимов фотоаппарата в папку basecurve, кто разбирается в путях Linux может использовать другие места и поправить по своему. Для этого надо добавить dt-curve-tool в $PATH.

Дальнейшие действия предполагают, что в файл конфигурации Darktable library.db добавятся новые пресеты кривых, настоятельно рекомендую перед запуском сделать резервную копию этого файла, или можно навсегда остаться без сохраненных своих настроек Darktable:

 cp $HOME/.config/darktable/library.db $HOME/.config/darktable/library.db.bck

Далее копируем в папку /basecurve с карты памяти JPG и RAW файлы снимков, выполненных с настройками одного из профилей и снова переходим в терминал, выполняем там следующие команды:

dcraw -6 -W -g 1 1 -w FILE.RAW

(можно производить операции с NEF, CR2, ORF и т.д.– все зависит от модели камеры)

 mv FILE.ppm FILE-raw.ppm

Так мы преобразуем наш RAW-файл в формат ppm, и переименовываем его в FILE-raw.ppm чтобы его в дальнейшем не перезаписала вот эта команда преобразования JPEG файла в тот же формат:

 convert FILE.JPG FILE-jpeg.ppm

Лучше взять не один, а несколько, например 5 пар таких файлов, чтобы данные считались точнее. Я взял для опыта стиль Vivid. По умолчанию в нем настройки резкости, насыщенности и контраста находятся в нулевом, среднем положении. Vivid хорош тем, что он представляет в таком виде как бы золотую середину при съемке с ручными настройками. Вкратце поясню. Если ставить в одном из профилей камеры максимальные значения настроек, то мы выигрываем в увеличении времени выдержки при остальных равных, сочнее будут цвета, и детализация должна быть на более высоком уровне. Но и шумы тоже будут на таком же уровне… Плюс снимок может стать «фломастерным», вероятнее появление пересветов и безнадежно темных участков, динамический диапазон будет довольно узким. Если же наоборот, установить минимальные настройки, получаем большой динамический диапазон,  но при этом снимок получится тусклый, выдержка короче, как следствие резкость и детализация ниже, да и от цветопередачи камеры останется немного, надежда только на алгоритмы Darktable. Зато такой постобработкой можно добиться минимальных шумов в тенях и много других преимуществ. Что-то теряем что-то находим… Поэтому Vivid — золотая середина, и с фотоаппарата возьмем максимум, и для Darktable работа может найтись.

Выполнили команды, взяв по желанию несколько пар файлов, добавляя к их наименованию цифровой префикс.

Дальше выполняем для каждой пары наших файлов следующую команду:

dt-curve-tool -s -a home/username/tmp/mycamera.dat FILE1-raw.ppm FILE1-jpeg.ppm

Создайте заранее каталог home/username/tmp – раньше он создавался сам, но теперь в некоторых дистрибутивах без создания  команда не проходит. Было взято для примера 5 пар файлов, снятых в одинаковом режиме камеры.

Параметров у скрипта много, но используем пока те, что написаны в мануале, добавив лишь один:a. Он отображает кривые a и b из Lab на графиках. Если взглянуть в нашу директорию, теперь там можно увидеть несколько новых файлов – tonecurve.dat, basecurve.dat и mycamera.dat. А все вместе это обозначает, что наш dt-curve-tool проанализировал информацию о цифровом содержимом каждой пары изображений и записал ее,а пять итераций уточнили информацию.

Теперь нам надо обработать дальше mycamera.dat, и нам потребуется один из RAW-файлов, который мы преобразовывали, я взял со средним номером:

dt-curve-tool -z -e FILE3.RAW / home/username/tmp/mycamera.dat -s | tee mycameracurves.sh

От выполнения этой команды будет большой вывод с отладочной информацией, предупреждением забэкапить library.db (я это тоже предупреждал), а суть — сгенерировался файл mycameracurves.sh, еще один скрипт, который будет записывать информацию о кривых непосредственно в пресеты Darktable. Запустим его:

sh mycameracurves.sh

Команда отрабатывает быстро, теперь можно открыть или перезапустить Darktable и в списке пресетов Базовая кривая и Кривая тоновоспроизведения увидим новый с именем модели камеры. Если кто добрался до этих строк успешно, думаю сможет дальше создавать профили со своими именами, все есть в справке. И еще одно, если запустить скрипт mycameracurves.sh второй раз, он выполнится с ошибкой, перезаписывать пресет с одинаковым именем он не умеет. Это, конечно неудобно (у самого с первого раза не получились кривые) – один из вариантов победить эту проблему – открыть файл library.db с помощью SQLite manager, расширения firefox, в разделе Tables -> presets найти наши и удалить эти строки. Затем попробовать заново запустить скрипт mycameracurves.sh.

Заключение

Теперь посмотрим как это все работает. Выберем снимок, откроем его в Darktable:

ish1

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

ish2

Сравним с файлом JPG:

ish3

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

Ну а вывод такой же, как в предыдущей статье, такой профиль осветляет исходный RAW файл, в данном случае особенно в светах и ему потребуется дополнительная обработка в Darktable, в данном случае хотя бы простая коррекция экспозиции:

ish4

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

Но это еще не все, можно не записывая в Darktable посмотреть полученные кривые из файлов tonecurve.dat и basecurve.dat. Для этого в терминале выполним две команды:

gnuplot plot.basecurve

gnuplot plot.tonecurve

В директории появилось два новых файла, basecurve.pdf и tonecurve.pdf. Откроем один из них – графическое отображение кривых!

bspdf3Много мусора, его становится меньше, чем больше пар файлов проанализировать через dt-curve-tool. Ну основная кривая видна, она такая же, как сохранилась в модуле.

Два листа в каждом pdf-файле потому, что gnuplot обрабатывал пары tonecurve.dat tonecurve.fit.dat и basecurve.dat basecurve.fit.dat.

В файлах с префиксом fit была сгенерирована сокращенная информация о модуле фотокамеры, поэтому график кривой там отображается более отчетливо, без лишнего мусора:

P.S. Способ не из легких, нужен опыт работы в Linux с подобными вещами, скрипты сборки несовершенны, поэтому не мучайтесь очень сильно, если не получается скомпилировать файл или в пресете получается не то что хотите увидеть, пишите в комментариях, я могу предоставить  ссылку на dt-curve-tool, собранный для Ubuntu.

Ну и в заключении еще несколько информации – если raw-файлы принадлежат новой, только что выпущенной или наоборот, старой модели фотокамеры¸ то подобный профиль создать скорее всего не получится. В первом случае придется ждать обновления программы, в надежде, что разработчики добавят поддержку новой камеры, во втором случай почти что безнадежный. Конвертация в dng или tiff не спасает – профиль формируется только по одной из двух систем координат и на выходе получается черный квадрат после применения пресета. Можно, конечно построить кривые на основе сгенерированных pfd-файлов, но не знаю – это очень нелегко и точно может совсем не получится.


Метки:
Copyright 2020. All rights reserved.

<!-- Yandex.RTB R-A-280270-1 --> <div id="yandex_rtb_R-A-280270-1"></div> <script type="text/javascript"> (function(w, d, n, s, t) { w[n] = w[n] || []; w[n].push(function() { Ya.Context.AdvManager.render({ blockId: "R-A-280270-1", renderTo: "yandex_rtb_R-A-280270-1", async: true }); }); t = d.getElementsByTagName("script")[0]; s = d.createElement("script"); s.type = "text/javascript"; s.src = "//an.yandex.ru/system/context.js"; s.async = true; t.parentNode.insertBefore(s, t); })(this, this.document, "yandexContextAsyncCallbacks"); </script>

4 COMMENTS :

  1. By Andrey on

    Спасибо за полезный сайт и статью, но собрать это чудо не удалось. Собирал под ubuntu 14.04 64 bit
    Ошибка при сборке:
    Could not find a package configuration file provided by “Exiv2” with any of
    the following names:

    Exiv2Config.cmake
    exiv2-config.cmake

    Add the installation prefix of “Exiv2” to CMAKE_PREFIX_PATH or set
    “Exiv2_DIR” to a directory containing one of the above files. If “Exiv2”
    provides a separate development package or SDK, be sure it has been
    installed.
    ставил этот exiv2, качал его исходники, прописывал префикс, поставил кучу мусора в систему – все без толку. Гугл тоже особо не помог. Не ясно, что мешает собирать эти тулзы вместе с darktable…
    Может можете выложить готовые бинарники 64 bit? Заранее спасибо

  2. By Andrey on

    добавлю к этому, что сам DT из сорцов собрался без проблем

  3. By dimma (Сообщение автора) on

    Я не собирал на 64 бита к сожалению, и пока нет времени. Но обязательно посмотрю, что за проблема, у меня были трудности, но на других этапах.

  4. By Семен on

    все сделал вручную по инструкции с гитхаба. если кто хочет убить много времени, обрабатывая 2-3 десятка пар рав+жпг, чтобы получить “тот самый” профиль, то можете попробовать. но у меня оказалось, что стандартный пресет для моего производителя камер оказался даже получше.

Обсуждение закрыто.