Русская Википедия:Фильтр Ланцоша
Фильтр Ла́нцоша — способ математической обработки рядов данных. Применяется либо для интерполяции функции между заданными точками, либо в качестве фильтра нижних частот.
Наиболее часто применяется в обработке оцифрованных изображений, для изменения их разрешения — (передискретизации).
Назван в честь предложившего этот метод обработки данных венгерского учёного Корнелия Ланцоша (Шаблон:Lang-hu).
Идея фильтра основана на применении нормированной [[sinc|функция Шаблон:Math]]<math>= \frac{\sin \pi x}{\pi x}</math> с растянутым по оси <math>x</math> главным лепестком и равной нулю вне заданного параметром ширины <math>a</math> интервала.
Принцип обработки данных фильтром Ланцоша
Метод связан с оконной функцией Ланцоша, <math>L_w(x),</math> представляющей собой главный лепесток функции Шаблон:Math, вне этого лепестка оконная функция равна нулю:
- <math>L_w(x) = \mathrm{sinc}({x}/{a}).</math>
Отфильтрованная функция <math>S(x)</math> является дискретной сверткой исходной дискретной функции заданной упорядоченным массивом выборок <math>s_i</math> с функцией называемой ядром Ланцоша[1]:
- <math>S(x) = \sum_{i=\lfloor x \rfloor - a + 1}^{\lfloor x \rfloor + a} s_{i} L(x - i),</math>
здесь символом <math>\lfloor x \rfloor</math> обозначена целая часть числа <math>x.</math>
Ядро Ланцоша представляет собой произведение функции Шаблон:Math на оконную функцию Ланцоша, по определению равную нулю вне заданного параметром носителя функции <math>a</math>:
- <math> L \left( x \right) = \begin{cases} \operatorname{sinc} \left( x \right) \operatorname{sinc} \left( \frac x a \right), & \text{при } -a < x < a, \\ 0, & \text{иначе} \end{cases}, </math>
или:
- <math>L(x) = \begin{cases}
1 & \text{если}\ x = 0, \\ \dfrac{a \sin(\pi x) \sin(\pi x / a)}{\pi^2 x^2} & \text{если}\ -a \leq x < a \ \text{и}\ x \neq 0, \\ 0 & \text{иначе}.
\end{cases}</math>
Применение оконной функции обеспечивает меньший «звон» на резких переходах яркости при обработке изображений чем усеченная функция sinc.
Применение фильтра Ланцоша при обработке изображений
При обработке изображений, так как они являются двумерными функциями для свертки применяется двумерное ядро Ланцоша:
- <math>L(x, y) = L(x)L(y).</math>
Применение этого фильтра позволяет добиться высокой чёткости изображения, но при обработке возможно появление нежелательных артефактов типа Шаблон:Iw. Это искажение заключается в появлении вокруг контрастных переходов яркости узких контрастных ореолов, что позволяет сохранить резкость контрастных линий при сохранении достаточной гладкости тональных переходов.
Возникновение ореолов обусловлено тем, что при значении параметра <math>a > 1</math> ядро Ланцоша принимает отрицательные значения при некоторых значениях аргумента. Поэтому обработанный сигнал может принимать даже отрицательные значения при положительных значениях выборок.
При практической обработке изображений удовлетворительное качество достигается при значении параметра <math>a</math> 2 или 3.
Примечания
Ссылки
- Anti-Grain Geometry — Demo Examples image_filters.cpp — пример реализации различных фильтров на C++Шаблон:Ref-en
- imageresampler класс C++ для фильтрации изображений, находящийся в общественном достоянииШаблон:Ref-en
См. также
- Интерполяция методом ближайшего соседа
- Линейная интерполяция
- Билинейная интерполяция
- Бикубическая интерполяция
- Кубический сплайн