Как избежать артефактов интерполяции при увеличении карты высот?

9

Я использую алгоритм бикубической интерполяции для масштабирования карты высот, и я замечаю некоторые артефакты вокруг границ пикселей. Однако эти артефакты не появляются, когда я использую простую кубическую интерполяцию (сплайн).

Может быть потому, что бикубическая интерполяция не гарантирует непрерывность второй производной, в отличие от кубического сплайна? Если да, то есть ли известные алгоритмы, которые имеют непрерывную вторую производную? Иначе есть ли способ справиться с этими артефактами?

Линейная интерполяция (показывает границы пикселей): введите описание изображения здесь

Бикубическая интерполяция (артефакты, видимые на границах пикселей): введите описание изображения здесь

Кубическая интерполяция (без заметных артефактов): введите описание изображения здесь

Я попробовал несколько бикубических формул, которые дали мне те же результаты. Вот некоторые примеры:

колода
источник
для меня бикубическая версия - лучшая, она держит высокие частоты и выглядит довольно хорошо. Вы говорите, что есть артефакты, но они незначительны и не стоят той ужасной потери, которую дают вам сплайны. хотя мое мнение
v.oddou
@ v.oddou Я думаю, что чувство высокой частоты, которое вы описываете, отчасти связано с самими артефактами. Это не очень хорошо видно на этом изображении, но местность действительно квадратная с некоторых углов, и в зависимости от положения солнца. Это даже более очевидно, когда отображаются нормали или уклоны. При этом верно, что b-сплайны сильно сглаживают рельеф (нет более острых пиков). Я все еще ищу лучшую альтернативу.
колода

Ответы:

4

В статье Кена Перлина об улучшении шума он упоминает очень похожую проблему. Кубика, использованная в оригинальной шумовой статье, создает разрывы на целочисленных границах из-за свойств ее производных. В своем пересмотренном документе он предлагает метод 6t^5 - 15t^4 + 10t^3решения этих проблем.


источник
Это звучит интересно, даже если я не уверен, как использовать это в моем коде. Я буду исследовать это.
колода
3

Я сделал несколько поисков и обнаружил, что B-Spline имеет непрерывный C2. Я реализовал это, и он выглядит хорошо, даже если это приближение, а не интерполяция (это не проходит через образцы).

B-сплайн (приближение): введите описание изображения здесь

колода
источник