Como evito artefatos de interpolação ao escalar um mapa de altura?

9

Estou usando um algoritmo de interpolação bicúbica para melhorar um mapa de altura e estou observando alguns artefatos em torno dos limites dos pixels. No entanto, esses artefatos parecem não aparecer quando eu uso uma interpolação cúbica simples (spline).

Seria porque a interpolação bicúbica não garante que a segunda derivada seja contínua, diferentemente do spline cúbico? Em caso afirmativo, existem algoritmos conhecidos que possuem uma segunda derivada contínua? Caso contrário, existe uma maneira de lidar com esses artefatos?

Interpolação linear (mostra os limites dos pixels): insira a descrição da imagem aqui

Interpolação bicúbica (artefatos visíveis nos limites dos pixels): insira a descrição da imagem aqui

Interpolação cúbica (sem artefatos perceptíveis): insira a descrição da imagem aqui

Eu tentei várias fórmulas bicúbicas, o que me deu os mesmos resultados. aqui estão alguns exemplos:

área coberta
fonte
para mim a versão bicúbica é a melhor, mantém altas frequências e parece muito boa. você diz que existem artefatos, mas eles são menores e não valem a perda horrível que os splines estão causando. minha opinião embora.
v.oddou
@ v.oddou Eu acho que o sentimento de alta frequência que você descreve é ​​em parte devido aos próprios artefatos. Não aparece bem nesta imagem, mas o terreno é realmente quadrado de alguns ângulos, e dependendo da posição do sol. É ainda mais aparente quando as normais ou as pistas são exibidas. Dito isto, é verdade que os splines b suavizam muito o terreno (sem picos mais agudos). Ainda estou procurando uma alternativa melhor.
deck

Respostas:

4

No artigo de Ken Perlin sobre ruído melhorado , ele menciona um problema muito semelhante. O cúbico usado no papel de ruído original cria descontinuidades nos limites do número inteiro devido às propriedades de seus derivados. Em seu artigo revisado, ele propõe um interplante 6t^5 - 15t^4 + 10t^3para tratar dessas questões.


fonte
Isso parece interessante, mesmo que eu não tenha certeza de como usá-lo no meu código. Vou explorar isso.
deck
3

Fiz algumas pesquisas e descobri que o B-Spline tem um C2 contínuo. Eu o implementei e parece bom, mesmo que seja uma aproximação e não uma interpolação (não passa pelas amostras).

B-spline (aproximação): insira a descrição da imagem aqui

área coberta
fonte