avlasov (avlasov) wrote,
avlasov
avlasov

Categories:

Частотная ретушь кожи - мини-учебнег, ч8

Многослойная декомпозиция, пример с Portraiture

Рассмотрим теперь практический пример многослойной частотной ретуши, причем в качестве low-pass фильтра выберем Portraiture. Заодно попытаемся реабилитировать этот плагин. Ибо при прямолинейном применении, Portraiture дает сомнительный "мыльный" результат, за что заслужил дурную славу наподобие прямолинейно применяемого gaussian blur'а. Но ведь blur - базовый фильтр в частотных методиках.
Попробуем выработать методику грамотного применения Portraiture в контексте частотного редактирования.

Как я уже писал, проблемя блёра в том, что он вырезает высокие частоты, как и положено фильтру низких частот. Т.е в случае ретуши кожи, мы лишаемся текстуры, и получем неестественное изображение. Portraiture действует гуманнее, но все равно текстуру существенно ослабляет.
Отмечу, что я вообще не специалист по Portraiture так что вполне допускаю, что можно научиться ловко с ним обращаться, только надо подробно изучить его настройки.
Но на самом деле, можно вполне усмирить Portraiture и в варианте с примитивными настройками. Более того, я лично отключаю Skin Tone Mask и Enhancements, а в DetailSmoothing все движки кроме threshold вывожу вправо (т.е. выставляю значение +20). В таком варианте Portraiture работает просто как фильтр низких частот, только он весьма хорошо сохраняет переходы. Чем напоминает Surface Blur с большим threshold. Мне неизвестны подробности деталей алгортима Portraiture, но судя по всему, в DetailSmoothing применяется разновидность билатерального фильтра, щадяще относящегося к границам. Также можно отметить, что в отличие от Surface Blur, Portraiture работает весьма шустро. К сожалению Surface Blur в ФШ реализован не очень эффективно.

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

