Я использую алгоритм бикубической интерполяции для масштабирования карты высот, и я замечаю некоторые артефакты вокруг границ пикселей. Однако эти артефакты не появляются, когда я использую простую кубическую интерполяцию (сплайн).
Может быть потому, что бикубическая интерполяция не гарантирует непрерывность второй производной, в отличие от кубического сплайна? Если да, то есть ли известные алгоритмы, которые имеют непрерывную вторую производную? Иначе есть ли способ справиться с этими артефактами?
Линейная интерполяция (показывает границы пикселей):
Бикубическая интерполяция (артефакты, видимые на границах пикселей):
Кубическая интерполяция (без заметных артефактов):
Я попробовал несколько бикубических формул, которые дали мне те же результаты. Вот некоторые примеры:
источник
Ответы:
В статье Кена Перлина об улучшении шума он упоминает очень похожую проблему. Кубика, использованная в оригинальной шумовой статье, создает разрывы на целочисленных границах из-за свойств ее производных. В своем пересмотренном документе он предлагает метод
6t^5 - 15t^4 + 10t^3
решения этих проблем.источник
Я сделал несколько поисков и обнаружил, что B-Spline имеет непрерывный C2. Я реализовал это, и он выглядит хорошо, даже если это приближение, а не интерполяция (это не проходит через образцы).
B-сплайн (приближение):
источник