Есть старый анекдот, про преподавателя, который жалуется коллегам: «Ну какие же эти студенты непонятливые: тему им раз объяснил, два, три — уже сам понимать начал, а они ни в какую!» Справедливость этого наблюдения у меня сомнений не вызывает. Не секрет, что многие преподаватели начинают понимать свой предмет лишь через пару лет педагогической практики, а некоторые вещи осознают лишь благодаря стараниям одарённых подопечных.
Недавно, во время объяснения особенностей реализации фильтров антиалиасинга (сглаживания) в современных трёхмерных пакетах автор, как обычно, вещал, что повышение резкости на стадии собственно визуализации опасно невозможностью своей отмены. И кто-то из студентов просто спросил: «А что, совсем нельзя убрать резкость с изображения?» Не в бровь, а в глаз! В моей памяти пронеслись вереницы изображений, запоротых страшными эффектами гало, цветными шумами и зернистостью. Любопытствующий быстро согласился с тезисом, узнав, что в Adobe Photoshop нет фильтра, убирающего чрезмерную резкость. Но душевный покой был нарушен: понятно, почему нельзя повысить резкость размытого изображения, — высокочастотные детали просто утрачиваются. Но ведь при повышении резкости детали не только не пропадают — они усиливаются; выходит, способ снять резкость должен существовать!
Для начала немного теории. В компьютерной графике есть два способа повысить резкость: фильтры на свёрточных масках (типа Sharpen, Sharpen More в Photoshop) и фильтр нерезкого маскирования (Unsharp Mask). Результат их работы — увеличение контраста на границах объектов, что визуально воспринимается как повышение резкости. Наиболее гибок, а потому и наиболее популярен фильтр нерезкого маскирования.
Вкратце принцип его работы таков: из исходного изображения A вычитается его расфокусированная (размытая) версия B (собственно нерезкая маска). Разность изображений (A — B) в окрестностях контрастных границ имеет светлые очертания (положительные значения) со стороны светлых областей, тёмные (отрицательные значения) — со стороны тёмных. Если теперь к исходному изображению A добавить полученную разность, то полученное изображение A + (A — B) будет иметь повышенную резкость, причём ширина зоны повышения контраста на границах равна радиусу размытия нерезкой маски B (параметр фильтра Radius). Для большего удобства обычно добавляют некоторый коэффициент k, определяющий степень действия фильтра (параметр Amount), в результате чего формула фильтра: A + k (A — B).
Если учесть, что разность изображений (A — B) может быть также получена фильтром HighPass, то мы можем также выполнить аналогичное повышение резкости вручную, просто наложив результат работы HighPass на оригинал в режиме Overlay.
При использовании слишком больших радиусов (параметр Radius) по границам объекта появляется гало-эффект (halo effect), а из-за высоких значений коэффициента Amount сильно обостряются шумы.
Выходит, для нейтрализации нежелательного эффекта резкости нам нужно подавить именно дельту k (A — B), которая является, по сути, высокочастотной составляющей изображения. Мы возьмём от нашего повреждённого изображения высокочастотную компоненту и вычтем её из оригинала с помощью режима наложения Linear Light. Коэффициент подавления отрегулируем, уменьшая контраст накладываемой картинки.
А теперь сама процедура:
Делаем дубликат изображения и применяем к нему фильтр Filter•Other •High Pass. Величина радиуса HighPass должна быть примерно равна или чуть-чуть превышать радиус фильтрации, который применялся для повышения резкости в оригинале. Придётся поэкспериментировать — это очень важный параметр.
Инвертируем изображение командой Image•Adjustments•Invert, чтобы использовать слой для вычитания. Назначаем ему режим наложения Linear Light. Удобство режима — в его линейном действии.
Применяем к фильтрованному слою команду Image•Adjustments•Brightness/Contrast. Да-да, тот самый всеми ругаемый инструмент! Только он позволяет одним ползунком управлять контрастом.
Если вы работаете в Adobe Photoshop CS3, то нужно в диалоговом окне включить галку Legacy (работа как в предыдущих версиях). А теперь тянем ползунок контраста Contrast влево до желаемого эффекта. Как правило, до -50 (полная нейтрализация), а лучше — ещё дальше, где-то до -65, чтобы сохранить детали.
Взгляните на результат работы алгоритма на рисунке, теперь уж точно гало-эффекты не страшны.
Увы, вывести точную формулу нейтрализации резкости не удаётся, так что у вас — широкое пространство для манёвров.