Профилирование

RawDigger 0.9.15 (RC1): удобное профилирование камер

Граждане фотографы!

В очередной раз предлагаю потестировать Release Candidate свежего RawDigger:

В версии 0.9.14 в RawDigger была добавлена удобная работа с цветовыми шкалами, но результат этой работы выводился в виде усредненных RAW-значений: в диапазоне значений камеры, без баланса белого, без гамма-коррекции. Как следствие, для нормального использования в программах профилирования эти данные приходилось предварительно обрабатывать в Excel или подобных программах: накладывать ББ, масштабировать, гамма-корректировать.

Версия 0.9.15 исправляет этот недостаток, теперь можно получить CGATS-файлы, пригодные для прямого скармливания в Profile Maker, Argyll и подобные программы.

Кроме этого, 0.9.15 умеет корректировать неравномерность освещения мишени.

Подробности:

RawDigger 0.9.12 (technical preview 1)

Граждане фотографы и примкнувшие к ним!

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

Вот он:

Мне интересны глюки, мешающие выпуску на широкую публику: падения, полностью неправильное поведение и т.п. Всякая мелочь, вроде разрешенного "Average green" для черно-белых RAW - не является шоу стоппером (в частности, по той причине, что монохромных камер у людей - примерно ноль).

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

Отдельная просьба: не надо эту версию более нигде анонсировать. Если она работает, то буквально завтра я ей поменяю название и номер билда - и выпущу. А если нет, то надо же доделывать. На неприслушавшихся к этой просьбе - затаю.

Что новенького

Про меру соответствия критерию Лютера-Айвса

Продолжая тему, поднятую здесь: очень хочется понять, как количественно сравнить два сенсора по критерию Лютера-Айвса, который многие так любят.

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

Вот она: "... лучше соответствует критерию Лютера-Айвса".

Если имеете что сказать по теме - я буду благодарен. Лучше - прямо там, если по каким-то причинам удобнее здесь, можно и здесь. Очень хочется разобраться.

RawDigger 0.9.9

Продолжаю анонсировать новые версии RawDigger.

Качаем тут: RawDigger-0.9.9-Beta-RU-Setup.exe, читаем полный changelog тут, жалуемся сюда.

Из существенных изменений:

Возможность задать координаты Selection вручную, "по пикселям"
Это нужно, в первую очередь, исследователям черной (маскированной) рамки. На разных кадрах она расположена в одном и том же месте и задание по координатам просто удобнее.
Вывод в CSV/CGATS файлы может учитывать системные установки decimal point
Это полезно, если вы используете отечественные региональные настройки и разделитель дробной части в вашем Excel (и т.п.) - запятая.

Если вы противник десятичной запятой, а в системе установлена именно она, можно насильно включить точку (через Preferences).

Установленный уровень черного (и Linear Raw Curve) влияет на RGB-рендеринг
Фишка может оказаться полезной тем, кто никогда не видел нелинейный RAW-файл (см. пример под катом), душераздирающее зрелище.

Вместе с тем, если вы подбираете уровень черного (например, чтобы потом поставить его руками при конверсии) - штука полезная.

Остальное все по мелочи
багфиксы, оптимизация, убрано местами странное поведение диалога Preferences, когда изменения вступали в силу только после переоткрытия файла.

Про Лютера нашего Айвса

Luther-Ives condition become known in the beginning of the last century: a color capturing device with light detectors of three types might be used in correct color reproduction system if and only if DSS for every detector in the system might be represented as a linear combination of Cone Fundamentals (CFs).
отсюда

А вот эти самые Cone Fundamentals, взятые отсюда (в первом наборе контролов Quantal/1nm/plot):

Лютером-Айвсом цветовые ученые постоянно стращают, это прямо таки Священный Грааль цветовоспроизведенцев. И, исходя из общей теории всего, выглядит это разумно:
  • Есть некий первичный базис, эти самые Cone Fundamentals, говоря простым языком - спектральная чувствительность колбочек глаза.
  • Чтобы разговаривать с глазом в его "первичных координатах", хорошо бы уметь пересчитывать в этот самый первичный базис.
  • Что означает, что спектральная чувствительность сенсора (каждого канала) должна бы быть линейной комбинацией из базиса, тогда умножив на обратную матрицу - мы получим этот самый базис.
  • Никто не пишет, но очевидно что матрица из базиса в сенсор должна быть невырожденной, иначе обратную не построить.
