Тайна розовых облаков

Если вы пользователь RAW-конверторов Adobe последних версий, то с проблемой, показанной на картинке слева, вы скорее всего никогда не сталкивались (или сталкивались, но не в таком масштабе). Большинство остальных конверторов, особенно основанных на dcraw (и LibRaw) имели ее в полный рост на многих камерах, в том числ на кэноновских (и для них - особенно заметно на дробных ISO, для последних моделей камер самые неудачные в этом смысле чувствительности находятся в ряду 160-320-640-1280).

Причина проста, тривиальна, но заслуживает рассказа о ней.

Вот берем, к примеру, Canon 50D.

14-битная камера, значит максимальное значение (насыщение) мы вправе ожидать равным 16383. Ну, после вычитания уровня черного - на ~1000 поменьше.

В реальности же это значение порядка 15750 (до вычитания черного) для ISO 200-250-400-500, 13400 - для ISO 100 и 125, 12800 для ISO 160-320-итд. И только для 6400 и 12800 имеем честные 16383, соответствующие общей теории всего.

Для разных экземпляров камер значение максимума немножко плавает, но сути дела это не меняет.

Теперь следите за руками:

  • В зоне вылета (сильного пересвета) R=G=B равно, к примеру, 13400, после вычитания уровня черного будет 12400.
  • Дальше мы масштабируем по балансу белого и имеем что-то вроде 20000, 12400, 18000 (цифры условные, зависят от ББ, важно что R и B умножили на что-то большее единицы для дневного освещения).
  • Дальше мы обрезаем результат по уровню максимума (неверного! в программу зашит максимум 16383 /до вычитания черного/ а реальный максимум меньше), получаем сигнал в котором R и B насыщены (и равны 16383 минус уровень черного т.е. примерно 15350), а G - примерно на треть-половину стопа меньше максимума. Какой это цвет? Правильно, Light Magenta.
  • Highlight recovery работает только в тех областях, где есть какой-то разумный сигнал хоть в одном из каналов, а выше мы говорили о полном вылете всех трех в насыщение.

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

Подобная бага есть на аппаратном уровне (точнее, на уровне firmware) в некоторых камерах, где вычитание черного делается до записи RAW, а потом делается масштабирование (целочисленное! уроды!) на полный диапазон значений. В этом замечен Nikon D3, правда заметно это только если экстремально поднимать контраст в светах.

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

Comments

То есть всё-таки CMS не при чём?

Это *другая* проблема.

Когда мы обсуждали CMS - там была картинка с интерпретацией одного файла (TIFF) с одним профилем одним и тем же фотошопом, но с разными CMM.

А сейчас на примере - результаты конверсии RAW без всякого CMS вообще (ну, на показе есть, но профиль sRGB), одной и той же программой (примером из LibRaw) с выключенным/включенным автовычислением максимума данных.

Точно. А всему виной розовые облака :) Вот были бы они в одном случае розовые, а в другом зеленые, и ни один майор бы прямой угол с температурой кипения не перепутал.

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

Бьюсь башкой о розовые облака на Норитцевском металлике.
Истина где-то рядом?
;о)

А что, перепечатали и не помогло?

Но истина может действительно быть недалеко....

А у ребят на этой машине и этой бумаге просто-напросто не получается.
Пробный ч/б градиент получается розовеющий к светам и зеленеющий к теням. Но это всё довольно равномерно, а у моих кадров - чётко очерченные розовые области на облаках. Доставляет именно чёткость розовой границы!

Собственно, меня интересует не столько возмещение ущерба, сколько именно налаживание рабочего процесса. А так-то - печатать всё на Durst-е, и дело с концом.

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

Спасибо

Если на английском читаете, то есть куча литературы, на выбор.

Если на русском, то есть переводы Шадрина (Хант, Fairchild): http://shadrin.rudtp.ru/Personal/Shadrin_articles.htm

Но лично я отношусь к этим переводам с осторожностью, у Шадрина есть свое мнение и не попало ли оно в перевод - заранее невозможно утверждать. Я надеюсь что нет, но все равно отношусь с осторожностью.

на английском.
с чего посоветуете начинать? с этих самых ханта и ферчилда? или есть более достойные варианты?

хант - хороший, файрчайлд - тоже неплохой. есть еще, но я как пока не читал, лежат в вишлисте на амазоне

спасибо, начну с ханта

Если нет желания погружаться в формулы, эти цветовые пространства описывающие, про практическую реализацию можно почитать в очень хорошей книжке "Color Management for Photographers" Andrey Rodney

дальше мы обрезаем результат по уровню максимума,
Какого максимума? 14bit? А почему, кстати? Не правильней ли будет вообще отделять "вылет", обрабатывать его отдельно (не применять к нему ББ, а только масшатбировать до полного 16bit-диапазона, на выходе то мы хотим 16bit Получить), а остальное обрабатываеть как всегда? Какие тут получаются подводные камни?

