Ретушь портрета на основе частотного разложения изображения

Apr 30, 2010 04:05

После выступления на Creative Future 2010 я обещал, что напишу небольшую статью на эту тему. А закончив писать решил, что это неплохой повод начать вести свой ЖЖ. Небольшой предварительный опыт показал, что над девушками лучше не издеваться. Поэтому в качестве иллюстрации выступит мужской портрет. Его по моей просьбе сделал белорусский фотограф Дмитрий Михальцов, подобрав модель с «угловатым» лицом, характерными дефектами кожи и специально сделав некоторые ошибки при постановке света.

В теле статьи содержатся уменьшенные в два с половиной раза превьюшки.



Полноразмерный psd можно скачать отдельно.
За интересные ссылки, использованные мной в тексте, благодарю chaka , dorjechang и tritopora
Дополнительно рекомендую прочитать статью Алексея Шадрина «Управление визуальным объемом фотографических изображений». В практических рекомендациях есть ошибки, но замечательно описана теория.



UPD (апрель 2014):
Если данная статья покажется вам не удачной и/или не очень подробной, или вы просто предпочитаете «посмотреть», а не «почитать», предлагаю ознакомиться с постом «Частотное разложение. Ultimate. Конспект и видео». В нем представлен конспект одноименного онлайн мастер-класса и видеозапись МК (общей продолжительностью 5 часов 13 минут), нарезанная на части соответствующие разделам конспекта.

Все было придумано до нас.

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

Все началось в 1822 году, когда французкий математик и физик Жан Батист Жозеф Фурье опубликовал свою работу «Аналитическая теория тепла», в которой для расчетов использовал представление функций тригонометрическими рядами. Разложение Фурье оказалось очень удобным и гибким инструментом. В 19 веке эти идеи активно развивались математиками, а в 20 были взяты на вооружение радиотехниками. Прямое (позволяющее разложить сигнал в частотный спектр) и обратное (позволяющее востановить сигнал из его часттного спектра) преобразования Фурье стали краеугольным камнем обработки сигналов.

Цифровая техника породила необходимость цифровой обработки сигналов, а компьютеры предоставили для этого широчайшие возможности. И здесь активно используется преобразование Фурье. На нем построены многие алгоритмы сжатия информации (в том числе JPG и MPEG), системы шумоподавления и многое другое. Естественно, такая обработка не обошла стороной и цифровые изображения. Этот метод давно известен в среде професссиональных ретушеров и на западе его название крутится вокруг слова «вейвлет» (wavelet). Хотя реально в его основе лежит более простое преобразование Фурье, поэтому я называю это частотным разложением.

В массы данная методика продвинулась не сильно. Сомневаюсь, что здесь наличествует «заговор профессионалов», скрывающих от публики «секретные приемы». Скорее всего, специалистам было просто лень писать статьи, а «широким массам» вполне хватало портретуры (как созвучно с политурой, и результаты схожие). Лично я «открыл Америку через форточку», когда полтора года назад разбирался с режимами наложения и нашел статью Александра Миловского «Муар нам только снится» . Разобрался с частотным разложением самостоятельно и только потом узнал, что его давно и плотно используют многие специалисты. Ничего удивительного - все было придумано до нас.

Фурье туда-обратно или аналогия со звуком.

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

«Фурье туда-обратно» - это жаргонное студенческое название стандартного метода обработки сигналов: прямое преобразование Фурье раскладывает входной сигнал (например, на входе в усилитель) в спектр - полученный спектр изменяется в соответствии с характеристикой прибора (например, усиливаются низкие частоты) - обратное преобразование Фурье позволяет получить из нового спектра выходной сигнал (в нашем примере басы будут звучать громче). Прелесть такого метода в том, что можно изменять разные частоты по отдельности, не зависимо друг от друга. Самое простое изменение - усиление или ослабление. Те, кто застал старую технику, помнят на усилителях ручки «НЧ» и «ВЧ». Это и есть усилители низкой и высокой частоты. Эти регулировки не затрагивали средние частоты, но позволяли отдельно усилить или ослабить низкие и высокие. В современной технике спектр делится на большее количество частотных полос. Раздельное управление каждой из них обеспечивает эквалайзер. Проигрыватель iTunes, например, имеет десятиполосный эквалайзер.



