Как я могу изменить экспозицию изображения sRGB?

Я хочу «нормализовать» экспозицию набора изображений перед дальнейшей обработкой. Я пробовал следующее: 1) преобразовать sRGB в CIE_XYZ на странице Википедии на sRGB; 2) умножьте или разделите «Y» на 2, чтобы получить изменение EV на 1 ступень; 3) преобразовать CIE_XYZ обратно в sRGB. Проблема в том, что шаг 3 часто дает отрицательные значения (они возникают после умножения матриц для преобразования обратно в линейный RGB). В частности, мой тестовый набор значений sRGB имеет форму (n, n, n), где 0 <= n <= 255. Я ожидал, что они будут около центра гаммы, и что изменение на 1 ступень не вытолкнет меня из гаммы. Что плохого в таком подходе ??

Я думаю, вам может понадобиться цветовое пространство xyY

Chris H 05.05.2018 07:12

Крис Х: «Y» XYZ и xyY - это одно и то же, не так ли? Я меняю только Y. Каким образом это в пространстве xyY приведет к другим значениям sRGB, чем изменение Y на ту же величину в XYZ?

user1146345 06.05.2018 02:24

согласно ninedegreesbelow.com/photography/xyz-rgb.html В цветовом пространстве XYZ Y соответствует относительной яркости; Y также несет информацию о цвете, относящуюся к ответу глаза "M" (желто-зеленый) конуса. X и Z несут дополнительную информацию о том, как колбочки человеческого глаза реагируют на световые волны различной частоты. ... В отличие от XYZ, пространство xyY четко отделяет XYZ Y (яркость) от цвета или, скорее, от цветности, что означает «xy» в xyY.

Chris H 06.05.2018 02:59

Просто линеаризуйте RGB, измените остановку и повторно примените гамму.

Giacomo Catenazzi 08.05.2018 17:30

Хотя идея Джакомо похожа на то, что я сначала подумал, я подозреваю, что это плохо работает в крайних точках - светлых или темных - поскольку в этих регионах преобразование raw-> rgb может применять нелинейность, которая делает кривую отклика более похожей на " S ", с приплюснутыми плечом и носком. Каково твое мнение???

user1146345 14.06.2019 01:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
241
2

Ответы 2

Я считаю, что комментарий пользователя: 1146345 является наиболее точным, поскольку он относится к нелинейности, вызванной преобразованием raw-> rgb. Так, например, преобразование из sRGB -> линейный RGB -> умножение на 2 ^ (дельта-стопы) -> sRGB не будет работать на концах кривой. Но мы не знаем, как охарактеризовать эту нелинейность, поскольку она, скорее всего, зависит от камеры.

Есть хорошие приложения для линейных изображений

Используя такое приложение, как Adobe AfterEffects, преобразование в линейное является тривиальным делом, и большинство необходимых вам инструментов остаются доступными. К сожалению, реализация 32-битного линейного числа с плавающей запятой в Photoshop менее функциональна.

Тем не менее, оказавшись в 32-битном линейном пространстве с плавающей запятой (гамма 1.0), вся линейная математика, которую вы выполняете, работает как свет в реальном мире. В кино / телеиндустрии мы большую часть времени работаем линейно, если не в AfterEffects, то в Nuke или Fusion и т. д.

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

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

При импорте изображения используйте соответствующий профиль, чтобы «развернуть» его в линейное пространство.

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

S-образные кривые и т. д.

Я вижу некоторые комментарии относительно камер / алгоритмов дебайеринга, добавляющих S-образные кривые, также известные как «мягкий клип» на высоких или низких частотах. Переход на CIEXYZ не поможет, а только добавит ненужную матричную математику.

Оставайтесь в sRGB

Обычно вы можете просто линеаризовать sRGB и оставаться в linearRGB для различных манипуляций. Если вы масштабируете яркость на 2, то вы, вероятно, все равно захотите отрегулировать высокий клип - любой мягкий клип будет просто масштабироваться вместе с остальной частью изображения, и это действительно не проблема, пока поскольку вы используете 32-битную плавающую точку, у вас не будет никаких значительных ошибок квантования, и вы можете настроить S-образные кривые после экспонирования.

Если вы хотите, вы можете использовать «Кривые», чтобы отрегулировать / расширить верхний предел. Однако AE также имеет встроенный импортер ImageRAW, поэтому вы можете импортировать прямо из RAW и настроить его так, чтобы не сжимать блики.

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

Плагины и гамма

Обратите внимание, что у AE, PS и других действительно есть плагины "экспозиции", которые могут повлиять на это изменение.

НО ТАКЖЕ:

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

Если вы пытаетесь имитировать внешний вид фильма, попробуйте использовать плагин LEVELS и поиграйте с гаммой / высоким / низким уровнем каждого цветового канала отдельно. Или сделайте то же самое, используя КУФЫ.

Другие вопросы по теме