¿Cómo evito los artefactos de interpolación al escalar un mapa de altura?

9

Estoy usando un algoritmo de interpolación bicúbico para escalar un mapa de altura, y estoy notando algunos artefactos alrededor de los límites de píxeles. Sin embargo, estos artefactos no parecen aparecer cuando uso una simple interpolación cúbica (spline).

¿Podría ser porque la interpolación bicúbica no garantiza que la segunda derivada sea continua, a diferencia de la spline cúbica? Si es así, ¿hay algoritmos conocidos que tengan una segunda derivada continua? De lo contrario, ¿hay alguna manera de lidiar con estos artefactos?

Interpolación lineal (muestra los límites de píxeles): ingrese la descripción de la imagen aquí

Interpolación bicúbica (artefactos visibles en los límites de píxeles): ingrese la descripción de la imagen aquí

Interpolación cúbica (sin artefactos notables): ingrese la descripción de la imagen aquí

Probé varias fórmulas bicúbicas, que me dieron los mismos resultados. Aquí hay unos ejemplos:

cubierta
fuente
Para mí, la versión bicúbica es la mejor, mantiene altas frecuencias y se ve bastante bien. usted dice que hay artefactos, pero son menores y no valen la horrible pérdida que le están dando las splines. mi opinión sin embargo.
v.oddou
@ v.oddou Creo que la sensación de alta frecuencia que describe se debe en parte a los artefactos en sí. No se ve bien en esta imagen, pero el terreno es realmente cuadrado desde algunos ángulos, y depende de la posición del sol. Es aún más evidente cuando se muestran las normales o las pendientes. Dicho esto, es cierto que las estrías b suavizan mucho el terreno (no más picos agudos). Todavía estoy buscando una mejor alternativa.
cubierta

Respuestas:

4

En el artículo de Ken Perlin sobre ruido mejorado , menciona un problema muy similar. El cúbico utilizado en el papel de ruido original crea discontinuidades en los límites enteros debido a las propiedades de sus derivados. En su documento revisado, propone un interplante 6t^5 - 15t^4 + 10t^3para abordar esos problemas.


fuente
Eso suena interesante, incluso si no estoy seguro de cómo usarlo en mi código. Exploraré esto.
cubierta
3

Hice algunas búsquedas y descubrí que B-Spline tiene un C2 continuo. Lo implementé y se ve bien, incluso si es una aproximación y no una interpolación (no pasa por las muestras).

B-spline (aproximación): ingrese la descripción de la imagen aquí

cubierta
fuente