Но нам не нужно такого детального разделения. Давайте вернемся к трем полосам и разберемся, какой вклад вносят в мелодию лежащие в них звуки.

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

В средних частотах лежит голос человека и основные звуки большинства музыкальных инструментов. Это основная, наиболее информативная и детализированная часть звука. Мобильные телефоны воспроизводят только средние частоты, что совсем не мешает нам слушать собеседника или наслаждаться (а чаще совсем наоборот) всевозможными рингтонами. Другими словами:
В средних частотах находится основная детализация.

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

А теперь давайте отбросим предварительные объяснения, оставим только краткие выводы и представим что речь идет об изображении. С точки зрения математики и обработки сигнала разницы между звуком и изображением практически нет: звук - это одномерный (зависимость акустического давления или напряжения на клемах усилителя от времени) непериодический сигнал, а картинка - это двумерный (зависимость яркости от горизонтальной и вертикальной координаты) непериодический сигнал. Для RGB изображения таких сигалов будет сразу три: яркость в каналах Red, Green и Blue. Итак, в изображении:

Низкие частоты несут информацию об общей форме.
В средних частотах находится основная детализация.
Высокие частоты добавляют резкость.

Если мы сможем разнести разные частоты изображения на различные слои, то получим следующее.
На первом слое (НЧ) - самые крупные детали, общее распределение яркости и цвета, то есть форму объекта.
На втором слое (СЧ) - средняя и мелкая детализация, которая скрывается за выражением «локальный контраст» и для снятых крупным планом объектов является фактурой поверхности.
На третьем слое (ВЧ) - сверх-мелкую детализацию, про которую часто говорят «микроконтраст» и которая отвечает за резкость.

Надо сразу заметить, что граничные переходы являются сверх-мелкими деталями, даже если это границы достаточно крупных элементов изображения. Кстати, если вы еще не догадались, классическое повышение резкости фильтром Unsharp Mask - это просто сильное усиление верхних частот, а повышение резкости методом HiRaLoAm (High Radius Low Amount) - это слабое усиление средних и верхних частот.

Как это сделать в графическом редакторе.

«На полном автомате» это можно реализовать с помощью плагинов. Для GIMP'а существует Wavelet decompose, для пользователей ImageMagick есть достаточно подробное описание (с кодом), работающие в Photosop могут использовать 2D Fast Fourier Transform plugin for Adobe Photoshop или поискать в интернете по словам «wavelet» или «FFT». Я не люблю плагины (тому есть свои причины, но это выходит за рамки данной статьи), поэтому мы все проделаем стандартными средствами Photoshop.

Возьмем самый простой случай, разделение на две составляющие. Задача распадается на две: во-первых, разделить картинку на частотные составляющие; во-вторых, сложить эти частотные составляющие обратно в картинку. Для решения первой нам потребуются фильтры нижних и верхних частот. Фильтр НЧ оставляет только частоты ниже определенной. Естественно, частоты не обрезаются резко. Просто начиная с какого-то значения они плавно ослабляются. Фильтр верхних частот по такому же принципу оставляет только частоты выше определенной. Эти фильтра должны взаимно дополнять друг друга. То есть, после ВЧ-фильтрации мы должны увидеть разницу между исходной картинкой и ее НЧ-составляющей. В противном случае мы не сможем сложить изображение обратно.

Фильтром нижних частот в фотошопе является Gaussian Blur. Чем больший радиус мы задаем, тем ниже частоты, которые он оставляет. Дополнительным к нему фильтром верхних частот является High Pass (кстати, английский термин high-pass filter так и переводится «фильтр верхних частот»). Таким образом, после применения к копии исходной картинки Gaussian Blur мы получим ее низкочастотную составляющую. А после применения к копии исходной картинки High Pass с тем же значением Radius - высокочастотную, то есть разницу между исходной картинкой и ее размытой копией. Эта разница равна отклонению яркости от средне-серого (тон 128).