Ну и, так же как и в случае с blur, решить проблему "мыльности" можно наложением сверху текстурного слоя
(либо шума). К примеру, можно использовать такую методику, которая заодно является примером многослойной частотной ретуши:
1 отрезаем текстуру кожи тем или иным ВЧ-фильтром с маленьким радиусом, так чтобы текстура почти не содержала дефектов (мне лично в данном случае нравится median'а, хотя если изображение небольшое, то лучше гаусс ибо можно выбрать радиус меньше единицы). Таким образом, это будет слой, который мы почти не будем редактировать и который предохраняет нас от появления blur'а
2 далее, получаем соответствующий выбранному радиусу НЧ слой, т.е. производим частотное разложение на два слоя
3 вот тут вступает в дело Portraiture: применяем ее к нижнему слою и, подбирая параметр threshold (и только его), добиваемся устранения части дефектов. Одновременно следим, чтобы не размыть слишком сильно контуры и тональные переходы.
4 вычисляем разницу между исходным НЧ слоем и слоем, обработанным Portraiture. Таким образом мы получаем уже три слоя. Верхний - ВЧ, нижний - НЧ+Portraiture, ну и СЧ - разница между НЧ+ВЧ.
5 Повторяем процедуру с самым нижним слоем. Добиваемся устранения очередной порции дефектов, внимательно относясь к контурам и тональным переход. Теперь имеем уже два промежуточных слоя.
6 Можно повторить этот шаг несколько раз, но я делаю еще один проход, устраняя очередную порцию дефектов. Если мне не удалось устранить дефекты полностью с помощью Portraiture на этом шаге, то я устраняю их селективным Gauss Blur.
7 Таким образом получается три промежуточных средних слоя, а также верхний слой, с почти что идеальной текстурой, и нижний, с очень хорошей основой: Portraiture хорошо справляется с этой задачей.
8 Далее можно смешать три нижних слоя (два СЧ и один НЧ) через маски, которые могут быть весьма грубыми - просто нужно потыкать большой 100% мягкой кистью на области с дефектами, но так чтобы не задеть контуры и тональные переходы.
9 В результате, остается только отредактивовать два верхних текстурных слоя, обычно с помощью healing brush, чтобы не просвечивал блёр. Хотя второй сверху слой можно осторожно смешивать с нижними с помощью маски, используя маленькие мягкие кисточки с небольшой непрозрачностью. Если кисть близка к размеру дефекта, и применяется только по маленьким дефектам, то блёр не вылезает. Фактически, это простая форма dodge&burn.

Результат такой методики получается очень хорошим, а если не учитывать ретушь текстурных слоев - то и очень-очень быстрым. Конечно, ретушь текстурных слоев, особенно большого разрешения, требует много времени, тут ничего не поделаешь. Но Portraiture позволяет почти полностью избавиться от рутинной работы при получении хорошей основы, ибо задача состоит в подборе параметров и изготовлении пары весьма грубых масок.

Итак, картинке (исходная картинка не моя, исходник взят отсюда)

Исходник. В отличие от предыдущих "быстрых" методов, в данном случае healing brush я не применял, ибо здесь многослойное редактирование, и нет нужды идти на компромисы по поводу радиусов, так что устранять крупные дефекты перед разложением особой нужды нет.
source

Вот картинка после легкого блёра, радиус чуть меньше пикселя. Выполняется с целью отрезать самую тонкую текстуру кожи, перед тем как скормить Portraiture. Заодно вычисляем на основе ее верхний ВЧ слой с этой самой тонкой текстурой (здесь не показан).
blur

Первый проход Портретурой. Сглажена оставшаяся текстура кожи (довольно грубая - почему и будет редактироваться отдельно от тонкой текстуры). Но оставлены крупные дефекты, не относящиеся собственно к текстуре кожи (прыщеги и проч).
portraiture1

Второй проход Портретурой. Почти все дефекты устранены.
portraiture2

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

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

Итак двигаемся в порядке обратному "разложению", снизу вверх.

Смешиваем маской два нижних слоя (второй и третий проходы Портретурой). Так как дефектов немного и они изолированны, то и маска примитивная и грубая.
portraiture2_maskmask_portraiture2

Смешиваем первый проход Портретуры с низлежащими слоями. Дефектов больше, потому и в маске больше чорного, но она также грубая и довольно примитивная (т.е. быстрая в изготовлении).
portraiture1_maskmask_portraiture1

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

Подмешиваем слой с грубой текстурой кожи, полученный блёром с малым радиусом. Он второй сверху (самый верхний в данном случае - ВЧ слой с тонкой текстурой кожи). Хотя обычно на текстурных слоях нежелательно работать через маску - может начать просвечивать блёр с нижних слоев - но в данном случае, у нас сверху есть защита в виде тонокого текстурного слоя, плюс мы будем работать маленькими кисточками, либо использовать низкую opacity/flow. Вобщем маска требует уже существенно больше усилий, нежели предыдущие две. В то же время видно, что она все-таки достаточно примитивная, т.е. труд не титанический.
blur_maskmask_blur

Наконец, накладываем сверху верхний текстурный слой и получаем конечный результат. Самую верхнюю текстуру я не редактировал, хотя можно пройтись по ней слегка healing brush'ем. Справа исходник для сравнения.
finalsource

Конечно, тут еще есть над чем поработать, но не будем страдать перфекционизмом - это займет уже существенно больше времени. И это уже будет скорее healing brush и dodge&burn. Впрочем, можно пройтись еще раз по маскам и подправить то что не нравится - в этом и есть мощь и гибкость частотного, а заодно и недеструктивного, редактирования.

Проведем лучше маленький анализ самого подхода.
1 мы разложили изображение на пять частотных слоев:
- два ВЧ слоя с текстурой
- два СЧ слоя с дефектами
- один НЧ слой с основой
2 за счет пяти слоев удалось весьма точно подобрать параметры срезов и изолировать большинство проблем, требующих ретуши, в отдельных слоях: неровности текстуры, мелкие прыщеги и достаточно крупные неровности кожи.
3 при таком разложении и удачном подборе параметров, можно применять простые и быстрые приемы редактирования - смешивание через маску. Это очень удобно ибо редактура недеструктивная - можно вернуть изменения назад или подправить еще. Поскольку дефекты изолированы весьма точно, то и маски просты в изготовлении, не требуют титанического труда, и позволяют устранить проблемы, не затрагивая тональных переходов. Разве что совсем чуть-чуть - но обычно это решается на последующей стадии dodge&burn.
4 средние слои редактировались очень быстро. Слои с текстурой конечно редактировать сложнее - надо действовать осторожно. Тем не менее нижний текстурный слой допускает работу через маску либо прозрачными кистями, либо очень маленькими. Самый верхний слой лучше конечно обрабатывать healing brush.
5 Портретура сыграла важную роль, ибо бережно относится к границам, так что можно было быстро подобрать параметры, да и визуально результат сильно лучше gaussian blur'а, но походит чем-то на surface blur.
6 по соотношению затраты/качество - очень хороший результат. Улучшать дальше можно, но это уже будет фактически попиксельная работа. Из того, что можно сделать быстро (т.е. кистями с достаточно большим радиусом, а не попиксельной обработкой) - это очень хороший результат. Я, по крайней мере, не в курсе методик/плагинов/тулзов, которые бы позволяли сделать что-то принципиально лучше за то же время (различия в кривизне рук оператора мы в расчет не берем, ибо речь идет о методики, которая должна работать в случае обычных людей, а не гениев).
7 ну и самое главное - красивая текстура кожи сохранена :) можно даже ее чутка усилить поднятием резкости (например продублировать самый верхний в режими Overlay), картинка от этого не страдает, даже наоборот - а это признак хорошей текстуры
8 все это можно делать без планшета - т.к. маски довольно грубые, то мышки вполне достаточно. Для попиксельного редактирования конечно лучше использовать планшет (а точнее даже необходимо).

UPD Некоторые доп замечания и тайминги.
У меня на тестовом прогоне ушло в районе 6 минут (с экшенами):
1 подбор параметров - в районе 2 мин
2 разложение на слои - 1 мин с помощью экшенов
3 доработка нижнего слоя - 40 сек
4 две маски - примерно 2 мин 30 сек
Время ориентировочное ибо зависит от опыта, картинки и проч.
Но по опыту изготовления нескольких вариантов одной картинки и сравнения их:
1 параметры Портретуры можно подбирать достаточно грубо, сравнение пары вариантов с одинаковыми масками не выявило визуальных различий
2 маски для нижних слоев даже лучше делать грубыми - и быстрее и результат "глаже"
Subscribe

  • StatMod и ML

    Рассмотрим, чем полезен StatMod в плане инженерии ML и почему "преподаваемый" ML тут проигрывает. Под "преподаваемым" ML я имею в…

  • Инженерность в DataScience

    Когда я пишу что инженерность в ML слабо развита, это не значит что ее нет вообще. Точнее будет сказать, что в DataScience (некая объемлющая…

  • Основные вопросы в инженерии МЛ

    По своему опыту я выделяю следующие основные вопросы/проблемы, которые возникают при решении практических МЛ задач. Какую задачу мы решаем? Ту ли…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 6 comments