Далее насыщенностью буду называть обычную фотошоповскую цветовую насыщенность, saturation. При обработке иногда хочется увеличить или уменьшить диапазон насыщенностей разных мест картинки. Например, на тусклом зимнем пейзаже каким-то цветным объектам насыщенность добавить, а окружающим снежным просторам снизить, а то ведь снег часто слишком синий. Подобные вещи нетрудно сделать, если суметь выделить наши объекты. Нынче модны и часто встречаются сюжеты, где автор успешно делает цветовую операцию с единственным чётко обособленным объектом - делает его насыщенным, а остальное десатурирует; но лассо - не наш путь. Ведь мы хотим суметь сделать что-то подобное и, например, с синеньким домиком, проглядывающим сквозь густое сплетение слабоокрашенных заснеженных веток.
В таких (и наверное в каких-нибудь ещё) случаях хотелось бы уметь создать маску для выделения насыщенных областей, полученную не ручным инструментом выделения, а автоматически из самого исходного изображения. Разумеется, потом эту маску можно как угодно подчищать и, например, регулировать кривыми. Вот собственно и вся постановка вопроса. Далее предлагается конкретный вариант такой автоматизации. Мне ни разу не встречались в книжках или интернете ни этот вариант, ни другие; но вероятно они существуют. Было бы интересно увидеть ссылки, сравнить.
Буду говорить только для RGB. Итак, мы хотим выделить цветонасыщенные области на картинке. Будем исходить из такой трактовки: насыщенные области - это места, где велики разности цветовых каналов. Эту трактовку предлагаю без доказательства, просто потому, что в ненасыщенных серых точках все три канала равны. Поэтому заслуживает проверки такой алгоритм: составить все попарные разности каналов и сложить их модули. Отмечу, что попарных разностей всего три; знаки в ФШ неразличимы, т.е. в качестве разностей каналов сразу и получаются модули. Сами разности легко реализуются режимом "разница" для слоёв, после копирования содержимого цветовых каналов RGB в отдельные слои. Последующее их суммирование нужно делать на чёрный нижележащий слой в режиме screen, в переводе его именуют иногда "экран", иногда "осветление".
Можно сказать и так: мы попытаемся создать картину, которую выдал бы нам ФШ в канале S, если бы смог перевести наше изображение в цветовую модель HSB.
Приведенные соображения не являются научным изысканием, имеют чисто практическую направленность и конечно же требуют проверки реальностью - будет ли возникать слой, содержащий более или менее яркие области в зависимости от насыщенности исходного изображения в этих областях . Проверка была сделана, и результат показался мне весьма успешным. Составив в ФШ указанные разности и соответственно их сложив, лично и многократно убедился, что уверенно получаю карту насыщенности для любой картинки; её-то и следует далее использовать в качестве желаемой маски выделения. Для использования её можно поместить в альфа-канал или слой-маску. Подгонка этой карты уровнями или кривыми - большое удовольствие, можно акцентировать нужные области весьма гибко. Ну а потом раздельно регулировать насыщенные и ненасыщенные области действительно очень удобно.
Разумеется, для удобного систематического употребления предлагаемой операции нужно сделать соответствующую макрокоманду. Буду называть макрокомандой то, что в конкретных версиях ФШ называется либо action, либо действие, либо операция. Через меню Oкно в палитре (специальном окне) макрокоманд получаем доступ к разнообразным манипуляциям с ними. В том числе, имеется возможность самому создать (записать) макрокоманду; в результате этого она будет присутствовать в палитре с возможностью её выполнить. Всегда можно и сохранить макрокоманду в отдельном файле с расширением ATN. И также всегда можно загрузить макрокоманду из подобного файла; это и предлагается сделать читателю данной статьи, скачав предварительно к себе файл satur_nabor.atn. В этом файле сохранена в двух вариантах (для ФШ_CS2rus и для ФШ_7rus) макрокоманда создания маски насыщенности по намеченному ранее алгоритму. Для желающих вникнуть подробнее привожу комментарии к отдельным шагам макрокоманды, для варианта CS2.
При практическом опробовании обоих вариантов нашей макрокоманды они давали, естественно, одинаковый результат. При этом вариант, подготовленный для ФШ_7rus, успешно работал и в среде ФШ_CS2rus; а вот вариант для CS2 был работоспособен только в среде CS2. При успешном прохождении процесса возникает один новый слой black в оттенках серого; на нём более светлые области соответствуют более цветонасыщенным областям исходного изображения, независимо от самих цветовых оттенков.
Итак, скачайте файл satur_nabor.atn и примените к нему команду Загрузить в Палитре макрокоманд. Станут доступными наши макрокоманды, и для любой картинки можете выполнить тот или другой вариант; они названы satur_CS2 и satur_PS7.
Теперь на упрощённом примере рассмотрим возможный вариант применения маски, полученной с помощью нашей макрокоманды. На рисунке видим исходное (слева) и обработанное (справа) изображение. Более цветонасыщенные области исходного изображения мы сделали действительно насыщенными. А при желании могли бы наложить на них какую-нибудь текстуру или, например, перекрасить в другой цвет.
Уточним цепочку выполненных действий.
На Рис.1 отображена ситуация, когда мы только что дали команду Выполнить для операции satur_CS2. В результате в палитре слоёв наблюдаем появление слоя black, где более светлые области соответствуют более окрашенным частям исходной картинки.
Мы хотим использовать содержимое слоя black в качестве маски для выделения этих самых областей. Один из вариантов - поместить содержимое слоя black в отдельный канал и затем загрузить выделенную область именно из этого канала. Так мы и поступим; но предварительно сделаем нашу маску более контрастной. Рис.2 иллюстрирует наш следующий шаг, где с помощью настройки кривых мы заставили нужные области ярко светиться на тёмном фоне. Это уже реальная заготовка для маски, причём возможна и подчистка её кистью, да и вообще любыми инструментами.
После этого забираем содержимое слоя black в буфер обмена, а сам слой black удаляем.
Теперь наша задача - поместить изображение из буфера в отдельный канал. На Рис.3 видим ситуацию после того, как в палитре каналов выполнена команда создания нового канала и сделана вставка из буфера обмена. Наша маска разместилась в канале с шаблонным названием по умолчанию Альфа1. Нам важно то, что теперь в меню Выделение будет доступна команда загрузки выделенной области из этого канала.
Итак, слой black удалён, в документе снова только исходная картинка. Рис.4 показывает наш следующий шаг - загрузка выделенной области из нашего канала Альфа1. Светлым областям маски будут соответствовать выделенные области картинки.
После этого они в нашей власти. Рис.5 отображает акцию повышения насыщенности. А если мы пожелаем уменьшить насыщенность остальной части картинки, то легко перейдём к её выделению, применив к нашей выделенной области команду инверсии. На этом наша обработка успешно завершена.
Разумеется, это был всего лишь схематический пример.