Интеллигентная резкость 2.1

Nov 07, 2009 01:11



Друзья, хочу поделиться с вами методом улучшения экшна intelligent_sharpen Павла Косенко.

Экшн intelligent_sharpen 2.0 работает за счет повышения локального контраста. Повышением локального контраста достигается визуальный эффект повышения резкости и проявление деталей после ресайза.
Но беда в том что экшн повышает локальный контраст не только там где его недостаточно но и там где локальный контраст изначально в избытке. В результате работы экшна создаются два корректирующих слоя с масками. Сам Павел предлагает использовать рисование по маскам чтобы скорректировать те участки, где применение экшна нежелательно и его надо уменьшить. Этот вариант и хоть и действенный, но нам - ленивым, не подходит. Хочется чтобы все делалось само, не так ли? ;) Особенно это актуально при массовой обработке фотографий, при подготовке фотоотчетов и т.п..
Можно еще увеличивать прозрачность корректирующих слоев, но в этом случае мы уменьшаем влияние экшна как сильно контрастных так и в слабо контрастных областях в равной мере. А это тоже не подходит.

Что же, давайте для начала определимся и сформулируем то что нас конкретно не устраивает в работе экшна. На основании личного опыта применения этого экшна я для себя выявил следующие недостатки:

1. Появление лесенки на участках более менее прямых наклонных линий с выраженным локальным контрастом.
2. Излишнее повышение детализации на участках с сильной детализацией и так же выраженным локальным контрастом.

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

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

Немного поразмыслив я сформулировал для себя следующие нехитрые шаги воплощающие данное решение:

1. Найти участки исходного изображения с сильно выраженным локальным контрастом.
2. Сформировать на основе полученного шаблона маску локального контраста;
3. Применить полученную маску для каждого корректирующего слоя intelligent_sharpen 2.0. Что ж, начнем с теоретической проверки.

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

Итак немного теории
Для проверки данного алгоритма я использовал следующее тестовое изображение (Рисунок 1. Для примера оно увеличено в 4 раза.).



Рисунок 1.

Видим что в левой части локальный контраст стремится к нулю, и о субъективной резкости там остается только мечтать, а в правой части локальный контраст зашкаливает. В данном изображении контрастная область проходит по контуру круга. Можем считать что внутри круга и на градиенте локальный контраст отсутствует. Там действие экшна ограничивать не будем, может вылезет чего полезное кроме шума :) Идеальным решением будет если полученная маска пройдет по контуру круга и в левой части она станет максимально прозрачной (белой) а в правой части максимально непрозрачной (черной) в той мере как меняется локальный контраст по границе круга. Т.е. после наложения такой маски на корректирующие слои intelligent_sharpen 2.0 в левой части изображения действие экшна должно быть максимальным, в правой должно быть сведено к минимуму, желательно плавно - по мере проявления локального контраста на данном изображении. Для получения такой маски идеально подходит фильтр Find Edges. С принципом его работы рекомендую ознакомиться самостоятельно. Скажу лишь что он отображает линии вдоль контрастных границ, если совсем просто. Чем больше выражен локальный контраст тем ярче и толще получается линия. Чем локальный контраст меньше тем меньше влияние фильтра и там имеем нейтральный фон.



Рисунок 2.

На результате дейсвтия фильтра (Рисунок 2) видим, что в полученном изображении по правой границе круга проходит ярко выраженная линия, а вдоль левой она практически невидна. Т.е. это как раз то что нам надо. Применительно к маскам intelligent_sharpen 2.0 это означает что там где контраста на изображении изначально недостаточно экшн будет его беспрепятственно повышать. Там где локальный контраст изначально высок маска будет приглушать его увеличения, вплоть до полного запрета в особо выраженных случаях. Немного подкорректируем уровнями чтобы избавиться от ненужных артефактов фона и маска готова (Рисунок 3).



Рисунок 3.

Параметры уровней я получи опытным путем. В моем примере используются следующие настройки (Рисунок 4):


Рисунок 4.

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

Таким образом в "лабораторных условиях" удалось получить необходимую маску. Теперь на реальных примерах проверим как ее использование в экшне повлияет на окончательный результат.

От теории к практике
1. Ресайзим фотографию до 900px по большей стороне и применяем экшн intelligent_sharpen 2.0. В результате работы экшна получаем интеллигентно отшарпленную картинку с двумя корректирующими слоями.



2. Теперь на основе исходного изображения надо создать маску контрастности. Создаем копию исходного слоя (Ctrl + J). Обесцвечиваем его (Ctrl + Shift + U).


3. Применяем к слою фильтр Find Edges. В результате черным цветом обведены все границы с максимальным контрастом. Причем чем контраст сильнее тем более черным цветом обведена граница.


4. Теперь надо сделать маску немного аккуратнее. С помощью уровней делаем более мягкий переход между светлыми и темными частями маски. Теперь самым черным цветом выделены области с наиболее выраженным локальным контрастом. Остальные участки с локальным контрастом выделены полутенями. Таким образом получили маску распределения локального контраста исходного изображения. Можно установить движок уровней не в положение 5, а например в 7 или 9. На этом этапе возможны вариации.


5. Дальше остается только скопировать полученное изображение в маски корректирующих слоев, получившихся в результате работы intelligent_sharpen 2.0. На этом этапе можно отрегулировать прозрачность корректирующих слоев. Я доработанном экшне я их оставил без изменения. Но в большинстве случаев можно понижать делать корректирующие слои полностью не прозрачными. При этом качество работы экшна практически не ухудшается.
Теперь там где в исходном изображении локальный контраст - резкость была изначально достаточной корректирующие слои будут применяться в меру локального контраста на исходном изображении. Чем сильнее там был локальный контраст, тем меньше будет влияние intelligent_sharpen 2.0 на эту область. Чем меньше был локальный контраст исходного изображения, тем больше будет усиление локального контраста-резкости.


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



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

На следующих фотографиях можно увидеть исходное изображение и изображение после применения intelligent_sharpen 2.1.
Исходное изображение после ресайза (bicubic):


После применения intelligent_sharpen 2.1:


Усовершенствованный экшн intelligent_sharpen можно скачать тут: intelligent_sharpen 2.1

Результат
В результате доработки экшна, на мой взгляд, удалось добиться:
1. Повышения локального контраста там где это действительно необходимо;
2. Повышение общей резкости изображения с сохранением эффекта антиалиасинга.
3. Метод в целом позволяет вытаскивать детали из областей с минимальным локальным контрастом.

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

Мне будет интересно получить замечания и предложения по усовершенствованию этого метода. А так же отзывы и наблюдения результатов его применения.

Пользуйтесь, буду рад если кому кому то пригодится!
Previous post Next post
Up