Вернуться на домашнюю страницу Дэвида Коффина

Расшифровка сырых (RAW) цифровых фотографий в Линуксе

in English
en Esperanto
em Português
auf Deutsch

Добро пожаловать! Если вы спрашиваете себя о том, как подключить цифровую фотокамеру к компьютеру и загрузить изображения в Линуксе, переходите на домашнюю страницу gPhoto. Моя программа служит для обработки уже загруженных в компьютер изображений.

Если вы загружаете файлы JPEG, то вам не нужна моя программа. Изображения уже прошли обработку внутри фотокамеры. Почти все цифровые фотокамеры, выпущенные с 1997 года производят изображения в формате JPEG, поэтому зачем бы вам захотелось проделать то же самое, но по-другому?

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

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

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

Эта программа называется dcraw (произносится "ди-си-роо"), и она стала стандартным инструментом внутри и вне мира свободного программного обеспечения. Она небольшая (около 7000 строк), переносная (использует лишь стандартные библиотеки языка C), свободная и бесплатная, и при опытном использовании производит лучший результат, чем средства, предоставляемые производителем фотокамеры.

Здесь находится мое резюме. Я провожу свободные консультации относительно dcraw, а также я доступен для работы программистом на полный рабочий день на северо-востоке США.

Со мною можно связаться по электронной почте по адресу: dcoffin улитка cybercom точка net.

Мои программы

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

Примечание для распространителей Линукса: Единственными исполнимыми файлами, которые должны быть установлены пакетом dcraw являются "dcraw", "clean_crw", и, возможно, "fuji_green", "fujiturn", и "fujiturn16". Мои консольные программы являются опасными и должны устанавливаться лишь в директорию "doc" без разрешения на запуск.

Только для экспертов:

Интернационализация

Для установки dcraw с поддержкой неанглийских языков, загрузите последнюю версию tar-архива из этой директории и запустите программу "install". Текущими поддерживаемыми языками являются Эсперанто, русский, французский, итальянский, немецкий, португальский, испанский, датский, польский, венгерский, чешский, шведский и китайский (традиционный и упрощенный).

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

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

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

"Raw" (сырой) является английским словом, а не акронимом или форматом файла. "Raw photo" ("сырая фотография") должно переводится тем же прилагательным, которое используется в выражениях "crude oil" ("сырая нефть") или "raw materials" ("сырые материалы").

Существуют десятки форматов сырых фотографий: CRW, CR2, MRW, NEF, RAF и т.д. "Формата RAW" не существует; это лишь иллюзия, созданная способностью dcraw читать все сырые форматы.

Другие декодеры сырых фотографий

Dcraw намного облегчил программистам поддержку широкого диапазона цифровых фотокамер в своих приложениях. Они могут вызывать dcraw из графического интерфейса, включать часть dcraw.c в свою программу, или просто использовать dcraw.c в качестве документации, которую производители фотокамер отказываются предоставить.

Часто задаваемые вопросы

У меня нет компилятора языка C. Можете ли вы прислать мне исполнимый файл?
Нет, но Франциско Монтия предоставляет исполнимые файлы для Макинтоша и Windows на своем сайте. А Бенджамин Лебсанфт вызвался добровольно поддерживать исполнимые файлы для Windows, оптимизированные для разных видов процессоров.

Если вы знакомы с Досовской командной строкой, но не владеете языком C, вы можете установить этот бесплатный компилятор языка C для Windows и довольно легко скомпилировать файл dcraw.c.

Почему dcraw выдает сообщение "Недостаточно памяти" в Windows Vista?
Это произвольное ограничение Windows Vista, которое будет исправлено в первом сервисном пакете. У Томаса Найсли (известного по обнаружению ошибки FDIV у процессора Pentium) есть страница, описывающая данную проблему. На текущий момент, единственным способом избежать эту проблему является создание файла dcraw.exe с помощью Microsoft компилятора вместо компилятора GNU.

Каким образом я могу читать данные EXIF (выдержка, диафрагма и т.д.)?
Программа Фила Харви ExifTool предоставляет унифицированную, базирующуюся на языке Перл программу чтения (и редактирования!) EXIF данных для всех фотокамер и всех файловых форматов. "dcraw -i -v" намного быстрее, но предоставляет меньше информации.

Как я могу прочитать файлы NEF, производимые сканерами Nikon?
Dcraw поддерживает только фотокамеры. Для сканеров попробуйте эту простую программу.

Как я смогу прочитать пылевые изображения Nikon (файлы NDF)?
Используйте эту программу.

Есть ли у вас какая-либо документация, описывающая форматы сырых фотографий?
Да, но она склонна опускать важные детали, например, о том, как распаковать сырое изображение или расшифровать скрытые метаданные. Смотри официальную документацию по TIFF, TIFF/EP, Adobe DNG, CIFF (CRW) и X3F.

