[вернуться к оглавлению]
Цели и задачи проекта LibRaw
Содержание
- Кому может быть интересен этот проект, и что мы хотим получить
- Цели и задачи
- Принципы сопровождения LibRaw
- Произведенные улучшения dcraw
- Планируемые улучшения
Кому может быть интересен этот проект
Предлагаемый вашему вниманию проект и порождаемый им программный продукт предназначены для:
- разработчиков новых raw-конверторов,
- желающих написать свой графический интерфейс для обработки raw-файлов
- разработчиков и энтузиастов, создающих отдельные собственные основные и вспомогательные алгоритмы обработки
изображений, как то:
- интерполяция (дебайеризация),
- шумопонижение,
- баланс белого,
- коррекция аберраций и дисторсий,
- преобразования цвета (например, обработка профилей камер),
- анализ данных raw,
- сравнение камер и объективов
- и так далее...
Среди существующих сегодня относительно немногочисленных реализаций распаковки RAW-данных, получаемых с цифровых
фотокамер наиболее распространены и наиболее широко используются реализации на основе утилиты
dcraw, написанной Dave Coffin. Ее популярность
связана с тем, что трудно найти сколько-нибудь распространённую камеру, которая не была бы поддержана данной
утилитой, а сам уровень поддержки распаковки весьма хороший.
Однако на пути разработчиков и энтузиастов, использующих или собирающихся использовать dcraw для решения
указанных выше задач, стоят несколько препятствий. Первое из них состоит в том, что автор dcraw принципиально не
оформляет свой программный продукт в виде библиотеки, удобной для использования, оставляя это на откуп всем
желающим (и не возражая против этого). Помимо этого, dcraw содержит ряд особенностей и фотографических
некорректностей, которые могут мешать ее использованию без модификаций.
В результате, практически все
разработчики (часть из которых перечислена на сайте dcraw) раз в несколько месяцев, независимо друг от друга
переводят очередную версию утилиты в библиотечный вид.
Для энтузиастов же «входная стоимость»
возможности проверки собственных идей и реализации собственных алгоритмов оказывается, зачастую, непомерно
высокой: нужно либо пользоваться командной строкой dcraw (что приводит к обязательному использованию
неотключаемых ранних стадий обработки), либо разобраться в исходном коде dcraw и поддерживать собственную
библиотеку на ее основе.
Таким образом, неудобства, присущие dcraw, значительно сужают сообщество разработчиков и тормозят процесс
развития и совершенствования конверторов RAW-формата.
Цели и задачи
При создании LibRaw мы хотим "получить библиотеку на основе dcraw, только лучше":
- "обиблиотечить" dcraw, т.е. разработать стабильный и консистентный API, пригодный для использования в других
приложениях (RAW-конверторах, анализаторах данных, склейщиках панорам и так далее).
- Разделить на независимые части (группы вызовов API):
- чтение, раскодирование и распаковку RAW-данных - и это основная функциональность LibRaw;
- преобразования данных: интерполяцию, баланс белого и т.п.;
- вывод результатов обработки в файлы.
Две последние группы функций поддерживаются, в первую очередь, для целей тестирования совместимости с dcraw.
- Улучшить процедуры извлечения и раскодирования RAW-данных (подробнее - ниже)
- Дать другим разработчикам "рамку" (бесплатную и в открытых исходниках) в которой можно было бы, например,
экспериментировать со своими способами обработки RAW-данных (интерполяция, шумопонижение, баланс белого и так
далее, возможные варианты приложения своих усилий частично перечислены выше), и
создавать свои графические оболочки и интерфейсы не разрабатывая RAW-конвертор целиком.
- Обеспечить лёгкость внесения изменений для синхронизации кода с релизами самой dcraw.
Принципы сопровождения LibRaw
- Повторить функциональность dcraw, взяв ее исходные тексты за основу, добиться бинарной идентичности (при
одинаковых настройках) результатов работы dcraw и утилит на основе LibRaw.
- Избавляться от недостатков dcraw (о некоторых из них см. ниже улучшения dcraw и
план работ).
- По мере совершенствования dcraw (поддержка новых камер, исправление ошибок, улучшение алгоритмов) -
импортировать улучшения из dcraw в LibRaw.
- Изменения API: запланированные улучшения потребуют расширения API. Такие
изменения будут делаться большими change-set-ами, а режимы совместмости со старыми приложениями
будут сохраняться, насколько возможно.
Произведенные улучшения dcraw
На момент написания данного текста в LibRaw внесены следующие дополнительные улучшения относительно исходного
кода dcraw:
- Полностью убраны глобальные переменные (а при сборке thread-safe варианта - и статические переменные
функций).
- Thread-safety. Пример использования в многопоточном режиме включен в поставку библиотеки.
- Извлекаемые из RAW-файла данные несколько структурированы: геометрия отдельно, цветовые данные отдельно.
Эта работа еще не закончена и будет продолжена одновременно с работой над улучшением
обработки EXIF.
- Извлечение RAW-данных и thumbnail может быть сделано за 2-3 вызова API с очень простым программным
интерфейсом.
- Работа с цветовой информацией: для цветовых данных (коэффициенты баланса белого, тоновая кривая и т.д.)
добавлены флаги, показывающие откуда эта информация: извлечена из RAW-данных, вычислена по самому изображению,
взяты константы из кода.
- Извлекается ICC-профиль (для тех RAW-файлов, где он есть)
- Само изображение и thumbnail можно извлечь последовательными вызовами, без переоткрытия файла и перезапуска
библиотеки.
- Несколько снижены требования к необходимому количеству оперативной памяти
- Работа с маскированными пикселями и уровнем черного: возможно отключить обязательное вычитание уровня
черного и фильтрацию нулевых пикселов
- Работа с краями диапазона значений: минимальными значениями (часто называемыми точкой черного) и
максимальными значениями (точкой насыщения).
- Вычитание точки черного сделано необязательным.
- Рассчитываются максимальные значения данных по каналам.
Планируемые улучшения
Код dcraw нуждается в существенных изменениях и дополнениях:
- Однопроходная распаковка RAW-файлов с несколькими вариантами изображения: для тех камер, для которых
это применимо (камеры FUJI, камеры с режимами 4-shot/16-shot) будут извлекаться несколько планов одного
изображения.
- Работа с черной рамкой: данные, считанные с черной рамки (или двух черных рамок, на тех камерах, где
их две) нужно делать доступными в вызывающем приложении (например, это необходимо для подавления
определённых артефактов, в частности - banding).
- Верификация распаковки данных для максимального набора форматов файлов. Существует мнение, что
некоторые форматы данных dcraw распаковывает не вполне корректно.
- Работа с EXIF/Makernote: извлечение данных в большем объеме, в частности:
- Извлечение максимально возможного количества данных о цвете (настройки баланса белого, профиль, тоновая
кривая, настройки контраста и т.п.)
- Генерализация данных о цвете: приведение цветовых данных от различных камер к "общему знаменателю" с
целью упростить обработку цвета (без потери качества обработки).
- Извлечение данных о камере (версия firmware, серийный номер)
- Извлечение данных о кадре (оптика, дистанция фокусировки, фокусировочные точки и их координаты и
т.п.)
- Извлечение полного массива EXIF-данных без анализа структуры с целью облегчения копирования EXIF-данных
в выходные файлы.
- Генерализация работы со сложными форматами, в частности:
- RAW-файлы от камер Fuji (с двумя наборами сенсоров)
- RAW-файлы от задников с режимами 4-shot и 16-shot
В то же время, никаких модификаций и расширений кода обработки данных dcraw (де-байеризация, цветовые
преобразования и так далее) мы производить не планируем, это все должно быть задачей вызывающего
приложения. Стандартные режимы обработки, включенные в dcraw (за исключением поддержки LCMS и libjpeg и
некоторых несущественных этапов обработки) будут сохранены неопределенное время (в наборе вызовов API,
эмулирующих dcraw).
[вернуться к оглавлению]
LibRaw Team
Last modified: Mon Jul 11 14:54:53 MSD 2011