Я хочу «нормализовать» экспозицию набора изображений перед дальнейшей обработкой. Я пробовал следующее: 1) преобразовать sRGB в CIE_XYZ на странице Википедии на sRGB; 2) умножьте или разделите «Y» на 2, чтобы получить изменение EV на 1 ступень; 3) преобразовать CIE_XYZ обратно в sRGB. Проблема в том, что шаг 3 часто дает отрицательные значения (они возникают после умножения матриц для преобразования обратно в линейный RGB). В частности, мой тестовый набор значений sRGB имеет форму (n, n, n), где 0 <= n <= 255. Я ожидал, что они будут около центра гаммы, и что изменение на 1 ступень не вытолкнет меня из гаммы. Что плохого в таком подходе ??
Крис Х: «Y» XYZ и xyY - это одно и то же, не так ли? Я меняю только Y. Каким образом это в пространстве xyY приведет к другим значениям sRGB, чем изменение Y на ту же величину в XYZ?
согласно ninedegreesbelow.com/photography/xyz-rgb.html В цветовом пространстве XYZ Y соответствует относительной яркости; Y также несет информацию о цвете, относящуюся к ответу глаза "M" (желто-зеленый) конуса. X и Z несут дополнительную информацию о том, как колбочки человеческого глаза реагируют на световые волны различной частоты. ... В отличие от XYZ, пространство xyY четко отделяет XYZ Y (яркость) от цвета или, скорее, от цветности, что означает «xy» в xyY.
Просто линеаризуйте RGB, измените остановку и повторно примените гамму.
Хотя идея Джакомо похожа на то, что я сначала подумал, я подозреваю, что это плохо работает в крайних точках - светлых или темных - поскольку в этих регионах преобразование raw-> rgb может применять нелинейность, которая делает кривую отклика более похожей на " S ", с приплюснутыми плечом и носком. Каково твое мнение???





Я считаю, что комментарий пользователя: 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-образные кривые, также известные как «мягкий клип» на высоких или низких частотах. Переход на CIEXYZ не поможет, а только добавит ненужную матричную математику.
Обычно вы можете просто линеаризовать sRGB и оставаться в linearRGB для различных манипуляций. Если вы масштабируете яркость на 2, то вы, вероятно, все равно захотите отрегулировать высокий клип - любой мягкий клип будет просто масштабироваться вместе с остальной частью изображения, и это действительно не проблема, пока поскольку вы используете 32-битную плавающую точку, у вас не будет никаких значительных ошибок квантования, и вы можете настроить S-образные кривые после экспонирования.
Если вы хотите, вы можете использовать «Кривые», чтобы отрегулировать / расширить верхний предел. Однако AE также имеет встроенный импортер ImageRAW, поэтому вы можете импортировать прямо из RAW и настроить его так, чтобы не сжимать блики.
Если у вас нет доступа к RAW и только к JPG, опять же, все должно быть в порядке, если вы используете линейный 32-битный формат. После всех ваших манипуляций просто повторно примените гамма-кривую, и исходные S-кривые останутся нетронутыми относительно выделения изображения, что обычно и требуется.
Обратите внимание, что у AE, PS и других действительно есть плагины "экспозиции", которые могут повлиять на это изменение.
НО ТАКЖЕ:
Имейте в виду, что если вы хотите имитировать настоящую пленку, каждая из цветовых записей имеет разную гамму, и в пленке они взаимодействуют больше, чем цифровые значения в sRGB, которые, по сути, остаются отдельными.
Если вы пытаетесь имитировать внешний вид фильма, попробуйте использовать плагин LEVELS и поиграйте с гаммой / высоким / низким уровнем каждого цветового канала отдельно. Или сделайте то же самое, используя КУФЫ.
Я думаю, вам может понадобиться цветовое пространство xyY