Из каких соображений выбирается Radius. Рассказывать про картинку в терминах «частоты» не очень удобно, поэтому перейдем к терминам «размеры». Понижение частоты соответствует увеличению длины волны, а для картинки это означает увеличение размера элементов. Чем больше значение Radius, тем больший размер должен иметь элемент изображения чтобы остаться на размытой копии, тем больше деталей будет исчезать с нее, оставляя только «чистую» форму объекта. Таким образом, при использовании Gaussian Blur мы заинтересованы в как можно большем значении Radius.

С другой стороны, чем больше значение Radius, тем больший размер могут иметь элементы пропущенные фильтром High Pass, тем больше информации о форме пройдет в слой на котором мы собирались оставить только детализацию. Таким образом, при использовании High Pass мы заинтересованы в как можно меньшем значении Radius. Поскольку по условиям задачи это значение для Gaussian Blur и High Pass должно быть одинаковым, исходя из конкретной картинки и стоящей задачи выбирается некий компромисный вариант.

Всю работу можно производить в одном файле, а фильтры применять к копиям слоя с исходным изображением. Чтобы облегчить подбор значения Radius, я предварительно преобразовываю эти копии в смарт-объекты (Convert to Smart Objects). Таким образом фильтры применяются к ним как смарт-фильтры и допускают изменение настроек в любой момент. На иллюстрации приведен внешний вид фотографии и палитры Layers для исходной картинки, ее НЧ-составляющей (слой Low) и ВЧ-составляющей (слой High). Значение параметра Radius для обоих фильтров равно 10.







Теперь вторая половина задачи: сложить полученные НЧ и ВЧ составляющие в единую картинку. Для этого надо яркость каждой точки размытой копии (НЧ-составляющей) изменить ровно настолько, насколько яркость ВЧ-составляющей отличается от средней (тон 128). Мы могли бы воспользоваться режимом наложения Linear Light, но его алгоритм немного другой: яркость каждой точки нижнего слоя изменяется на величину в два раза большую, чем отличие яркости верхнего слоя от средней (тон 128). Выражаясь математически: R = S + 2(C - 128), где S - исходная яркость, C - накладываемая яркость, R - результирующая яркость. Чтобы скомпенсировать заложенное в Linear Light двухкратное усиление надо перед сложением в два раза понизить контраст ВЧ-слоя, оставив неизменной среднюю яркость. Это можно сделать создав поверх него корректирующий слой кривых, в котором черная точка сдвинута вверх до значения 64, а белая вниз до значения 192.



Теперь корректирующий и ВЧ слои можно объеденить в группу и присвоить этой группе режим наложения Linear Light. Готово, перед вами исходная картинка. Если вы хотите минимизировать суммарную ошибку округления (это имеет смысл при разложении на большее количество составляющих), работайте в 16-битном режиме. Но при разложении на две составляющие она настолько мала, что 8-битные исходники можно не переводить в 16 бит.



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

Замечание первое. Александр Миловский предложил для понижения контраста ВЧ-слоя использовать Brightness/Contrast с установкой Contrast=-50%. Если вы решите поступить так же, не забудте поставить галочку Use Legacy. Со времени написания статьи алгоритм работы Brightness/Contrast был изменен и эта галочка заставляет его работать по старому алгоритму. Наглядно это можно увидеть на иллюстрациях к соответствующей статье.

Замечание второе. На форуме сайта www.modelmayhem.com есть пост с милым названием «HighPass курит взатяг (+решение)», в которой утверждается, что High Pass дает не аккуратный результат и предлагается следующая методика:

1. cделать две копии слоя с исходным изображением
2. применить к нижней Gaussian Blur с желаемым радиусом
3. к верхнему слою применить команду Apply Image, выбрав в качестве накладываемого изображения размытый слой, режим наложения - Subtract, в поле Offset ввести 128, в поле Scale ввести 2.
4. наслаждаться результатом, который «не курит взатяг».

Да простит меня автор этого сообщения, но я это считаю бредом. Описанная методика с коэффициентом Scale 1 полностью повторяет алгоритм действия фильтра HighPass, а коэффициент Scale 2 просто в два раза снижает контраст (мы это делали кривыми). Таким образом шаманские танцы с бубном лишаются всякого смысла. Я попробовал разложить и сложить картинку разными методами и получил совершенно одинаковые результаты. Кроме того, сразу сниженный контраст ВЧ-слоя подпортит нам жизнь во время ретуши. То же самое относится и ко второму предложенному автором алгоритму. Желающих поспорить прошу в коменты.

