Принципиальный вопрос про преобразование многобитного RAW в стандартное изображение
Доброе время суток, профи!
Как любитель, не могу найти ответа на одну проблемку уже много лет, хоть и перерыл доступную информацию. Набрел на ваш сайт - может поможете...
Берем снимок в 14(12)-битном RAW (на каждый канал) и хотим преобразовать в стандартный 8-битный JPEG, но - внимание - пропорционально пересчитать 14 бит в 8, и -кроме того- не по линейному закону, а к примеру по S-образному графику.
Пытался делать это с помощью многих RAW-конвертеров, но корректно так и не получалось.
Получалось примерно в следующем порядке:
а) dcraw - конвертит в 16-битный тифф, т.е. добавляет в последние биты нули (или еще что-нибудь?),
б) фотошоп (или кто угодно) - ЛИНЕЙНО конвертит ("масштабирует") в 8 бит,
в) фотошоп - уже 8-битное (т.е. с потерями!) изображение преобразует по нужному графику уровней (по каналам). Почему фотошоп не делает это с 16-битными цветами??
г) на глазок отбрасываем последние биты из п. а) - т.е. затемняем чуть-чуть.
Вот такое некорректное извращение!
Есть ли корректный способ перечисления по НЕЛИНЕЙНОМУ закону 14(12)-битного RAWа в 8 бит (по каждому цветовому каналу)?
Заранее спасибо!
Comments
Razlichnye variacii Tone Mapping'a.
No pri Tone Mappinge nuzhno byt kraine ostrozhnym, tak kak vse suchestvuushie algoritmy tone mapping'a menyaut chromaticheskei koordinaty!
Сожалею, но как-то пропустил ваш вопрос.
Все, к сожалению, несколько сложнее. Если в двух словах, то надо делать как-то так
1) баланс белого
2) интерполяция из байеровских данных в нормальные RGB
3) Пересчет линейных данных по нужной тоновой кривой
4) Округление до 8 бит
Если качество dcraw удовлетворяет, то заменить вывод по gamma-таблицам на вывод по вашим таблицам-кривым (каким хотите) - программируется несложно.
Да, что все сложнее - я уже понял...
:))
Не нашел софта, умеющего сжимать диапазон по нужной кривой.
Правда, не пробовал пока еще проги по деланию HDR-изображений, может там что-то попадется.
Вот если бы на базе вашего проекта создать правильный инструмент, который позволит по всем каналам делать любые преобразования, (по заданной формуле, таблице, в ручную) в 16-битном разрешении! Да еще с предпросмотром...
1) баланс белого не получится делать в начале (на сколько говорит мой опыт) - дальнейшие преобразования его искажают.
2) интерполяция из байеровских данных - получается, что эти алгоритмы кроме производителя фототехники и великого dcraw никто не знает, это самая закрытая часть процесса и не подвластна влиянию. А хотелось бы...
3) Пересчет линейных данных по нужной тоновой кривой - ЧЕМ с 16-битной точностью??
Буду признателен, если поясните про гамма-таблицы - как их прикручивать к dcraw ?
Сжимает по нужной кривой - хоть фотошоп. Формат файлов кривой - известен. Там 8-битная точность (256 точек), но интерполяция вполне разумная. Можно еще - текстовый редактор в руки и приделать нужную функциональность к ImageMagick, но надо программировать.
1) Баланс белого делается до интерполяции
2) В "великом dcraw" алгоритмы открытые (в исходных текстах) можно менять на свои
3) Если описанные выше пути не подходят, собственно пересчет - очень простая задача. Визуализация, интерфейс - гораздо больше возни.
таблицы в dcraw - там внутри все линейное, пересчет по таблицам делается при 8-битном выводе. Генерирует гамма-таблицы функция gamma_lut(), ее можно заменить на свою (например, грузящую из файла).
В LibRaw это место уже 16-битное, можно мучать ее исходники (вместо dcraw будет dcraw_emu -1 -4 для получения 'gamma-corrected' 16-битной картинки)