Ну, для начала, нам надо детектировать "вылет". Это делается путем сравнения с максимумом. Этот максимум может быть built-in в конвертор, или определен для данной конкретной камеры (и для всех ISO).
Built-in может быть посчитан усреднением по многим камерам данной модели, причем тоже разными способоами (максимум, минимум, усреднение).
Еще мы можем, кстати, посчитать по конкретному кадру, но если он недоэкспонирован?

Конкретно в dcraw/LibRaw максимумы вшиты по моделям/классам камер, что и приводит к вышеописанным эффектам. Вот LightZone (из коммерческих конверторов) должна страдать от этого в полный рост, ну и линуксячие *все*.

Ну, казалось бы, интересующий нас вылет -- это непрерывная область одного серого (до ББ) цвета. То, что в природе появится недосвеченный кадр где неперрывным пятном (ошибится в бликах не страшно) в сотни пикселов будут одни и те же (строго) числа в R-G1-B-G2 я не верю...
Вот если максимумы по каналам разные -- хуже, но и там, если есть заметная область, где R-G1-B-G2 близки и абсолютно одинаковы в рамках канала без намёка на шум, думаю можно с 95% уверенностью сказать, что это и есть насыщение. Если это самый-яркий-в-сцене-серый-но-не-насыщение будут там шумы наверняка у любой камеры.

Ну то бишь мы работаем не с пикселом (независимо) и даже не с очень маленькой локальностью (как при интерполяции), а с большими областями?

Ну, да, типа. Если уж выделять области, то почему бы с ними не поработать......

Ну, мы анализируем всю картинку и делаем некоторые предположения о камере по ней. Дальше уже можно, наверное, вернутся на уровень пикселов -- когда максимумы определены исходя из анализа областей а не отдельных независимых пикселей.
На сколько мои предположения, описанные в предыдущем комментарии, верны надо проверять по боооольшой базе файлов (с разных камер!), для которых с хорошей уверенностью известны те самые максимумы -- посчитать предложенным алгоритмом и сравнить с эталонами.
При этом, ясно что файлы должны быть и по экспозиции очень разные -- в том числе, и технические типа снятой недосвеченной очень белой бумаги, и кадры где облака очень близки к вылету но таки не выбиты, etc.
И, да, такой алгоритм, конечно вполне может вернуть ``а я вот не понял где тут максимум'' (когда его и правда нет) -- и надо понять что делать в такой ситуации.

Мы автомат делаем или галку в конвертере ("убрать розовые облака")?

С галкой - достаточно просто посчитать максимумы по реальной картинке и все.

Ну, я не знаю пока как мы делаем. Надо пробовать на реальных файлах. Тут, в общем, без массивной статистики не обойтись.
Вот как эту проблему решает ACR? Хотя и там я такое видел пару раз.

Честный расчет реального максимума из реального файла и нормировка на него - решает проблему. См. картинку в начале поста.

Я вот даже более кратко выражусь - облака розовеют именно по той причине, что в зеленом канале вылет не детектируется.

В зоне вылета (сильного пересвета) R=G=B равно, к примеру, 13400, после вычитания уровня черного будет 12400.
Дальше мы масштабируем по балансу белого и имеем что-то вроде 20000, 12400, 18000 (цифры условные, зависят от ББ, важно что R и B умножили на что-то большее единицы для дневного освещения).
Дальше мы обрезаем результат по уровню максимума, получаем сигнал в котором R и B насыщены, а G - примерно на треть-половину стопа меньше максимума. Какой это цвет? Правильно, Light Magenta.

на 1 и 2 этапе мы ничего не теряем, если я правильно понял? а теряем при "обрезании" на 3м, т.к. 20000 не укладывается в 14 бит, так нет ли возможности расширить на этом моменте до 16 бит, а дальше пережать до 14/12/8?

Если бы у нас не было насыщения, мы имели бы сигнал вроде 10000, 20000, 14000.
Умножаем на коэффициенты ББ, получаем 20000,20000,20000 - дальше делаем что хотим и все такое.

С насыщением всех (предположим, по уровню 9000) - остается только обрезать. Ибо что и куда мы смасштабировали (какой уровень был до обрезания матрицей) - неизвестно.

С насыщением части каналов - можно делать highlight recovery.

Ай, без насыщения подумал, потом увидел "В зоне вылета"

Подобные эффекты бывают и без зоны вылета.

Я их наблюл давеча, когда в ACR поставил ЦТ 2000K кадру, для которого автобаланс показывал 12500. Сам офигел.

Никогда не сталкивался ни с чем подобным с тех пор как перестал пользоваться bibble pro и ушел на phase one )

