Home > Обработка, Теория > Как работают кривые Curves – статья Павла Косенко

Как работают кривые Curves – статья Павла Косенко

October 1st, 2016 Leave a comment Go to comments

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

О кривых в наше время сказано много, и вместе с тем недостаточно. Большинство статей на эту тему посвящено функционалу инструмента Curves в Adobe Photoshop, в то время, как кривые — куда более глобальное и важное понятие.

Несмотря на то, что рассматривать их действие удобнее всего действительно в Фотошопе, надо понимать, что в том или ином виде кривые существуют практически в любой программе для работы с фотографическими изображениями. Даже там, где в прямом виде вы не увидите привычной кривой, скорее всего она существует и так или иначе воздействует на вашу картинку. Даже когда вы меняете параметры Brightness или Contrast в Лайтруме, на самом деле вы управляете формой некоторой кривой. Не говоря о том, что вывод картинки на экран вашего компьютера в принципе невозможен без гамма-приводки и управления яркостно-контрастными характеристиками через ICC-профиль монитора, которые также регулируются некоторой формы кривой. Более того, даже если вы снимаете на плёнку, после проявки ваше изображение также будет определяться так называемой характеристической (передаточной) кривой данной конкретной фотоплёнки.

Таким образом, независимо от того, на что вы снимаете и насколько много внимания уделяете вопросам обработки фотографий в тёмной или светлой комнате, понимание принципа работы кривых является достаточно важным. И не только для фотографов: сканировщики, цветокорректоры, дизайнеры, операторы печати и многие другие специалисты при работе с растровой картинкой мыслят в первую очередь кривыми, а Curves для них — главный (часто единственный) и самый эффективный инструмент по работе с фотографическим изображением.

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

Итак, вернёмся к Фотошопу как частному случаю использования кривых, и рассмотрим их действие с помощью инструмента Curves. Двигаться мы будем от простого к сложному, поэтому для начала возьмём обычное 8-битное черно-белое изображение (в цветовой модели Grayscale).

И применим к нему кривую очень простой формы, с одной лишь единственной точкой, которую поставим в левой части кривой и сдвинем вверх. В Adobe Photoshop кривая вызывается командой «Image – Adjustments – Curves…» или комбинацией клавиш «CMD+M» («CTRL+M» в Windows).

Прежде всего обратите внимание на то, что на кривой серым цветом показана гистограмма нашей ч/б-картинки. Гистограмма отображает распределение яркостей в изображении. Так как мы взяли 8-битную картинку, яркость каждого пиксела может быть представлена максимум 256 значениями (они ещё называются уровнями). В этой системе координат чёрной точке соответствует значение 0 уровней, белой — 255 уровней. Крайняя левая точка гистограммы (а также инструмента Curves в том виде, в котором он приведён на скриншоте) соответствует самым тёмным пикселям нашего изображения (со значением 0 уровней), крайняя правая — самым светлым (со значениями 255 уровней). По вертикали откладывается общее количество пикселей с соответствующей яркостью.

Любая кривая занимается перераспределением яркостной информации изображения. На приведённой выше кривой мы взяли точку с исходным значением 57 уровней (отложенным по горизонтали) и присвоили ей новое значение 101 уровень (отложенное по вертикали). Это означает, что все пиксели, которые на входе инструмента имели яркость 57 (из 255 возможных) уровней, после его применения станут пикселями с яркостью 101 (из 255 возможных) уровней.

Все остальные пиксели изменят свою яркость соответствующим форме кривой образом. В частности, после применения приведённой кривой изменятся яркости всех пикселей, кроме чёрных и белых. Картинка при этом станет светлее, так как все пиксели приобретут новые значения, больше исходных.

Кривая, которая не меняет яркость пикселей и никаким образом не действует на изображение, представляет собой на самом деле прямую, которая идёт из крайней левой точки в крайнюю правую под углом 45 градусов. Именно такую форму имеет кривая по умолчанию, когда мы вызываем её в Фотошопе. Обычно об этом говорят до того, как объясняют действие кривой, но на мой взгляд, проще понять прямую, как частный случай кривой.

Теперь, понимая, как работает кривая, перейдём к конкретике.

Управление яркостью

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

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

Приведённые формы кривых соответствуют измененям параметра Brightness во многих программах, в частности, в Adobe Lightroom (Adobe Camera Raw). Когда вы устанавливаете Brightness в положительные значения, это практически равнозначно тому, что берёте среднюю точку кривой и тянете её вверх. Отрицательные значения Brightness фактически задают смещение центральной точки вниз.

Управление контрастом

