Выбор конкретного фильтра для обработки изображений - это нечто черное, потому что основной критерий оценки результата субъективен: в компьютерной графике главный вопрос почти всегда: «выглядит ли он хорошо?». Есть много хороших фильтров, и выбор между лучшими часто сводится к суждению.
Тем не менее, я продолжу некоторые теории ...
Поскольку вы знакомы с анализом Фурье для обработки сигналов, вам на самом деле не нужно знать гораздо больше, чтобы применить его к обработке изображений - все фильтры, представляющие непосредственный интерес, являются «отделимыми», что в основном означает, что вы можете применять их независимо в направлениях х и у. Это уменьшает проблему передискретизации (2-D) изображения к проблеме передискретизации (1-D) сигнала. Вместо функции времени (t) ваш сигнал является функцией одной из осей координат (скажем, x); все остальное точно так же.
В конечном счете, причина, по которой вам вообще необходимо использовать фильтр, состоит в том, чтобы избежать наложения псевдонимов: если вы уменьшаете разрешение, вам нужно отфильтровать высокочастотные исходные данные, которые не поддерживает новое более низкое разрешение, или вместо этого будут добавлены несвязанные частоты.
Итак. Пока вы отфильтровываете нежелательные частоты от оригинала, вы хотите сохранить как можно большую часть исходного сигнала. Кроме того, вы не хотите искажать сохраняемый сигнал. Наконец, вы хотите максимально полно погасить нежелательные частоты. Это означает - теоретически - что хороший фильтр должен быть «коробочной» функцией в частотном пространстве: с нулевым откликом для частот выше среза, единичным откликом для частот ниже среза и ступенчатой функцией между ними. И, теоретически, этот ответ достижим: как вы, возможно, знаете, прямой фильтр sinc даст вам именно это.
Есть две проблемы с этим. Во-первых, прямой sinc-фильтр не ограничен и не очень быстро падает; это означает, что выполнение простой свертки будет очень медленным. Вместо прямой свертки быстрее использовать БПФ и выполнять фильтрацию в частотном пространстве ...
Однако, если вы действительно используете прямой фильтр sinc, проблема в том, что он на самом деле выглядит не очень хорошо! Как говорится в соответствующем вопросе, перцептивно присутствуют звенящие артефакты, и практически нет полностью удовлетворительного способа справиться с отрицательными значениями, возникающими в результате «недолета».
Наконец, тогда: один из способов решения этой проблемы - начать с фильтра sinc (из-за его хороших теоретических свойств) и настраивать его до тех пор, пока у вас не появится что-то, что также решит ваши другие проблемы. В частности, это даст вам что-то вроде фильтра Ланцоша:
Lanczos filter: L(x) = sinc(pi x) sinc(pi x/a) box(|x|<a)
frequency response: F[L(x)](f) = box(|f|<1/2) * box(|f|<1/2a) * sinc(2 pi f a)
[note that "*" here is convolution, not multiplication]
[also, I am ignoring normalization completely...]
Обратите внимание, что в этом нет магии. Доступно большое разнообразие окон, которые работают примерно так же. Кроме того, для a = 1 и 2 частотная характеристика не очень похожа на ступенчатую функцию. Тем не менее, я надеюсь, что это ответит на ваш вопрос «почему sinc» и даст вам некоторое представление о частотных характеристиках и т. Д.