Это - теория. Вполне похожая на правду, если бы не одно, но крупное НО.

Берем хорошую современную слайдовую пленку. Ну вот Kodak 100G. И берем из ее даташита кривые спектральной чувствительности. Вот они:

О цветопередаче

Еще один пост, родившийся из комментария.

Давид Мзареулян спрашивает:

Вот у нас сенсор (+АЦП). Сигнал от него, как я понимаю, линейный с высокой точностью. Даже если точность не очень высокая, то откалибровать отклик конкретной модели сенсора не должно составлять труда. Перед сенсором светофильтры. Они тоже линейно сворачивают спектр в скаляры. RGB-пространство тоже линейно, ну гамма там по яркости. Получается, что задача преобразования сигнала от сенсора в RGB линейная с точностью до одной единственной заданной гаммы. Значит, чтобы заставить монитор светиться так же как светился объект перед камерой, достаточно линейно преобразовать сигнал от сенсора. С точки зрения цвета это означает ткнуть пипеткой в нейтральный объект и таким образом найти взаимные коэффициенты для трёх каналов. Ну и гамму потом наложить. Всё, этого должно быть достаточно.

Что я упускаю? Потому что если я ничего не упускаю, то совершенно непонятно, почему разные конвертеры по-разному разрешают и передают цвета с разных камер а они таки их передают по-разному.

Отвечаем (чуть подробнее, чем в том комментарии в ЖЖ):

О чувствительности цифровых камер

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

Реплика:

проблема в том,что для обычного фотографа,юзающего цифрозеркало не хватает ТЕЗИСНЫХ определений простой пример-мне для работы необходимо знать
-возможности матрицы при условных исо от 100 до 400 (изменение диапазона матрицы)пусть с использованием внешнего экспонометра
-возможности матрицы при 3200 и 5500 (исправление разбаланса по каналам)
Ответ:

Правильно, тезисных определений не хватает.

В частности, нету определения "чувствительности в RAW", стандарт который на эту тему есть - определяет в лучшем случае чувствительность для JPEG (честно скажу, стандарт читал давно, а освежал мнение только изложением его в википедии).

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

Понятно что есть некий стандартный режим, но скажем для слайда результаты в погружной машине и в маленьком баке - при одном времени проявления и температуре - отличаются. И для листов и узкой пленки - отличаются. То есть единственный реальной стандартный процесс который был - это C41 (да и то, я вот обычно немножко перепроявлял, мне так нравилось).

Поэтому практический совет достаточно очевидный

  1. Если вы пользуетесь каким-то стандартным "проявителем" для цифры, ну там RPP или LR (или внутрикамерным, получая JPEG) - ну так померьте тоновую кривую один раз. В отличие от пленки, специализированного прибора (денситометра) не нужно, все есть в фотошопе. Но что для разных проявителей кривая отличается - ну это такой факт, это и для пленки так было.

    То что ACR (а значит и LR) поднимая полутона режет при этом света (при настройках по нулям) - будет для проделавшего этот эксперимент (не)приятным сюрпризом.

  2. Как минимум три года есть инструментарий (имени меня), который позволяет посмотреть "а что там в RAW на самом деле". Мой текст о запасе в светах у 5DMark II на libraw.su - датирован 20 февраля 2009 т.е. ровно 3 года назад.

    Не говоря о поминавшемся тут уже свежем туле RawDigger, который позволяет это проделать удобно. Ну и Rawnalyze тоже был/есть.

Но, конечно, то что у Adobe есть скрытая поправка в ~0.3-0.5 стопа, плюс "неявная" поправка, которая бывает тоже в полстопа (а бывает, наверное, и больше) - это такое интересное открытие, которое каждый делает для себя сам, так уж повелось испокон веку.

О синем цвете и зеленых каналах: Panasonic G3

Я уже про это писал, но во-первых чисто умозрительно (на пальцах), а во-вторых не полностью верно, пришло время вернуться.

Чтобы не троллить больше владельцев Sony A77, возьмем для примера Panasonic G3. А именно, возьмем с imaging resource снимки мишени CoolorChecker и постараемся разобраться, что же камера с них выдает.

Вот прямо наложим на фото масочку-сеточку и посмотрим, что для каждого из патчей мы увидим в гистограмме.

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

