Нет, частотная это не сплайн. суть заключается в следующем (это также исп. для передискретизации звука) - по отсчетам делаем прямое преобразование Фурье - делаем обратное преобразование Фурье, но пространственных отсчетов используем бОльше. Т. е. в аргумент синуса/косинуса подставляем отсчеты с меньшим шагом. - это для увеличения. Для уменьшения - срезаем высокие частоты (лучше сделать регуляризацию) и восстанавливаем с меньшим количеством отсчетов
по сути, задача сводится к вычисленю свертки. Результат - интенсивность пиксела. Ядро для свертки - синк, гаусс и т. д. Смещение центра зависит от смещения между пикселами. Напр увеличение в два раза: мы знаем интенсивности NxM пикселов, а требуется найти интенсивность 2Nx2M - отсюда ищем интенсивность между пикселами (интерполируем). т. к. искомые находятся между (по середине) - вершина функции в ядре будет по-середине.
по-поводу сплайнов - в Яндексе наберите ключевые слова "сплайн исходник алгоритм и т. п." в кратце суть: интерполировать можно с помощью функции n -ого порядка. Но при величине степени выше 5 - полином становится не устойчивым (можете поэкспериментировать в exel, с помощью линий тренда). Обычно исп. порядок 3, можно иногда 4 (если надо сильно подчеркнуть границы, но осторожно). и кусочками интерполируют соседние пикселы ("кусочно кубическая" интерполяция). Для того, чтобы небыло ломаных линий, вводят условия (первые и вторые производные должны быть равны) для сохранения гладкости кривой. В сплайнах есть минус - значение одного пиксела влияет на значение другого, даже если они расположены далеко друг от друга (из-за вводимых условий)
для начала лучше начать экспериментировать с кусочно-линейной интерполяцией. Советы для облегчения жизни: иногда трудно сообразить, как работать с 2D координатами. Поэтому рекомендую картинку разбить на строки. Каждую строку обработать (изменть масштаб) и эту вытянутую/сжатую картинку сохранить в новом месте. Затем полученную картинку разбить на столбцы и обработать по столбчам. Иногда такая реализация работает быстрее.
|