UPD: как выяснилось, проблемы у High Pass все-таки есть, подробности во второй части статьи.

Замечание третье. Иногда вместо кривых для компенсации вносимого Linear Light усиления предлагают уменьшить непрозрачность ВЧ-слоя до 50%. В частных случаях такая замена может быть равнозначна, но в общем - нет. В областях светлых деталей на светлом фоне (или темных деталей на темном фоне) после неослабленного Linear Light наложения может начаться постеризация и уменьшение непрозрачности от нее не спасет.

Зачем было городить огород?

Ответ на этот вопрос очевиден: если мы разложили изображение на составляющие, то теперь можем править каждую из них по отдельности.

Для ретуши формы удобнее всего применять штамп с уменьшеной непрозрачностью. Это позволяет плавно сгладить свето-теневой рисунок. Но при ретуши лица нас удерживает от этого фактура кожи: она начинает замыливаться и лицо превращается в латексную маску. Частотное разложение решило эту проблему. На НЧ-слое осталась только форма, вся фактура кожи ушла на ВЧ-слой. Поэтому можно совершенно спокойно работать полупрозрачным штампом, кисточкой и даже пальцем (Smudge Tool). Можно сгладить форму. Таким образом легко убрать неравномерность макияжа, огрехи постановки света, уменьшить глубину морщин, убрать воспаление (на иллюстрации я убрал покраснение с царапины на лбу, сохранив ее). На отдельных участках можно не просто сгладить, но и перерисовать свето-теневой рисунок (так убираются мешки под глазами). Пальцем можно протянуть, плавно удлиннить уже имеющиеся тени.

Я делал ретушь на новом прозрачном слое, включив для штампа режим Sample: Current & Below. На картинке ниже зеленым цветом отмечены отредактированные на НЧ-слое области (это специально сделанное превью, при ретуши такой картинки не будет). Далее приведен внешний вид слоя ретуши на прозрачном и белом фоне.







С ретушью текстуры неплохо справляется Healing Brush, но при работе по цельному изображению у нее не очень хорошо получается согласовать яркости исходной и ретушируемой областей. В результате на изображении остаются неприятные пятна. При работе по ВЧ-слою эта проблема снимается. Обратите внимание на большой старый шрам на лбу справа. Я брал образцы для ретуши как слева (где лоб прилично светлее), так и справа (где лоб намного темнее) от него. Но все отличия по яркости и цвету остались на нижнем НЧ-слое, поэтому условия работы для Healing Brush были просто тепличными.

Как и в предыдущем случае ретушь делалась на новом пустом слое с настройкой инструмента Sample: Current & Below. Перед ретушью надо переключить ВЧ-группу в режим наложения Normal (или Pass Trough) и отключить слой кривых понижающий контраст. Более контрастная картинка позволяет легче ориентироваться и работать более аккуратно. На картинке ниже зеленым цветом отмечены отредактированные на ВЧ-слое области. Далее приведен внешний вид слоя ретуши на прозрачном и белом фоне.







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

UPD: Для тех, кто в танке. Мне все равно сколько на ваш взгляд прыщиков я не дочистил. Это демонстрация методики. Кто хочет вместо обучения любоваться чужими результатами, может поискать себе другие статьи.

До:



После:



В самых критических случаях можно просто пересадить кожу с одного лица на другое. Мне однажды пришлось ретушировать фотографию девушки у которой большая прядь волос разметалась по всему лицу. Задача была простая: все волосы с лица убрать, сделать как живую. После вытирания волос лицо превратилось в латексную маску (практически чистая НЧ-составляющая). Выручила пара ее же фотографий с похожим ракурсом. С «доноров» взята ВЧ-составляющая и несколькими лоскутами пересажена на обрабатываемый снимок. При этой операции не обязательно использовать фото одной и той же модели (я взял эти фото просто потому что они были под рукой). Можно пересаживать кожу с любого лица на любое.

Разложение на большее количество составляющих.