Где я могу взять подборку сырых фотографий для тестирования своего программного обеспечения?
Этот сайт является хорошим местом для обмена образцами сырых фотографий. Для полного тестового набора сырых фотографий dcraw (все фотокамеры, поддерживаемые dcraw), я продаю набор из 3-х DVD за $700 и обновление по интернету за $300 в год.

Я разрабатываю цифровую фотокамеру. Каким образом я могу сконвертировать ее сырые фотографии в нечто, что могут открыть dcraw и Adobe Photoshop?
Загрузите LibTIFF v3.8.2 и примените эту заплатку. Затем используйте эту программу на C в качестве шаблона для конвертирования своих фотографий в действительные файлы Adobe DNG.

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

Я сделал сырой фотоснимок в полной темноте. Почему он выглядит полным шума, в то время как он должен быть сплошного черного цвета?
Не важно, насколько темным является изображение, автоэкспозиция программы dcraw "растягивает" его так, что один процент его пикселей выглядит белым. Опция "-b" исправляет такое поведение, в то время как "-4" (16-битовый вывод) полностью его избегает.

Я изменяю яркость на плюс/минус два шага диафрагмы, но все пять снимков выглядят почти одинаковыми в dcraw. Почему?
Смотри предыдущий вопрос.

Почему 16-битовый вывод темен/нечитаем?
Если вы хотите получить красивые фотографии сразу из dcraw, придерживайтесь 8-битового вывода. 16-битовый линейный вывод является лучшим сырым материалом для профессиональных редакторов изображения, таких как Photoshop и CinePaint, но он не подходит для большинства просмотрщиков изображений.

Как действует опция "-f" (четырехцветный RGB)?
Если вы видите такие узоры, как этот или этот на выводимых изображениях, вначале попробуйте "dcraw -a". Если эти узоры сохраняются, используйте "dcraw -f" для их удаления.

Могли бы вы добавить опцию для вывода файлов в формате TIFF / FITS / PNG / BMP / JPEG?
В версии 8.25 и позднее, "dcraw -T" производит TIFF вывод с метаданными. Для получения других форматов:
dcraw -c crw_0001.crw | pnmtofits > crw_0001.fits
dcraw -c crw_0001.crw | pnmtopng > crw_0001.png
dcraw -c crw_0001.crw | ppmtobmp > crw_0001.bmp
dcraw -c crw_0001.crw | cjpeg > crw_0001.jpeg
В этих примерах я использовал набор инструментов Netpbm. ImageMagick также производит конвертирование форматов в режиме командной строки. Обе программы являются свободными и бесплатными.

Почему вы не сделаете dcraw в виде библиотеки?
Я решил, что dcraw должен быть программой, выполняемой в командной строке, написанной на языке C, и что все дальнейшие абстрактные слои должны добавляться вокруг этого ядра, а не внутри него.

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

Существует более легкий путь сделать dcraw модульным и с безопасными потоками управления (thread-safe): Запускайте его как отдельный процесс. Эрик Рэймонд объясняет эту технику здесь.

Почему присутствуют ложные цвета по краям внутри изображения?
Из-за интерполяции. Это сложная проблема, легко определяемая:
  1. Возьмите трехцветное RGB изображение. У каждого пикселя установите значения двух цветов на ноль.
  2. Реконструируйте оригинальное трехцветное изображение как можно лучше из оставшегося одноцветного пикселя.
Dcraw на настоящий момент предлагает выбор из четырех методов интерполяции: билинейной, по переменному числу градиентов (VNG), методом группировки пикселей по шаблону (PPG) и адаптивной гомогенно-ориентированной (AHD).

Светочувствительный элемент Foveon X3 Capture требует особого вида интерполяции. В отличие от CCD, он улавливает три цвета на каждое местоположение пикселя. Но цвета разделяются плохо, поэтому сырые данные выглядят очень серыми. Необходимо много дополнительной обработки для усиления цветов и одновременного подавления шума.

Каким образом заставить мою фотокамеру получать сырые (RAW) фотографии?
Для фотокамер Canon PowerShot A610, A620 и других идите сюда.
Для некоторых фотокамер Nikon Coolpix вам нужно задействовать специальный режим "DIAG RAW".
Для фотокамер Casio смотри сайт Мориса Делени или читайте эту дискуссию по dpreview.
Для фотокамер Minolta DiMAGE G400, G500, G530, или G600 идите сюда (на русском) или сюда (на английском).
Для фотокамер Minolta DiMAGE Z2 и Nikon Coolpix 2100/3100/3700 идите сюда.
Для фотокамер SMaL смотри форум camerahacking.

Для других фотокамер читайте руководство пользователя.

Поддерживает ли dcraw мою фотокамеру?
Вполне возможно, что да. Если вашей фотокамеры нет в этом списке, попробуйте dcraw в любом случае. Если это не работает, опубликуйте сырое изображение на своем сайте и по электронной почте пришлите мне его URL адрес. Если у вас нет сайта, используйте Dropload или YouSendIt.

В идеале, на вашем образце изображения должна быть показана стандартная белая карта или таблица цветов, снятая под прямым солнечным светом.