Для начала, сформулируем тезисы, которые ниже я пытаюсь проиллюстрировать.

Суть проблемы (профилирования)

Проблему я формулирую так:

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

О фотографическом цвете

Вот смотрю я в новую dcraw, точнее в diff с предыдущей, и вижу там:

-      pix[0] = rp[0] + ((  200*rp[1] + 22929*rp[2]) >> 14);
+      pix[0] = rp[0] + ((   50*rp[1] + 22929*rp[2]) >> 14);
Это расчет красной компоненты пикселя при распаковке из Canon sRAW (YCbCr) в RGB.

А потом весь мир будет удивляться, отчего профили перестали подходить, причем только для sRAW (а для обычного RAW - продолжат работать).

А, да, а потом некто перестроит профили под новую формулу, а затем достанет из загашника старые DNG (где в linear-RGB все распаковано по-старому).

Так и живем.

О цветовом сдвиге за счет светорассеяния

А вот другой прикол на тему светорассеяния.

На картинке две серые шкалы снятые/обработанные следующим образом

  • Экспозиция - одинаковая до копейки.
  • Обработка в ACR - одинаковая до копейки же. Какой-то баланс белого не подбирался, поставил As Shot по нижнему снимку, он чуть-чуть проврался. Но баланс - одинаковый для двух кадров.
  • Нижняя снята просто при рассеянном свете из окна, а при съемке верхней в кадре был яркий объект (на 11 стопов ярче патча M), световой столик, свет с которого не попадал на шкалу
Впрочем, это он на сцене не попадал, а внутри камеры очень даже попадал.

Результат таков:

  • На нижней (без засветки) средний тон ползет чуть-чуть, от -1/-1 (a-b в Lab) на нулевом патче до -2/-7 в 14-м.
  • На верхней, с засветкой, все куда масштабнее, от -5/-5 в нулевом патче до -5/-18 в 14-м

После этого удивительные цвета на HDR-снимках уже не так удивляют.

Да, насколько я понимаю, механизм примитивен: два источника света с разной ЦТ. Просто смешиваются они не на объекте, а уже в камере.

О светорассеянии

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

Важно только, чтобы контраст сцены был более-менее контролируем, тогда получаемые данные будут интереснее.

Методика съемки

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

Под крышку поставим источник света, который не будет освещать серую карту. Я взял мусорный светостолик Hoya, можно было бы взять настольную лампу и загородить ее листом бумаги, несущественно, главное чтобы яркость была в пределах разумного.

Всю сцену (собственно, серую карту) я освещал светом из "западного окна" (дело было утром, т.е. никакого прямого солнца). На окне имеются занавески и регулируемые жалюзи, позволяющие регулировать свет в достаточном диапазоне:

  • Включенный световой столик на спотметре выглядит как 1/500-f/5.6@ISO200.
  • Соответственно, жалюзями я подобрал такие уровни освещения:
    1. Патч M цветовой шкалы: 1/6-f/5.6@ISO200. Т.е. контраст от M до столика - ~6.5 стопов.
    2. 1s-f/5.6@ISO200, контраст 9 стопов
    3. 4s-f/5.6@ISO200, 11 стопов

Дальше я поставил на штатив 5DMarkII с Цейсовским 2/100-Macro, выставил там ручную экспозицию по замеру по патчу M и сделал по паре кадров, с включенным столиком и выключенным.

О просветлении, мультипросветлении и вреде проистекающем от оных

Общепризнанно, что от просветления (на оптике, на фильтрах) есть польза великая, а от мультипросветления она (польза) мультиплицируется.

Однако компания Шнайдер в (старом) каталоге своих поляриков Kaesemann приводит такой вот график:

Из коего следует, что и пропускание у просветленного фильтра (еще более) не нейтральное (что не отразилось - то же дальше прошло) и блики (скажем, повторное отражение уже отраженного изнутри камеры) он дает окрашенные. И 6-10% - это заметные такие цифры.

Ссылка на документ: www.schneiderkreuznach.com/pdf/filter/kaesemann_katalog_e.pdf

О цветовой интерполяции

Навеяно вот этим вот обсуждением, пожалуй запишу.

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

