Comment éviter les artefacts d'interpolation lors de la mise à l'échelle d'une carte de hauteur?

9

J'utilise un algorithme d'interpolation bicubique afin d'élever une carte de hauteur, et je remarque des artefacts autour des limites des pixels. Cependant, ces artefacts ne semblent pas apparaître lorsque j'utilise une simple interpolation cubique (spline).

Serait-ce parce que l'interpolation bicubique ne garantit pas que la dérivée seconde soit continue, contrairement à la spline cubique? Si oui, existe-t-il des algorithmes connus qui ont une dérivée seconde continue? Sinon, existe-t-il un moyen de gérer ces artefacts?

Interpolation linéaire (montre les limites des pixels): entrez la description de l'image ici

Interpolation bicubique (artefacts visibles aux limites des pixels): entrez la description de l'image ici

Interpolation cubique (pas d'artefacts perceptibles): entrez la description de l'image ici

J'ai essayé plusieurs formules bicubiques, ce qui m'a donné les mêmes résultats. Voici quelques exemples:

plate-forme
la source
pour moi, la version bicubique est la meilleure, elle garde les hautes fréquences et semble plutôt bonne. vous dites qu'il y a des artefacts mais ils sont mineurs et ne valent pas la perte horrible que les splines b vous donnent. mon avis cependant.
v.oddou
@ v.oddou Je pense que le sentiment de haute fréquence que vous décrivez est en partie dû aux artefacts eux-mêmes. Cela ne se voit pas bien dans cette image, mais le terrain est vraiment carré sous certains angles et en fonction de la position du soleil. C'est encore plus apparent lorsque les normales ou les pentes sont affichées. Cela étant dit, il est vrai que les b-splines lissent beaucoup le terrain (plus de pics pointus). Je cherche toujours une meilleure alternative.
pont du

Réponses:

4

Dans l'article de Ken Perlin sur l'amélioration du bruit , il mentionne un problème très similaire. Le cube utilisé dans le papier de bruit d'origine crée des discontinuités aux limites entières en raison des propriétés de ses dérivés. Dans son article révisé, il propose une interconnexion de 6t^5 - 15t^4 + 10t^3pour résoudre ces problèmes.


la source
Cela semble intéressant, même si je ne sais pas comment l'utiliser dans mon code. Je vais l'explorer.
deck du
3

J'ai fait quelques recherches et j'ai constaté que B-Spline avait un C2 continu. Je l'ai implémenté et ça a l'air bien, même si c'est une approximation et non une interpolation (ça ne passe pas par les échantillons).

B-spline (approximation): entrez la description de l'image ici

plate-forme
la source