Контраст определяется разницей между самой яркой и самой тёмной точками. В данном случае, цифрового 8-битного изображения. Чем больше эта разница, тем выше контраст. Чем меньше разница, тем ниже контраст.

Если мы возьмём, например, все чёрные пиксели фотографии со значениями 0 уровней и присвоим им значения, скажем, 30 уровней (а остальные уровни пересчитаем пропорционально), то мы снизим общий контраст картинки. Это произойдёт за счёт того, что чёрная точка «посереет», то есть станет более светлой. По сути мы пересчитали исходный диапазон 0-255 уровней в новый диапазон 30-255 уровней, уменьшив разницу между самой светлой и тёмной точками.

А можно сделать наоборот — взять все пиксели со значениями 30 уровней и присвоить им (а заодно и всем пикселям со значениями меньше 30) новое значение 0 уровней.

Остальные уровни пересчитаются пропорционально. С помощью такой кривой мы пересчитали диапазон 30-255 уровней (проигнорировав значения меньше 30) в новый диапазон 0-255 уровней. То есть увеличили разницу между самой тёмной и самой светлой точками, а значит увеличили контраст.

ВАЖНОЕ НАБЛЮДЕНИЕ. Повышение контраста связано с увеличением угла наклона кривой относительно исходных 45 градусов, а снижение — с его уменьшением. Иными словами, чем круче кривая, тем выше контраст.

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

А теперь давайте посмотрим на более общую ситуацию, когда наша кривая не является прямой. В этом случае угол наклона будет определяться касательной к кривой в данной точке, а изменение контраста — изменением этого угла в некоторой области.

Там, где угол наклона касательной меньше, чем 45 градусов, контраст уменьшается. Там, где угол наклона касательной больше 45 градусов, контраст увеличивается.

Чтобы понять, каким образом меняется контраст применительно к приведённому примеру, давайте посмотрим на гистограмму, которая сопровождает эти изменения:

Серая гистограмма — исходная, чёрная — та, которая соответствует картинке после применения приведённой выше кривой. Обратите внимание на так называемые «частокол» (в левой части гистограммы) и «расчёску» (в правой её части), которые возникают после применения кривой.

«Частокол» связан с тем, что соседние уровни «схлопываются» в процессе снижения контраста. Так как некоторый диапазон (скажем, 0-100 уровней) мы пересчитываем в новый диапазон (скажем, 30-100 уровней), возникает некоторое количество «лишней» информации (в размере 30 уровней для приведённого предположения), которые программе необходимо куда-то деть. Это проявляется в том, что пикселей некоторых уровней становится в 2 раза больше, что сопровождается визуальными пиками на гистограмме.

«Расчёска» наоборот, связана с тем, что уровни «прорежаются» в процессе повышения контраста. Ведь некоторый диапазон (скажем, 100-200 уровней) мы пересчитываем в новый диапазон (скажем, 50-250 уровней). В процессе этого возникает недостаток информации в виде некоторых уровней с нулевым количеством пикселей, которые ему соответствуют.

Если мысленно сопоставить гистограмму с кривой, которые приведены выше, то можно увидеть, что действительно, в тёмных тонах контраст уменьшается (угол наклона касательной меньше 45 градусов), в средних практически не меняется (угол наклона близок к 45 градусам), а в светлых тонах контраст увеличивается (угол наклона касательной больше 45 градусов).

Одним из наиболее распространённых способов повышения контраста во многих программах (а также в некоторых аналоговых процессах, например, закладываемый на уровне эмульсии некоторых фотоплёнок) происходит с помощью так называемой S-образной кривой.

Глаз человека наиболее восприимчив к среднему тональному диапазону и чуть менее восприимчив к тёмному и светлому. Поэтому, если возникает необходимость повысить контраст, делать это разумно в первую очередь в среднем диапазоне. При этом мы можем или совсем пожертвовать тёмным и светлым, или компрессировать их (снизить контраст в этих областях). Что, собственно и делает S-образная кривая.

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

Приведённая форма кривой соответствует положительным значениям параметра Contrast во многих программах, в частности, в Adobe Lightroom (Adobe Camera Raw). Когда вы устанавливаете Contrast в положительные значения, это практически равнозначно тому, что фиксируете среднюю точку кривой, а точки, расположенные на 1/4 и 3/4 диапазона, тянете вниз и вверх на одинаковые значения.

Отрицательные значения Contrast делают тоже самое, но тянут точки, расположенные на 1/4 и 3/4 диапазона, в обратных направлениях.