К примеру, Monaco Profiler с удовольствием сделает вам цветовой профиль с таблицами 33x33x33. То бишь почти 108 тысяч коэффициентов (+тоновые кривые). Круто, да.

А на вход ему при этом подадут ну, скажем, 1728 патчей (12 в кубе). Так как жрет он не спектральные данные, а простой рабоче-крестьянский XYZ, то это будет примерно 5200 значений.

Допустим, даже, мы введем еще ограничений: на гладкость интеполяционных функций, на знак третьей производной, ну придумаем еще. Ну еще десяток ограничений на точку (три на одно входное значение). Ну значит будет порядка 20 тыс. входных параметров.

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

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

Я клоню к тому, что вижу в имеющемся подходе тупик: маленькие профили (с маленькой таблицей) дают плохую точность, это все знают из опыта. Большие профили (33x33x33) - основаны на выдуманных данных, а снабдить их невыдуманными данными, скажем промерять не пару тысяч патчей, а тысяч тридцать - невозможно на практике, слишком трудоемко.

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

P.S. То что мишени для тех же принтеров генерируются, как правило, путем равномерной расстановки точек по всему пространству координат - отдельная печальная песня.

О фотошопе

А вот, допустим, вы обрабатываете фотографии в Фотошопе. Цветные.

Внимание, вопрос: должны ли вы обращать внимание на установку Gray profile в Color Settings, а если да, то почему?

О ДД и ББ в тенях

Предыдущая моя заметка О линейности в тенях как-то не вызвала того эффекта, который я ожидал. Давайте усугубим.

Представим себе некое серое тело разной яркости, снимаемое при некоем (примерно дневном) балансе белого на 5D Mark II.

Вот по уровню "среднесерого" имеем отклики (R-G-B) равные 435-1035-650. Применяя коэффициенты баланса белого 2.38-1-1.59 (я везде немножко округляю), получим серое в среднем тоне: 1035-1035-1035.

Теперь идем на 6 стопов в тени (у нас же камера с 12-ю стопами ДД по DXO Mark и с 9-ю стопами Tonal Range по тем же данным, можем себе позволить), снимаем то же серое тело.

За счет нелинейности стопов и разной чувствительности каналов накопленная за 6 стопов нелинейность будет разной.

Получим отсчеты R-G-B: 5.18-9.68-6.59 (это усреднено по большим плашкам).

Наложим тот же баланс белого, что и в полутонах. Получаем: 12.33-9.68-10.49. Был серый, стал "темно-розовый".

О линейности в тенях

Товарищи солдаты, о чем вы думаете, глядя на эту картинку:

Как она получена:

  • Берем серую карту, экспонируем по экспонометру.
  • Дальше начинаем крутить выдержку (сохраняя диафрагму) в сторону уменьшения, пока не упремся в 1/8000.
  • Дальше берем (усредненные) RAW-значения для выдержки, скажем, 1/4000 и делим на значения для 1/8000.
  • Повторяем для пары 1/3000-1/6000, 1/2500-1/5000 и так пока тестовый набор не кончится.
  • Ожидаем, что значения различаются ровно вдвое.

Понятно, что затвор имеет право немножко ошибаться, поэтому повторяем три раза, для разных диафрагм. Для ISO200 получается достаточно одинаково (а другие я толком и не пробовал).

Механизм явления понятен, у нас не сигнал, а "сигнал+шум", базовый уровень шума (т.е. при околонулевом сигнале) в районе 4-5 единичек, вот шум то и жрет контраст. Если смотреть на значения еще ниже, то там график аккуратно стремится к единице (полному отсутствию контраста).

Кроме того, может быть неверно рассчитанный уровень черного (но с ним я поэкспериментировал численно и ошибки больше чем в единичку не наблюдаю).

Надеваете сверху валенок! И никаких сношений!

Третий день мучаюсь со съемкой ровного поля, не такая это простая задача получить реально ровно.

Пока наилучший вариант такой:

  • Берем адаптерное кольцо Lee (или любое другое с подходящей резьбой).
  • Клеим на него кусок пенополиэтилена от коробочек от фильтров Schneider (квадратные кусочки) или Canon (круглые). Сигмовский "крупноячеистый" не подходит. Чистый, естественно.
  • Все это навинчиваем на достаточно длинный телевик (300мм в самый раз)
  • Который диафрагмируем на пару стопов от максимума. Дальше не надо, лезет мусор с матрицы, но и меньше не надо, виньетирования у телевиков как-бы нет, но несколько процентов есть.
  • Который (телевик) наводим на бесконечность.
  • Снимаем ровное поле без бликов