Нет смысла соревноваться с шумодавами (а некоторые из них работают именно по такому принципу) и раскладывать картинку на очень большое количество составляющих. Но в некоторых случаях разложить картинку на три составляющие представляется разумным.

Разложение на три составляющих может пригодиться при борьбе с дефектами однородного размера. Например, с веснушками. На НЧ-слое для фильтра Gaussian Blur надо выставить минимальное значение параметра Radius при котором веснушки уже исчезают. На ВЧ-слое для фильтра High Pass надо выставить максимальное значение параметра Radius при котором веснушки еще не появляются.

Средне-частотный слой располагается посередине. Это копия исходного изображения к которой применены фильтр High Pass со значением радиуса как у Gaussian Blur НЧ-слоя, а потом Gaussian Blur со значением радиуса как у High Pass ВЧ-слоя. Потом к нему применяется корректирующий слой кривых понижающий контраст и всей группе присваивается режим наложения Linear Light. Финальная структура слоев изображена на рисунке внизу.



Таким образом веснушки остаются на среднем слое и легко ретушируются. В областях где они расположены очень кучно может потребоваться так же небольшая коррекция НЧ-слоя.

Упрощенный метод применения.

В его основе лежит вычитание и он подойдет только для сглаживания формы лица («убийства объема»).

К копии исходного изображения примените Gaussian Blur с таким значением Radius, чтобы с картинки ушла вся интересная для вас детализация. После этого примените High Pass с таким значением Radius, чтобы на картинке сохранились только те элементы, объем которых вы считаете излишним (мешки под глазами, скулы, глубокие морщины, складки кожи и т.п.). Инвертируйте результат (если вы работает со смарт-объектом, инвертируйте картинку внутри него) и поменяйте режим наложения на Linear Light (в этом случае даже нет необходимости применять понижающие контраст кривые). Замаскируйте весь слой (Add Layer Mask \ Hide All) и полупрозрачной мягкой кистью белым цветом прорисуйте по маске те участки, которые хотите сгладить.

Ориентиры и перспективные направления.

Я не люблю приводить конкретные настройки инструментов, так как каждая картинка требует своих значений. Но в качестве общего ориентира могу дать вам примерные значения Radius при которых на ВЧ-слой уходят соответствующие элементы (для грудного портрета 12-25 мегапикселей).

Radius 1-2 - мелкая фактура кожи
Radius 4-5 - полная фактура кожи за исключением глубоких морщин и подобных дефектов
Radius 10-12 - полная фактура кожи с крупными дефектами
Radius 25-30 - практически все локальные блики и тени (мешки под глазами, носогубные складки, второй и прочие подбородки и т.п.)

Кроме явных и неоднократно описанных идей (например, возможность изменить глобальный контраст, сохраняя локальный), я вижу еще несколько путей развития данного метода обработки. Я сам навряд ли смогу заняться этим в ближайшее время, если хотите, можете поэкспериментировать в этом направлении самостоятельно. Будет интересно узнать результаты

1. Макияж. Частотное разложение позволяет легко бороться с огрехами работы визажиста. Но крайний случай такого дефекта - это полное отсутствие макияжа. Можно попробовать наложить его, работая по НЧ-составляющей. Возможно, что придется как-то дорабатывать и ВЧ. Конкретные методы лучше разрабатывать имея в качестве образца фото с макияжем (желательно при том же свете, в том же ракурсе и с той же моделью).

2. Быстрое и мягкое приглушение фактуры кожи при сохранении остальных деталей без махания кисточкой по маске. Работая на ВЧ-слое использовать содержащие мало фактуры кожи, но достаточно много остальных деталей, красный (RGB) и черный (CMYK) каналы для смешивания и наложения внутри ВЧ-группы.

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

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

Ложка пиара в бочке знаний.

Профессиональные цветокорректоры и люди легко впадающие в брюзжание могут смело пропустить этот раздел.

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

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

Для коммерческого использования или перепечатки с внесением изменений необходимо согласование с автором. Связаться со мной можно по электронной почте zhur74@livejournal.com

© Андрей Журавлев (aka zhur74), апрель 2010 г.
Первая публикация http://zhur74.livejournal.com/998.html

Теория, Частотное разложение, gaussian blur, Ретушь, linear light, high pass, Практика

Previous post Next post
Up