А, ну и еще, зачем сжигать света? Мне думается съемка на слайд _очень_ дисциплинирует в плане экспозиции и работы головы т.к. там даже 1/3 ступени уже может отправить слайд в брак. А в цифре торжествует подход "снимем как нибудь, потом в фотошопе докрутим". Ну вот и приветы оттуда, так сказать.

У старого C1 (3-й версии) эта проблема была в полный рост (возможно, со своими камерами не было). 4-5-й не пользуюсь, не знаю.

Про выжигание цветов - в целом я согласен. Но возможна ситуация, когда выжжено немного. Ну вот облако в углу кадра - ну пусть оно будет белым и без деталей, но не розовым же.

Но я естественно это все смотрю и чиню по заявкам телезрителей, которые бывают дикими....

а я как раз 3й не смог пользовался, ее интерфейс для меня жуть.
5я очень нравится (для студии, контролируемого света)

ну вот во 2-й бете 3-го лайтрума адоба говорит что пофиксила глюки рековери.

пишут так "In the 2010 Process Version, the algorithms for Fill Light and Highlight Recovery have been changed to reduce the possibility of tone inversions."

но что значит "tone inversions", правда, не объясняют.

http://labs.adobe.com/technologies/lightroom3/releasenotes.pdf

Я на конкретном примере (выше) и текущей ACR проблему не смог воспроизвести, но там не в HL Recovery дело.

С HL recovery проблему видел при съемке в вечерних сумерках (ЦТ далеко за 10000), там вот да бывает всякое...

в С1 такой беды нет

В 3-й версии точно была, я на нее с размаху налетал.

Но проявлялась только при кручении экспокоррекции т.к. это не та же проблема, а близкая.

Спасибо за разбор проблемы с четким изложением сути.

Кстати, вот такая проблема - http://knutov.livejournal.com/1467900.html - она отсюда же растет или это что-то другое?

Я вопроса не понял. Но что у вас там есть (пере)насыщение - ну да, понятно. Что туда рисуют не такой градиент как вам хочется - ну да, тут тоже не все так просто....

Вопрос примерно такой - один рав в одном старом, не умеющем новые тушки, конвертере превращается в относительно нормальную картинку, в другом конвертере солнце превращается в выженную дыру с зелёным ореолом. Очевидно, что это ошибка конвертера, но из-за неправильной обработки пересвеченной части (и, следовательно, стоит ожидать исправления этого в районе CS5 и нового ACR [upd: что-то я про такое, кажется видел недавно в анонсах]) , или это что-то совсем другое, или это еще более другое и можно поправить руками какие-то прааметры в современном софте?

На сколько я помню, по состоянию на прошлое лето, такая проблема в разной степени воспроизводилась на всех современных зеркалках чуть ли не со всеми современными конвертерами.

А что делают новые конверторы с файлами со старых зеркалок?

Как избавиться от розовых областей? Использую для конвертации rpp.

Взять свежую версию, это не так давно правилось. И Highlight recovery использовать аккуратно.

А можно в двух словах на пальцах почему на кеноне ISO 100 дает меньший диапазон чем ISO 200? Програмная недодержка?
И правильно ли я понял, что от дробных значений ISO лучше отказаться, если ров работает под dcraw?
Спасибо.

Не, "программная передержка" - это ISO50.

Предположение про 100 и 200 такое, что при 100 низкие значения в тенях просто обнуляются "чтобы было не так шумно".

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

Конкретные камеры сейчас не буду называть т.к. это требует отдельного исследования.

Мне кажется, или фиолетовая проблема пятого айфона имеет ту же самую природу?
http://tech.onliner.by/2012/09/27/iphone-new-fail

Она может быть и более банальной.
Следите за руками
- все три канала - насыщены, легли на общую полку, скажем 4096 (для 12-битного сенсора)
- красный и синий домножаем на баланс белого, они стали больше, скажем 5000 и 5500.
- нормализуем все на диапазон, скажем на 16 бит (65000)
- получаем картинку, в которой синий - 65000, красный - 59 тыс, зеленый - 48 тыс.
Она будет пурпурной.

Но и эта проблема - легко лечится в софте.

Только смущает, что в случае с розовыми облаками весь пересвет получается розовым, ореола вроде нет(?). А тут наоборот - сам пересвет изображается нормально (белым), но его область - ненормально. Такое ощущение, что зелёному долго не дают дойти до полного насыщения, но потом, когда уже красный и синий полностью насыщены, разрешают и зелёному.

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

В любом случае, культура тестирования у Apple явно пропала: карты эти чудовищные, камера....

Либо, второй вариант:
- пересвет весь розовый
- но потом наложили красивую кривую, повышающую контраст - и самые верха отрезали.