Удается получить 1% по центру кадра (1/4 площади) и 3% по всему полю.

Самое в этом удивительное, что если убрать последний пункт и снимать просто "пейзаж за окном", неравномерность заметно растет.

Ну то есть понятно, можно снять какой-то flat-field и если он остается постоянным во всех экспериментах, то и нормировать на него, но это сколько лишнего программировать....

P.S. Астрономы с flat field не парятся, как я выяснил. Пишут "а вот белую майку на телескоп накинь и сними что-нибудь". Наверное, с совсем длинным фокусом этот номер лучше проходит.

P.P.S. Про астрономов я погорячился: http://www.astrosurf.com/comolli/flatfield2.htm

О Равномерности

Чтобы достичь неравномерности по полю в пределах 2% пришлось:

  1. Взять средний телевик (Цейсс 100/2 макро).
  2. Закрыть его до f/8.
  3. Надеть на объектив матовую крышечку от чипсов Pringles колец Lee (белый полиэтилен).
  4. Навестись на бесконечность.
  5. Фотографировать лист белого картона.
И то, такая равномерность получилась только в центре кадра (примерно 10% по площади), если по всему, то там процентов 8 разницы.

Удивительнее всего, что первых четырех шагов - не хватает.

Кто бы мне объяснил, как без "крышечки от чипсов" можно снимать те же Колорчекеры....

P.S. Неравномерность оценивалась так: по изучаемому полю брались самплы 300x300 (это для всего кадра, для центральной части 150x150), общим числом 24, по ним считалось среднее и сравнивалось. То есть речь не о выбросах отдельных пикселов, а именно о среднем.

Update: нашел ссылку на таблицу (самому считать скучно). 8% на 100-мм - это в чистом виде удар косинусом.

Про 400-мм (см. комменты) есть подозрение, что диафрагма может блестеть, но посмотреть никак невозможно, закрывается она электронно, а пленочной камеры с таким байонетом у меня нету.

О линейности в светах

Смотрю тут на свеженамеряные данные по линейности Canon 5D Mark II (текст пишется, в ближайшие дни будет) и думаю вот какую думу:

Максимальный уровень сигнала (на ISO100) в районе 14700. Даже если весь шум определяется исключительно фотонным шумом, среднеквадратичное отклонение будет в районе 120. А на самом деле оно и вовсе 250-260 (при измеряемой плашке 160x160 пикселов).

Получается, что если реальный уровень сигнала у нас, скажем, 14450 (на сигму меньше максимума), то порядка 16% пикселов (выходящих "за сигму" в положительную область) будут обрезаны по максимуму. Что, в свою очередь, приведет к смещению среднего значения для больших плашек (вроде неба или облаков), т.е. испортит "яркость".

Природа обрезки принципиального значения не имеет, это может быть и переполнение пиксела и и обрезка в АЦП и обрезка после АЦП, эффект чисто "математический".

За счет того, что чувствительность каналов - разная, максимумы для всех каналов одновременно достигаться не будут, следовательно эффект испортит еще и "цвет".

Проявляться это будет в самых самых верхах, речь идет о долях стопа (в зависимости величины сигнала т.е. битности камеры)

О стандартных форматах

Программировал тут вывод в формат CGATS (это в котором всякие цветовые замеры выводятся, пример ниже), по которому я тут уже немного проехался.

Заодно посмотрел много (десятки) примеров таких файликов, чтобы слова списать. Ну и исходники Argyll на предмет "как это читают".

Если кто-то имеет иллюзию, что это такой вот стандартный формат, который все понимают одинаково и все такое прочее, того жизнь еще не била. Даже форматы данных Пенсионного Фонда РФ - луч света в темном царстве в сравнении с CGATS.

Вот, например, загадка:

  • Допустим, у меня в файле есть и LAB и RGB значения.
  • Допустим, там же есть и стандартные отклонения замеров. Начинаем называть колонки: STDEV_L, STDEV_A, STDEV_B, STDEV_R, STDEV_G, STDEV_что?
  • С XYZ/CMYK, кстати, аналогично.

Pages

Subscribe to Профилирование