Принципиальный вопрос про преобразование многобитного RAW в стандартное изображение

Доброе время суток, профи!
Как любитель, не могу найти ответа на одну проблемку уже много лет, хоть и перерыл доступную информацию. Набрел на ваш сайт - может поможете...

Берем снимок в 14(12)-битном RAW (на каждый канал) и хотим преобразовать в стандартный 8-битный JPEG, но - внимание - пропорционально пересчитать 14 бит в 8, и -кроме того- не по линейному закону, а к примеру по S-образному графику.
Пытался делать это с помощью многих RAW-конвертеров, но корректно так и не получалось.
Получалось примерно в следующем порядке:
а) dcraw - конвертит в 16-битный тифф, т.е. добавляет в последние биты нули (или еще что-нибудь?),
б) фотошоп (или кто угодно) - ЛИНЕЙНО конвертит ("масштабирует") в 8 бит,
в) фотошоп - уже 8-битное (т.е. с потерями!) изображение преобразует по нужному графику уровней (по каналам). Почему фотошоп не делает это с 16-битными цветами??
г) на глазок отбрасываем последние биты из п. а) - т.е. затемняем чуть-чуть.
Вот такое некорректное извращение!
Есть ли корректный способ перечисления по НЕЛИНЕЙНОМУ закону 14(12)-битного RAWа в 8 бит (по каждому цветовому каналу)?
Заранее спасибо!

Форумы: 

Сожалею, но как-то пропустил

Сожалею, но как-то пропустил ваш вопрос.

Все, к сожалению, несколько сложнее. Если в двух словах, то надо делать как-то так

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-битной картинки)

Алексей, а Вы не могли бы

Алексей, а Вы не могли бы как-нибудь напальцево объяснить, отчего баланс белого следует делать именно до интерполяции? ББ приводит к разному усилению разных каналов, но ведь при интерполяции _абсолютная_ величина чужого канала не должна влиять на результат?

Причина: Алгоритмы

Причина:
Алгоритмы интерполяции хорошо работают в пространстве, где яркостная составляющая отдельно, цветовые - отдельно (YCC, XYZ). Если вы преобразуете в такой вид до баланса белого, то яркостная составляющая окажется сильно искаженной, вес зеленого будет еще более завышен (для типичных случаев, где чувствительность зеленого выше всего).

А если делать не так, а интерполировать в RGB, то в нейтралях, особенно на границах, будет цветной шум.

Razlichnye variacii Tone

Razlichnye variacii Tone Mapping'a.

No pri Tone Mappinge nuzhno byt kraine ostrozhnym, tak kak vse suchestvuushie algoritmy tone mapping'a menyaut chromaticheskei koordinaty!