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

Пытаясь понять, как преобразуется необработанное изображение, я создал синтетическое необработанное изображение с красной, зеленой и синей градиентной полосой с гаммой 2,2 ( dng ). Я сделал синтетический необработанный файл, преобразовав изображение с Nikon D200 в несжатый DNG, а затем перезаписав данные изображения с помощью Python.

Когда я конвертирую его в jpeg, я ожидаю, что он сохранит чистые цвета, как на изображении ниже:

Ожидаемый результат

Затем я использовал lightroom и lightzone, чтобы преобразовать это изображение в jpeg с настройками по умолчанию и балансом белого, установленным на дневной свет. Это результаты, где особенно красный и синий содержат другие цвета и свои собственные.

Лайтрум:

Изображение лайтрум

Светлая зона:

Изображение светлой зоны

Мое понимание баланса белого заключалось в том, что это просто число, на которое умножается каждый цвет, но не смешивание их. Это кажется неправильным. Кто-нибудь может объяснить, почему цвета не остаются "чистыми"?

Применение баланса белого к изображению, состоящему из чистых (как в одном ненулевом компоненте R, G или B), почти всегда приведет к нечистым цветам, поскольку эффект баланса белого заключается в вычитании (или добавлении, в зависимости от того, как вы выглядите). на нем) определенный цветовой оттенок, чтобы сделать его более теплым (более красным/оранжевым/желтым) или более холодным (более синим/фиолетовым), а также отрегулировать баланс зеленого и пурпурного. Любой из них представляет собой коррекцию цвета, которая преобразует ваши «чистые» цвета в «нечистые». Мне кажется, что вы думали о балансе белого больше по линии кривой тона или гаммы...
Это правда, что добавляются и вычитаются цвета, когда вы уже выбрали баланс белого, но почему это происходит и с необработанным изображением? Я думал, что балансировка белого в необработанном виде — это просто использование математики для преобразования температуры в К в множители для линейных r, g и b. Знаете ли вы ресурс, который объясняет что-то еще?
Убедитесь, что это не проблема цветового пространства .
Ошибочно думать о значениях R, G или B в файле RAW камеры как о «чистых» цветах. Их не только нет, но и быть не может.

Ответы (2)

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

  • В вашем синтетическом необработанном виде не учитывается входной цветовой профиль камеры , который основан на том, как определенный цветовой фильтр в матрице Байера взаимодействует с источниками освещения при фотографировании калибровочных целей (с объективом, у которого может быть свой цветовой сдвиг). Вот гистограмма и результат с профилем D200 (с использованием RawTherapee):

    Гистограмма: ДКП

    Результат: ДКП

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

    Гистограмма: sRGB → sRGB

    Результат: sRGB → sRGB

    См. RawPedia: что такое профили DCP и зачем они мне нужны?

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

Они настраиваются в камерах с помощью настроек, часто называемых «цветовыми профилями» или «имитациями пленки». Они часто имеют такие названия, как «Стандартный», «Нейтральный», «Яркий», «Портрет», «Пейзаж» и «Плоский». Некоторые необработанные процессоры могут попытаться воспроизвести эти профили в слое модификации цвета, отдельном от профилей цветокоррекции, цветовых профилей ввода камеры и цветовых пространств.

  • Рабочее цветовое пространство может не совпадать с выходным цветовым пространством.  Убедитесь, что рабочее и выходное цветовые пространства совпадают . Если это невозможно, выбор другого метода преобразования может привести к «лучшим» результатам, поскольку цвета вне гаммы преобразуются по-разному с помощью разных алгоритмов. Вот гистограммы для иллюстрации:

    • Adobe RGB → sRGB:

      Гистограмма: Adobe RGB → sRGB

    • sRGB → sRGB:

      Гистограмма: sRGB → sRGB

Менее важные возможности:

  • Highlight Recovery с помощью CIELab Blending может повлиять на цвета в ярких концах градиентов. Другие методы («Смешение», «Распространение цвета» и «Восстановление яркости») не оказали заметного влияния на градиенты.

    Результат: смешивание CIELab

  • Алгоритм демозаики может влиять на интерпретацию цветов.

    См. RawPedia: демозаика

  • Некоторые программы добавляют шум или дизеринг при преобразовании цвета из более высокой разрядности в 8 бит/канал.

... красное смещение связано с фактическим цветом «красного» фильтра в типичной маске Байера - где-то между желтым и оранжевым. - Майкл С

В идеале «чистые» входные цвета должны давать выходные цвета, соответствующие фильтру Байера выбранной камеры. Однако на практике происходит не так.

Изменение цвета, по-видимому, вызвано профилями камеры , используемыми необработанными процессорами, а также другими факторами. Они создаются путем обработки фотографий калибровочных мишеней, сделанных реальными объективами, при разных источниках освещения, как описано на RawPedia . Таким образом, цветной фильтр вносит свой вклад в той мере, в какой он участвует в создании профиля. Однако каждая программа производит разные выходные данные, поэтому нельзя сказать, какие из них, если таковые имеются, сместились в сторону или в сторону от фактических цветов фильтра Байера, используемого в какой-либо конкретной камере.

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

Еще один уровень модификации цвета, который отделяет фактические цвета массива Байера от выходного изображения, - это «цветовые профили», такие как «Стандартный», «Нейтральный», «Яркий», «Портрет», «Пейзаж», «Плоский», которые некоторые необработанные процессоры могут пытаться воспроизвести.

Изображение лайтрум Изображение светлой зоны Изображение RawTherapy

