LibRaw+RawSpeed=LibRaw :)
lexa - 18/Сен/2012 14:43
RawSpeed - это такая библиотека раскодирования RAW, которая:
- Очень быстрая (к примеру, 21-мегапиксельный файл от Canon 5D2 распаковывается на моей машине за 230мс, а код на основе dcraw делает это за 750мс. Притом, это сильно улучшенный мной код, до улучшений было больше секунды, насколько я помню).
- Поддерживает мало форматов, правда все они популярные (свежие камеры Canon, Nikon, Olympus, Panasonic, Pentax, Samsung и DNG-файлы).
В то же время, RawSpeed распаковывает данные в буфер с очень похожим (но немного разным) форматом, поэтому использовать RawSpeed в качестве читалки файлов изнутри LibRaw (но иметь при этом единый API, единый постпроцессинг и т.п.) - было делом техники. И эта техника - применена в LibRaw 0.15-Alpha4.
Что получилось
- LibRaw::open_file()+LibRaw::unpack() /т.е. распаковка/ - в ~3 раза быстрее на CR2, в ~2-2.5 раза быстрее на NEF, в 1.5-2 раза быстрее на прочих поддерживаемых форматах. Реально это заметно на больших NEF и CR2 (выигрыш в 400-500 миллисекунд на моей i7-2600K @4.5Ghz), соньки и раньше распаковывались быстро, а у остальных форматов редко бывают совсем уж большие файлы.
- dcraw_emu -h ..список из 182 файлов.. - без RawSpeed было 150 секунд, стало 100 секунд. Разница "не в 2-3 раза" потому что постпроцессинг не изменился (хотя с -h он и так быстрый)
В чем разница
Выяснилось, что распаковка у RawSpeed - другая. Т.е. в комбинации распаковка+постпроцессинг побитовая разница получилась у 11 файлов (из 182), а если смотреть на RAW-данные без постпроцессинга, то разница будет еще и у кадров с Sony.Значимой визуальной разницы (после постпроцессинга) увидеть не удалось, но это не означает, что ее вовсе нет, я просмотрел не все.
Разница заключается в:
- Для форматов Sony: тоновая кривая построена так, что сразу умножает на 4 (давая "14-битный" диапазон).
- Для форматов с тоновыми кривыми: тоновые кривые по коэффициентам строятся немного иначе (float/double и разное округление), что может давать дельту в младших битах.
Как использовать
- Надо собрать RawSpeed. Самостоятельно :). В поставке LibRaw есть три моих патча к этой библиотеке (подсчет процессоров на Unix, __declspec(..) для Windows-DLL, .pro-файлы для qmake) и README.RawSpeed, где чуть подробнее написано что, как и почему.
- LibRaw надо собирать с C-дефайном USE_RAWSPEED.
- Дальше все работает само (и если RawSpeed не шмогла что-то распаковать - делает fallback на LibRaw).
- Отключить на рантайме можно путем imgdata.params.use_rawspeed=0
Фидбеку мне, фидбеку!
Я что-то сомневаюсь в том, что эта фишка быстро начнет широко использоваться, ибо гемороя с RawSpeed - довольно много (тянет за собой зависимости, да и судя по моим патчам - не так и широко используется). Но если вам хочется поразвлекаться с чем-то хорошим, то поиспользовать эту LibRaw в darktable или digiKam и рассказать мне о результате - полезное приложение сил.Особенно интересны случаи всяких глюков, естественно.
Comments
а выложите сборку - а то нечем собирать
а выложите сборку - а то нечем собирать
Я подумаю, но вообще альфы я в бинарном виде не выкладываю.
Я подумаю, но вообще альфы я в бинарном виде не выкладываю. Лови их потом по всему интернету....
обработка RAW c CCD матрицы , из охранной камеры
Я новенький, правил не видел, простите, если что не так. Вопрос имеется. Беру сигнал с CCD матрицы от охранной видео-камеры , матрица SONY ICX405ak с CMYK фильтром, оцифровываю и пересылаю в компьютер. Подскажите, чем и как можно посмотреть этот снимок? Никакого заголовка нет (но могу приклеить), разрешение 500 на 582, 8 разрядов.
В теории, надо приклеить
В теории, надо приклеить заголовок от DNG. С CMYK-фильтром, нежатое.
Adobe DNG SDK в руки и вперед...
Более простого способа я не знаю