Как вы теперь видите, инструменты Brightness и Contrast в любых программах весьма ограничены в своих возможностях. Если мы будем производить аналогичные операции с помощью кривых Curves, в зависимости от конкретной картинки мы можем:

а) ставить точки в других местах
б) изменять значения точек несимметрично
в) использовать не 1-3 точки, а больше

По тем же причинам не имеет особого смысла использование инструмента Levels, который является частным и более примитивным случаем Curves.

Средний ползунок Levels практически соответствует центральной точке Curves (это не совсем так, но очень близко к тому), которую мы можем двигать через Levels только вверх или вниз. Левый и правый ползунки Levels соответствуют крайним левой и правой точкам Curves. Никаких других точек поставить в Levels и управлять ими мы не можем.

А теперь перейдём к цвету.

Кривые для цветных изображений

До сих пор мы рассматривали кривые относительно ч/б изображения в модели Grayscale. А как быть с цветом? В рамках данной статьи я сознательно ограничусь некоторым базовым рассмотрением кривых в цветовой модели RGB, т.к. модели CMYK и Lab достойны отдельных изысканий, не входящих в задачи этой статьи.

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

И применим к этому RGB-изображению некоторой формы кривую. Не важно какой, пусть это будет S-образная кривая повышения контраста.


Только что мы применили кривую к так называемому композитному RGB-изображению, то есть одинаковой формы кривую ко всем трём его каналам (Red, Green, Blue) одновременно.

Слева гистограмма исходной фотографии, справа — после воздействия кривой. Картинка при этом в целом стала выглядеть действительно более контрастно, хотя её глубокие тени и яркие света контраст потеряли:

Обратите внимание на то, что мы применяли одинаковую кривую ко всем трём каналам, а исходное распределение яркостной информации в каналах у нас при этом разное. В рамках этой статьи я не буду углубляться в проблемы, которую за собой тянет работа с композитной кривой, хотя она достаточно актуальна, особенно по отношению к программам, которые не умеют работать с поканальными кривыми или в пространстве Lab. Здесь лишь упомяну о том, что применение композитной кривой к RGB-изображению может повлечь за собой весьма нежелательные цветовые смещения.

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

Важно понимать, что если мы увеличиваем яркость какого-либо канала, или какой-то определённой яркостной области в этом канале, то мы делаем этот канал (или его область) «сильнее». То есть делаем более значимым вклад этого канала в итоговую цветную картинку RGB.

Например, у нас есть некоторая область со значениями пикселей (128, 128, 128) в координатах RGB. Равенство значений в трёх каналах говорит о том, что это нейтральный цвет. Допустим, после применения повышающей яркость кривой в красном канале, значение R вместо 128 стало 200, то есть общее значение RGB стало (200, 128, 128). Как видите, цвет этой области сместился в сторону красного. Что как раз и демонстрирует усиление красного канала R (повышение его яркости).

А вот ослабление красного канала R (снижение его яркости) повлечёт за собой наоборот, снижение уровня красного в итоговой цветной картинке. То есть появления в ней цвета, который является противоположным красному — зеленовато-цианистому.

То же самое будет происходить и в случае изменения яркости в других каналах. Усиление/ослабление зелёного канала G приводит к появлению зелёного и маджентового оттенка соответственно.

 

Усиление/ослабление синего канала B приводит к появлению синего и жёлтого оттенка соответственно.

 

Примечание. В полиграфии, при работе в цветовой модели CMYK, принято использовать терминологию «сильный»/«слабый» каналы в обратных смыслах. «Слабым» там называется самый светлый канал (так как он вносит меньший вклад в итоговое изображение, которое формируется красками на бумаге), а «сильным» — самый тёмный.

Продемонстрируем на конкретных примерах.

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

Оценивать данную цветокоррекцию не требуется, это лишь пример возможного применения кривых, к тому же усиленный гротескно. Данная статья направлена исключительно на понимание работы кривых Curves, и никаким образом не затрагивает эстетические вопросы применения этого инструмента. Критерии обработки — отдельная и очень большая тема.

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

Тем, кого интересуют вопросы цветокоррекции более подробно, могу посоветовать курсы Андрея Журавлёва:

Практическая цветокоррекция. Часть 1
Практическая цветокоррекция. Часть 2

Эти курсы читаются не только в Москве. Следить за расписанием этих и других курсов можно в сообществе fp-school

P.S. Спасибо Саше Онищенко за ценные поправки к статье.

Автор статьи: Павел Косенко

Источник: Блог Павла Косенко

  1. No comments yet.
  1. No trackbacks yet.

2022 © Все права защищены. Карта сайта
Yandex.Metrica
.