Мое предположение относительно красно-оранжевого сдвига состоит в том, что в конце насыщения срабатывают алгоритмы восстановления светлых участков (в данном случае плохо, но они не предназначены для этого надуманного сценария).
@mattdm Восстановление светлых участков с использованием смешивания CIELab влияет на яркие концы градиентов. Другие алгоритмы не оказывают никакого влияния на градиенты.
@mattdm интересно, что красное смещение связано с фактическим цветом «красного» фильтра в типичной маске Байера - где-то между желтым и оранжевым.
Все это охватывается утверждением, что оно «основано на определенных цветах, используемых в матрице Байера».
@xiota отличное объяснение. Теперь мне просто нужно понять, как работают цветовые профили :)
Цвета могут быть преобразованы из одного пространства в другое через промежуточное цветовое пространство. Не могу помочь вам с математикой, но задействованы матрицы. Вот страница, которая может оказаться полезной: Матрицы RGB/XYZ . RawTherapee включает в себя файлы DCP, но они в двоичном формате, поэтому вам придется обратиться к источнику, чтобы понять, как их читать и использовать. Может быть, вы можете использовать библиотеку, например Little CMS .

Короткий ответ заключается в том, что «красный», «зеленый» и «синий» фильтры в маске Байера вашей камеры не имеют тех же цветов, что и красный, зеленый и синий цвета, используемые в излучающих RGB-дисплеях. Так же как и «красный», «зеленый» и «синий» цвета, к которым три типа колбочек в нашей сетчатке наиболее чувствительны.

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

введите описание изображения здесь

Типичные датчики Байера с маской аналогичны, хотя «красный» фильтр немного более «желто-оранжевый», чем «желто-зеленый».

введите описание изображения здесь

Вот тот же график с вертикальными линиями, где обычный дисплей RGB (или дисплей RYGB, который добавляет желтый канал) излучает свет. Обратите внимание на расстояние между пиками каждого «красного», «зеленого» и «синего» канала на датчике камеры и красным, зеленым и синим каналами, излучаемыми дисплеем RGB. В частности, обратите внимание, насколько ближе «красные» фильтры в наших масках Байера к желтому, чем к красному.

введите описание изображения здесь

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

Несмотря на все симпатичные маленькие рисунки в Интернете, «красные» фильтры в большинстве масок Байера сосредоточены на 590 нм, что мы воспринимаем как оранжево-желтый оттенок, а не красный на 640 нм. Есть также более тонкие различия между «синими» и «зелеными» фильтрами и цветами, используемыми дисплеями RGB.

Таким образом, «чистый» красный цвет, излучаемый дисплеем RGB с длиной волны около 640 нм, создает отклик не только в фотосайтах, замаскированных фильтром, наиболее чувствительным к 590 нм, но со значительной чувствительностью на всем пути от 560 до 790 нм или около того. Фотосайты с «зеленым» фильтром также реагируют на красный свет с длиной волны 640 нм. Все, что дальше 790–800 нм, фильтруется ИК-фильтром в наборе фильтров перед датчиком (который не размещается перед датчиком при измерении чувствительности).

Точно так же «чистый» зеленый цвет, излучаемый дисплеем RGB с длиной волны около 530 нм, создает отклик не только в фотосайтах, замаскированных «зеленым» фильтром. «Синие» отфильтрованные фотосайты также регистрируют отклик. То же самое относится и к свету с длиной волны 480 нм, излучаемому синим каналом дисплея. И «синий», и «зеленый» отфильтрованные фотосайты на датчике камеры регистрируют реакцию на этот свет.

Мы делаем наши камеры таким образом, чтобы подражать тому, как наша система глаз/мозг создает восприятие цвета при определенных длинах волн электромагнитного излучения. Единственная причина, по которой мы называем часть электромагнитного спектра видимым светом, заключается в том, что эта часть спектра ЭМГ вызывает биологическую реакцию, когда попадает на колбочки сетчатки наших глаз. Нет никаких конкретных цветов, присущих определенным длинам волн света, есть только восприятие цвета, созданное глазами и мозгом, который его воспринимает. Животные с колбочками, которые по-разному реагируют на одни и те же длины волн света, не видят одни и те же цвета для одних и тех же длин волн и комбинаций длин волн.

Чтобы камера создавала «чистые» цвета при наведении на дисплей RGB, потребуется датчик с «красным» каналом, который вообще не реагирует на зеленый или синий свет, излучаемый дисплеем RGB, «зеленый канал». который вообще не реагирует на красный или синий свет, и «синий» канал, который вообще не реагирует на зеленый или красный свет. Но такая камера не сможет воспроизвести никаких цветов, кроме чистого красного, чистого зеленого и чистого синего. Не было бы способа синтезировать другие цвета, используя перекрывающуюся чувствительность «красного», «зеленого» и «синего» отфильтрованных фотосайтов, которые имитируют то, как наши колбочки сетчатки и наш мозг объединяются для синтеза цветов на основе перекрывающейся чувствительности наших S, L. , и M конусов.

Отличный ответ. Еще больше усложняет ситуацию то, что в большинстве (всех?) экранов используются технологии, которые также имеют кривые отклика. Я не знаю ни одной технологии, которая производит чистые цвета.
Ага. Я включил эту диаграмму в другой ответ на связанный вопрос . Однако, что касается этого вопроса, не имеет значения, излучают ли они чистые цвета. Более широкая чувствительность каждого «канала» на датчике по-прежнему будет заставлять каждый выходной цвет, поступающий с монитора, регистрировать ответы сенсоров, отфильтрованных и для других цветов.