Подтвердить что ты не робот

Какова идея масштабирования изображения с помощью lanczos?

Мне интересны алгоритмы масштабирования изображений и реализованы билинейные и бикубические методы. Тем не менее, я слышал о lanczos и других более сложных методах даже для более высокого качества масштабирования изображения, и мне очень любопытно, как они работают.

Может ли кто-нибудь объяснить основную идею масштабирования изображения с помощью lanczos (как масштабирования, так и уменьшения масштаба) и почему это приводит к повышению качества?

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

EDIT: Я думаю, что я действительно хочу знать, это концепция и теория, использующая фильтр свертки для интерполяции.

(Примечание: я уже прочитал статью wikipedia о повторной выборке lanczos, но у меня не было почти достаточно деталей для меня)

Спасибо большое!

4b9b3361

Ответ 1

Выбор конкретного фильтра для обработки изображений - это черное искусство, потому что главный критерий оценки результата субъективен: в компьютерной графике окончательный вопрос почти всегда: "это хорошо?". Есть много хороших фильтров, и выбор между лучшими часто сводится к решению суда.

Тем не менее, я продолжу какую-то теорию...


Поскольку вы знакомы с анализом Фурье для обработки сигналов, вам не нужно знать гораздо больше, чтобы применить его к обработке изображений - все фильтры, представляющие непосредственный интерес, являются "разделяемыми", что в основном означает, что вы можете применять их независимо в направлениях х и у. Это уменьшает проблему повторной выборки (2-D) изображения на проблему передискретизации (1-D) сигнала. Вместо функции времени (t) ваш сигнал является функцией одной из осей координат (скажем, x); все остальное точно то же самое.

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

Итак. Пока вы отфильтровываете нежелательные частоты от оригинала, вы хотите сохранить как можно больше исходного сигнала. Кроме того, вы не хотите искажать сигнал, который вы сохраняете. Наконец, вы хотите как можно больше потушить нежелательные частоты. Теоретически это означает, что хороший фильтр должен быть "коробочной" функцией в частотном пространстве: с нулевым откликом для частот выше отсечки, единичным ответом для частот ниже отсечки и ступенчатой ​​функцией между ними. И, теоретически, эта реакция достижима: как вы знаете, прямой фильтр sinc даст вам именно это.


Есть две проблемы с этим. Во-первых, прямой фильтр sinc безграничен и не падает очень быстро; это означает, что выполнение простой свертки будет очень медленным. Вместо прямой свертки, быстрее использовать БПФ и выполнять фильтрацию в частотном пространстве...

Однако, если вы действительно используете прямой фильтр sinc, проблема в том, что на самом деле это не очень хорошо! Как говорится в соответствующем вопросе, в перцептивном плане есть звенящие артефакты, и практически нет абсолютно удовлетворительного способа справиться с отрицательными значениями, которые возникают из-за "недогрузки".

Наконец, тогда: один из способов решения проблемы - начать с фильтра sinc (для его хороших теоретических свойств) и настроить его, пока у вас не будет чего-то, что также решит ваши другие проблемы. В частности, это даст вам что-то вроде фильтра Lanczos:

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...]
  • sinc (pi x) определяет общую форму частотного отклика (при увеличении a частотная характеристика все больше похожа на функцию окна)
  • поле (| x | < a) дает ему конечный носитель, поэтому вы можете использовать прямую свертку
  • sinc (pi x/a) сглаживает края ящика и (следовательно, "эквивалентно?) значительно улучшает отказ от нежелательных высоких частот
  • последние два фактора ( "окно" ) также смягчают звон; они значительно улучшают как перцептуальный артефакт, так и практическую частоту "недомогания" - хотя без полного их устранения.

Обратите внимание, что в этом нет никакой магии. Существует большое количество доступных окон, которые работают примерно так же. Кроме того, при a = 1 и 2 частотный отклик не похож на функцию шага. Однако я надеюсь, что это ответит на ваш вопрос "почему именно", и дает вам некоторое представление о частотных ответах и ​​т.д.