Размытие изображения с помощью фильтра «Размытие по Гауссу» широко применяется в самых разных задачах.
Но иногда хочется немного большего разнообразия, чем один фильтр на все случаи жизни, в котором можно регулировать только один параметр – его размер.
В этой статье мы рассмотрим несколько других реализаций размытия.
Введение
Эффект «Размытие по Гауссу» представляет собой линейную операцию и математически представляет собой свертку изображения с матрицей фильтра.В этом случае каждый пиксель изображения заменяется суммой соседних, взятых с определенными весовыми коэффициентами.
Фильтр называется гауссовским, потому что он построен на основе функции, известной как гауссова,
:
двумерная версия которого получается вращением ее вокруг оси ординат,
:
Здесь для каждой пары координат
Расстояние до центра рассчитывается по формуле
, который передается в качестве аргумента функции Гаусса - и, как легко видеть,
уменьшено до
.
Матрица, построенная на сегменте
и при некотором уровне выборки это будет выглядеть так:
Или, если считать значения элементов матрицы уровнем яркости, вот так:
В терминах обработки сигналов это называется импульсной характеристикой, поскольку именно так будет выглядеть результат свертки данного фильтра с одним импульсом (в данном случае пикселем).
Первоначально гауссиан определяется на бесконечном интервале.
Но в связи с тем, что он довольно быстро затухает, из расчетов можно исключить значения, близкие к нулю – так как они все равно не повлияют на результат. В реальных приложениях также необходима нормализация по значению, чтобы после свертки яркость изображения не менялась; а в случае размытого изображения, в котором каждый пиксель имеет одинаковый цвет, само изображение не должно меняться.
Для удобства часто используют нормировку по координатам, вводя дополнительный параметр
(читается как «сигма») — рассматривать аргумент в диапазоне
, А
определяет степень сжатия гауссиана:
Нормализующий делитель
здесь получено аналитически через определенный интеграл на бесконечности:
Ввиду того, что равенство выполняется
, размытие по Гауссу можно реализовать последовательно сначала по строкам, а затем по столбцам — что позволяет довольно сильно сэкономить на вычислениях.
В этом случае необходимо использовать формулу с нормировкой для одномерного случая –
Начинать
Для произвольного фильтра нам нужно сначала определить его собственную функцию затухания в одной переменной, из которого функция двух переменных получается вращением путем замены
на
, Где
И
это координаты матричного элемента в диапазоне
, и который затем используется для заполнения элементов матрицы.
Будем рассматривать нормализацию не аналитически, а как прямое суммирование всех элементов матрицы – это и проще, и точнее – так как после дискретизации функция оказывается «прореженной», и значение нормализации будет зависеть от уровень дискретности.
Если элементы матрицы нумеруются с нуля, координата
или
рассчитывается по формуле
Где
— порядковый номер элемента в строке или столбце, а
— общее количество элементов.
Например, для матрицы 5 на 5 это будет выглядеть так:
Или, если исключить граничные значения, которые все еще равны нулю, то координаты будут рассчитываться по формуле
и матрица соответственно примет вид
После того, как элементы матрицы были вычислены по формуле, необходимо вычислить их сумму и разделить на нее матрицу.
Например, если у нас есть матрица
то сумма всех его элементов будет равна 40 и после нормализации примет вид
и сумма всех его элементов становится 1.
Линейное затухание
Для начала возьмем самую простую функцию — строку:Кусочно-непрерывное определение здесь необходимо для того, чтобы функция гарантированно обращалась к нулю и не возникало артефактов в углах матрицы при вращении.
Кроме того, поскольку при вращении используется корень из суммы квадратов координат, который всегда положителен, то достаточно определить функцию только в положительной части значений.
В результате мы получаем:
Мягкий линейный затухание
Резкий переход от наклонной линии к нулевой функции может вызвать противоречие с чувством красоты.
Устранить ее нам поможет функция
в которой
определяет «жесткость» стыковки,
.
Например,
мы получаем
и сам фильтр будет выглядеть так
Гиперболическое демпфирование
Фильтр можно сделать более «резким» и плавнее переходить к нулю, взяв в качестве генератора другую функцию — например, гиперболу, и обеспечив плавный переход к нулю путем суммирования с параболой.
После всех вычислений и упрощений получаем формулу
в котором параметр
определяет характер затухания:
а сам фильтр будет выглядеть так (для
) Как
Имитировать эффект боке
Можно пойти другим путем – сделать верх фильтра не острым, а тупым.
Самый простой способ реализовать это — определить функцию демпфирования как константу:
Но в этом случае мы получаем сильную пикселизацию, которая контрастирует с ощущением красоты.
Парабола высших порядков поможет нам сделать ее более гладкой по краям, из чего, сместив ее по оси ординат и возведя в квадрат, получим
Изменение параметра
, вы можете получить широкий спектр параметров фильтра:
А немного видоизменив функцию затухания можно сделать кольца по краям фильтра более выраженными, например так:
Вот параметр
определяет высоту центра, а
— резкость перехода к краям.
Для
мы получаем
и для
Вариации гауссова
Вы также можете изменить саму функцию Гаусса.
Самый очевидный способ сделать это — параметризовать показатель степени — мы его сейчас рассматривать не будем, а возьмем более интересный вариант:
В связи с тем, что когда
знаменатель стремящийся к единице
стремится к нулю, дробь
стремится к минус бесконечности, да и сама экспонента также стремится к нулю.
Таким образом, деление на
позволяет сжать область определения функции из
до
.
В то же время с
из-за деления на ноль (
) значение функции не определено, но имеет два предела — предел с одной стороны (изнутри) равен нулю, а с другой стороны равен бесконечности:
Поскольку граничные значения не входят в интервал, вполне достаточно нуля в пределе только с одной стороны.
Интересно, что это свойство распространяется на все производные этой функции, что обеспечивает идеальную стыковку с нулем.
Параметр
определяет сходство с гауссовой - чем оно больше, тем сильнее сходство - за счет того, что чем больше и линейнее участок
находиться в центре функции.
Можно было бы предположить, что за счет этого в пределе можно получить исходную гауссиану – но, к сожалению, нет – функции все равно разные.
Теперь вы можете увидеть, что произошло:
Вариации формы
Изменив функцию перехода от двух координат к одной, вы можете получить и другие формы, а не только диск.
Например:
Перейдя к комплексным числам, можно строить более сложные фигуры:
В этом случае нужно следить за тем, чтобы при преобразовании координат вы не выходили за интервал
— или наоборот, определить функцию демпфирования для отрицательных значений аргумента.
Некоторые конкретные примеры
Статья была бы не полной без практического тестирования на конкретных изображениях.
Поскольку наша работа не является научной, изображение Лена Не возьмем, а возьмем что-нибудь мягкое и пушистое:
Гауссовский
Гиперболическое демпфирование
Крест
Кольцо
Одностороннее затухание
Те же фильтры, но для текста:
Теги: #математика #Обработка изображений #Wolfram Mathematica #blur #blur #размытие по Гауссу
-
Основы Брандмауэра И Портов
19 Oct, 24 -
Очень Важно Иметь Беспроводные Сети
19 Oct, 24 -
Структурирование Аспектов 2
19 Oct, 24 -
Идея Для Конкурса. Критиковать.
19 Oct, 24