Как я могу изменить экспозицию изображения sRGB? - PullRequest
0 голосов
/ 05 мая 2018

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

Ответы [ 2 ]

0 голосов
/ 10 августа 2019

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

С помощью приложения, такого как 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-кривые после экспозиции.

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

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

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

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

НО ТАКЖЕ:

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

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

0 голосов
/ 07 июля 2019

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

...