J'ai un MNT que j'aimerais lisser ou généraliser pour éliminer les extrêmes topographiques (pics d'abattage et creux de remplissage). Idéalement, j'aimerais aussi pouvoir contrôler le rayon ou le niveau de "flou". À la fin, j'aurai besoin d'un ensemble de rasters allant du plus flou au plus flou. (Théoriquement, le plus flou serait un raster constant de la moyenne arithmétique de toutes les valeurs).
Existe-t-il des outils ou des méthodes que je peux utiliser (basés sur Esri, GDAL, GRASS)? Dois-je cuire à la maison ma propre routine de flou gaussien ? Pourrais-je utiliser un filtre passe-bas (par exemple, le filtre d'ArcGIS ), et si oui, devrais-je l'exécuter plusieurs fois pour obtenir l'effet d'un grand rayon?
raster
tools
generalization
smoothing
Mike T
la source
la source
Réponses:
Le flou gaussien est juste une moyenne focale pondérée. Vous pouvez le recréer avec une grande précision avec une séquence de voisinage circulaire à courte distance (non pondéré): il s’agit d’une application du théorème de la limite centrale .
Vous avez beaucoup de choix. Le "filtre" est trop limité - il ne concerne que les quartiers 3 x 3 - ne vous embêtez pas. La meilleure option pour les grands MNA consiste à intégrer le calcul en dehors d'ArcGIS à un environnement utilisant les transformations rapides de Fourier: ils effectuent les mêmes calculs focaux, mais (en comparaison), ils le font à une vitesse fulgurante. (GRASS possède un module FFT . Il est destiné au traitement des images, mais vous pourrez peut-être le mettre en service pour votre DEM si vous pouvez le redimensionner avec une précision raisonnable dans la plage 0..255.) À part cela, il existe au moins deux solutions. Vaut la peine d'être considéré:
Créez un ensemble de pondérations de voisinage qui se rapprochent d'un flou gaussien pour un voisinage non négligeable. Utilisez les passes successives de ce flou pour créer votre séquence de MNT toujours plus lisses.
(Les poids sont calculés sous la forme exp (-d ^ 2 / (2r)) où d est la distance (dans les cellules si vous préférez) et r le rayon effectif (également dans les cellules). Ils doivent être calculés dans un cercle sur au moins l' 3r . Après cela, diviser chaque poids par la somme de tous donc à la fin de leur somme 1.)
Sinon, oubliez la pondération; juste exécuter une moyenne focale circulaire à plusieurs reprises. C'est exactement ce que j'ai fait pour étudier comment les grilles dérivées (comme la pente et l'aspect) changent avec la résolution d'un MNT.
Les deux méthodes fonctionneront bien et après les premiers passages, il y aura peu de choix, mais les rendements diminuent: le rayon effectif de n moyennes focales successives (toutes utilisant la même taille de voisinage) n'est que (approximativement) le plus proche. racine carrée de n fois le rayon de la moyenne focale. Ainsi, pour de grandes quantités de flou, vous voudrez recommencer avec un voisinage de grand rayon. Si vous utilisez une moyenne focale non pondérée, exécutez 5-6 passages sur le DEM. Si vous utilisez des poids approximativement gaussiens, vous n'avez besoin que d'un seul passage: vous devez créer la matrice de poids.
Cette approche a en effet la moyenne arithmétique du DEM comme valeur limite.
la source
J'explore l' approche signal.convolution de SciPy (basée sur ce livre de recettes ) et rencontre un vif succès avec l'extrait suivant:
J'utilise ceci dans une autre fonction qui lit / écrit des GeoTIFFs float32 via GDAL (inutile de redimensionner à 0-255 octets pour le traitement des images), et j'ai déjà essayé de tenter des tailles de pixels (par exemple, 2, 5, 20) et très belle sortie (visualisée dans ArcGIS avec 1: 1 pixel et une plage min / max constante):
Remarque: cette réponse a été mise à jour pour utiliser une fonction de traitement signal.fftconvolve beaucoup plus rapide basée sur la FFT .
la source
Cela pourrait être un commentaire sur l'excellente réponse de MikeT , si ce n'était pas trop long et trop complexe. J'ai beaucoup joué avec elle et créé un plugin QGIS nommé Filtres de convolution FFT (au stade "expérimental") basé sur sa fonction. Outre le lissage, le plug-in peut également accentuer les contours en soustrayant le raster lissé de celui d'origine.
J'ai mis à niveau la fonction de Mike un peu plus tard:
Les vérifications de validité vont de soi, mais ce qui est important, c’est de lancer en arrière. Auparavant, la fonction rendait les tableaux de nombres entiers noirs (zéros uniquement), en raison de la division par la somme des valeurs (
g / g.sum()
).la source
Sous QGIS, j'ai facilement obtenu de bons résultats en utilisant le filtrage d'images Orfeo Toolbox . C'est assez rapide et le mode batch fonctionne bien. Des diffusions gaussiennes, moyennes ou anisotropes sont disponibles.
Notez que se
Radius
réfère au nombre de cellules, pas à la distance.Voici un exemple utilisant Smoothing (gaussian) :
Brut:
Filtré:
la source
Belle solution pour le flou gaussien et une animation cool. En ce qui concerne l'outil de filtrage Esri mentionné ci-dessus, il s'agit essentiellement de l'outil Esri "Statistiques focales" codé en dur à une taille de 3x3. L'outil Statistiques focales vous donne beaucoup plus d'options sur la forme de votre filtre en mouvement, la taille et les statistiques que vous souhaitez exécuter. http://desktop.arcgis.com/fr/arcmap/latest/tools/spatial-analyst-toolbox/focal-statistics.htm
Vous pouvez également créer un filtre "irrégulier" dans lequel vous transmettez votre propre fichier texte avec des poids à utiliser pour chaque cellule. Le fichier texte contient autant de lignes que vous le souhaitez dans votre zone de filtre, avec des valeurs délimitées par des espaces pour les colonnes. J'imagine que vous devriez toujours utiliser un nombre impair de lignes et de colonnes afin que votre cellule cible se trouve au milieu.
J'ai créé un tableur Excel pour jouer avec différents poids que je viens de copier / coller dans ce fichier. Vous devriez obtenir les mêmes résultats que ci-dessus si vous ajustez les formules.
la source