3D les méthodes d'interpolation en C (ou Fortran), et comparaison avec la Méthode de Shepard
Je tiens à interpoler une 3D d'une fonction scalaire f(x, y, z)
. J'ai codé un 3D interpolation linéaire de l'algorithme dehttp://en.wikipedia.org/wiki/Trilinear_interpolation). Ce n'était pas si mauvais.
Cependant, je voudrais quelque chose de plus sophistiqué, par exemple 3D splines cubiques. Existe-il des open source, facile à utiliser, disponible publiquement code pour l'interpolation 3D scalaire? Je préfère utiliser le C, mais Fortran serait OK aussi. Je voudrais rester à l'écart de Matlab.
J'ai vu de semblables questions posées ici:
L'interpolation d'un champ scalaire dans un espace 3D
et
Quelles sont les bonnes bibliothèques pour la 3D interpolation?
La deuxième était OK avec Matlab, dont je ne suis pas.
Comme pour la première, la principale suggestion a été Shepard méthode. Je suis curieux de savoir quelle est la précision de Shepard méthode. Par exemple, dans le cas d'une grille uniforme, on peut appliquer Shepard méthode uniquement à proximité des points de la grille, et dans ce cas elle ne ont tendance à être plus précis que l'interpolation linéaire ou des splines cubiques? J'imagine que non, mais n'était pas sûr à 100%, et si, en fait, il n'est pas mieux, alors je préfère trouver le code à l'aide de quelque chose comme les splines si ces codes sont disponibles.
- Pourquoi ne voulez-vous pas utiliser matlab?
- J'ai besoin d'un algorithme d'interpolation pour un grand projet qui je pense sera trop lent si tout est codé en Matlab.
- Pourriez-vous décrire votre entrée et de sortie des grilles s'il vous plaît: uniforme ou non uniforme, quelle taille ?
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à Des Outils géométriques pour l'Interpolation:
basé sur un modèle de C++ pour tricubic, uniforme B-splines, et beaucoup plus.
(einspline, une bibliothèque C pour les B-splines en 1d, 2d, 3d,
semble être en sommeil en 2013; l'auteur ne veut pas répondre à mes mails.
Aussi, c'est C; C++ modèles permettrait de réduire l'augmentation du code de l'interpolation
les chars, les couleurs, vec ...)
Je n'ai pas utilisé l'un de ces.
Sur Pondération Inverse à la distance
un.k.un. Shepard, méthode, vous pouvez prendre tout nombre de voisins: en 3d, 2^3 ou 3^3 ou 4^3 ...
D'une manière générale, le problème est "relâchement" — voir l'intrigue dans le lien.
"Précision" de toute méthode d'interpolation est vraiment difficile à mesurer: ce qui est "d'or",
pour quelles catégories de données /quel est ce bruit ?
Et vous avez deux mesures, l'erreur sur les données et la douceur, à faire des compromis
— pour
photo de l'élargissement
trois:
de l'aliasing, le flou et le bord des halos.
Il y a un peu de théorie sur la spline d'interpolation de la bande des fonctions limitées, mais autant que je sache, aucun pour IDW.
Ajouté:
Quel est le
bullseye effet ?
Bien, IDW peut avoir des pics au-dessus proximité de points de données, si il y a des hauts sommets au loin.
Par exemple en 1d,
IDW( [0 0] [1 0] [2 y] ) = y/7 à x = 1/2.
Mais IDW poids ~ 1 /la distance peut être trop pointues, qui tombe trop vite, pour certaines tâches.
Les méthodes d'Interpolation et les grains doivent être choisis en fonction de données spécifiques et le bruit — un art.
La bspline-fortran de la bibliothèque 2d-6d b-spline d'interpolation de données sur une grille régulière. Il est écrit dans moderne Fortran (il y a une base sous-interface et également d'une interface orientée objet).