Кросспост из
блога автора. Комментировать лучше
там, но можно и тут
Обработка RAW в плавучке позволяет
избавиться от артефактов вылета за диапазон, да и вообще
получить более качественную картинку.
Тем интереснее обратные случаи.
Возьмем вот такой вот кадр:
Это D800 с его
приколами в светах, вот на света и посмотрим.
Если обработать картинку dcraw (или LibRaw, которая дает побитово такой же процессинг, если автоматическое определение максимума отключить), то в светах в "середине верха кадра" мы увидим такое вот:
Розовый оттенок в светах - это вариация на тему
розовых облаков: зеленый канал эта камера обрезает по уровню 15778, красный и синий - по уровню 16383, после баланса белого зеленый оказывается чуть ниже уровня насыщения.
Теперь посмотрим на то же самое, но обработанное в плавучке:
Стало хуже, виден визуальный мусор: розовые каемки там где начинается пересвет, плюс неприятная желтая область в центре зоны пересвета вдруг стала отвратительно розовой.
Гипотеза о том, что безобразие происходит там, где пересвечены несколько каналов - не проходит проверку. Вот как выглядит это в RawDigger:
Из картинки неочевидно (потому что нет пипетки), поэтому поясню: светло-розовая сеточка - пересвет только зеленого канала; более плотная сеточка - зеленый и синий; сплошная заливка - все три канала.
То есть в проблемной области, и в пятне на центре и на каемках, проблема только в зеленом канале.
Стал разбираться, выяснил разницу:
- Dcraw/LibRaw:
- Первым шагом: делает баланс белого и масштабирует на диапазон 0..65535. При этом, если в результате ББ канал вылетел за 65535, то его обрежут на этом уровне.
- Вторым шагом: делает color conversion матричным профилем (из камеры в sRGB) и результат опять обрезает, чтобы влезал в диапазон 0..65535.
- Моя реализация в плавучке:
- Первым шагом: делает баланс белого и масштабирование на 0..65535. Если кто-то вылетел за диапазон - ну и хрен с ним.
- Вторым шагом: умножает на ту же матрицу и обрезает диапазон.
За счет разницы в первом шаге, после умножения на матрицу результат (в зеленом канале) или попадал на насыщение, или же был меньше (за счет того, что другие каналы были обрезаны - стали меньше - и при умножении дали меньший вклад). Зеленый меньше лимита - розовые каемки.
При этом, конечно же, вариант без промежуточной обрезки теоретически правильнее (потому что промежуточные результаты обрезать - очевидно что неправильно). Но дает артефакты. И, по всей видимости, артефакты в области пересветов вообще неизбежны (привет ETTR-у) и поступать с ними надо так, как ACR поступает:
1) Или резать нахрен (ACR 7.3, кнопка Default):
2) Или, если света дороги, не пытаться вытащить там какой-то цвет, если хоть один канал обрезан, ничего хорошего не будет, а тащить нейтраль (ACR 7.3, кнопка Auto):
Я не считаю ACR идеалом, но попытка вытащить цвет из областей пересвета - скорее всего бессмысленна, а нейтральные света выглядят сильно лучше разноцветных.
P.S. Цветные каемки на краях бликов во многих случаях могут быть связаны с вышеописанными эффектами, а не с пресловутыми "хроматическими аберрациями оптики".