Come evitare gli artefatti di interpolazione quando si ingrandisce una mappa di altezza?


9

Sto usando un algoritmo bicubico di interpolazione per ingrandire una mappa di altezza e noto alcuni artefatti attorno ai confini dei pixel. Tuttavia, questi artefatti non sembrano apparire quando uso una semplice interpolazione cubica (spline).

Potrebbe essere perché l'interpolazione bicubica non garantisce che la seconda derivata sia continua, a differenza della spline cubica? In tal caso, esistono algoritmi noti che hanno una seconda derivata continua? Altrimenti, c'è un modo per affrontare questi artefatti?

Interpolazione lineare (mostra i confini dei pixel): inserisci qui la descrizione dell'immagine

Interpolazione bicubica (artefatti visibili ai confini dei pixel): inserisci qui la descrizione dell'immagine

Interpolazione cubica (nessun artefatto evidente): inserisci qui la descrizione dell'immagine

Ho provato diverse formule bicubiche, che mi hanno dato gli stessi risultati. Ecco alcuni esempi:


per me la versione bicubica è la migliore, mantiene le alte frequenze e sembra piuttosto buona. dici che ci sono artefatti ma sono minori e non vale la perdita orribile che ti stanno dando le spline. la mia opinione però.
v.

@ v.oddou Penso che la sensazione ad alta frequenza che descrivi sia in parte dovuta agli artefatti stessi. Non mostra bene in questa immagine, ma il terreno è davvero squadrato da alcuni angoli e dipende dalla posizione del sole. È ancora più evidente quando vengono visualizzate le normali o le pendenze. Detto questo, è vero che le spline b livellano molto il terreno (niente picchi più nitidi). Sto ancora cercando un'alternativa migliore.
ponte

Risposte:


4

Nel documento di Ken Perlin sul rumore migliorato , menziona un problema molto simile. Il cubo utilizzato nella carta del rumore originale crea discontinuità ai limiti dei numeri interi a causa delle proprietà dei suoi derivati. Nel suo documento rivisto, propone un trapianto 6t^5 - 15t^4 + 10t^3per affrontare tali questioni.


Sembra interessante, anche se non sono sicuro di come usarlo nel mio codice. Lo esplorerò.
ponte

3

Ho fatto alcune ricerche e ho scoperto che B-Spline ha un C2 continuo. L'ho implementato e sembra a posto, anche se è un'approssimazione e non un'interpolazione (non passa attraverso i campioni).

B-spline (approssimazione): inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.