Dans cet article vous trouverez, pas à pas, comment créer un MNT à partir d’un nuage LIDAR non classé et classé, avec LAStools et QGis. Nous verrons les outils LASground et LASground_new, las2dem et lastile.
Tutoriel Traitement des données LIDAR HD avec QGis
1- Les données LIDAR dans QGis 3.32
2- Télécharger les données LIDAR HD de l’IGN et les charger dans QGis
3-Les outils pour les données LIDAR dans QGis 3.32
4-Coloriser un nuage de points à partir d’une orthophoto avec CloudCompare
5-Coloriser un nuage de points à partir d’une orthophoto avec LAStools
6- Créer un Modèle numérique de surface (MNS) avec CloudCompare ou LAStools
7- Créer un Modèle Numérique de Terrain avec CloudCompare
8- Créer un Modèle Numérique de Terrain avec LAStools
Le processus de créations d’un MNT à partir d’un nuage de points LIDAR non classé est le même que celui que nous avons vu dans l’article précédent:
1- On doit classer les points du nuage en point du « sol » et points « hors sol »
2- On doit interpoler un raster à partir de points du « sol »
Si vous avez lu l’article précédent et que vous avez trouvé la génération d’un MNT assez simple, détrompez-vous! Ici la simplicité n’est pas de mise.
- Vous avez 2 outils pour classer les points qui se ressemblent mais qui sont différents
- Le nombre de paramètres possibles pour chaque outil dépasse la douzaine
- Les meilleurs résultats s’obtiennent en exécutant les outils deux fois, avec des paramètres différents
- Que vous ayez ou pas de licence LAStools, un nuage LIDAR de l’IGN ne passe pas sans le découper en nuages plus petits
Il est impossible de voir toutes les possibilités ici. A vous de prendre votre courage à deux mains et d’explorer toutes celles que l’on ne verra pas.
Classer les point en sol et hors sol avec LAStools
LASGround et LASGround_New sont deux outils de la boîte à outils LAStools qui sont utilisés pour extraire les points du sol à partir d’un nuage de points LiDAR. Cependant, il y a des différences importantes entre ces deux outils en termes de méthodes et de fonctionnalités.
- LASGround :
LASGround est un outil qui identifie et classe les points du sol dans un nuage de points LiDAR. Il utilise principalement des algorithmes basés sur des opérations morphologiques pour détecter les points du sol. LASGround utilise une grille de cellules et une fenêtre de taille variable pour identifier les points du sol en se basant sur la densité des points voisins. Il est efficace pour extraire les points du sol dans des zones planes ou légèrement inclinées.
Cet outil fonctionne très bien dans les environnements naturels tels que les montagnes, les forêts, les champs, les collines ou tout autre terrain avec peu d’objets fabriqués par l’homme. - LASGround_New :
LASGround_New est une version améliorée de LASGround, introduite pour fournir de meilleures performances et une extraction plus précise des points du sol. Contrairement à LASGround, LASGround_New utilise une approche basée sur l’apprentissage automatique (machine learning). Il peut utiliser des méthodes telles que Random Forest pour classifier les points du sol en se basant sur des caractéristiques telles que la hauteur, la densité, etc. LASGround_New est conçu pour traiter des environnements plus complexes, y compris les zones avec des pentes plus prononcées et des caractéristiques topographiques variées.
Il s’agit d’une version entièrement repensée de lasground qui gère beaucoup mieux les terrains compliqués où il y a des montagnes escarpées à proximité de zones urbaines avec de nombreux bâtiments.
LASground
Il s’agit d’un outil d’extraction de la terre nue : il classe les points LIDAR en points au sol (classe = 2) et en points hors sol (classe = 1). Cet outil fonctionne très bien dans les environnements naturels tels que les montagnes, les forêts, les champs, les collines ou tout autre terrain comportant peu d’objets artificiels.
L’outil produit également d’excellents résultats pour les villes, mais les bâtiments plus grands que la taille du pas peuvent poser problème.
Taille de pas
- La taille de pas par défaut est de 5 mètres, ce qui est bon pour les forêts ou les montagnes.
- Pour les villes ou les terrains plats ‘-town’, la taille du pas est augmentée à 10 mètres.
- Pour les villes ou les entrepôts, ‘-city’ augmente la taille du pas à 25 mètres. Pour les très grandes villes, utilisez ‘-metro’ et la taille du pas sera augmentée à 50 mètres.
- Vous pouvez également la définir directement avec ‘-step 35’.
L’utilisateur expérimenté peut affiner l’algorithme en spécifiant le seuil en mètres à partir duquel les pics sont supprimés. Le paramètre ‘-spike 0.5+5’ supprimera les pics ascendants supérieurs à 50 centimètres et les pics descendants inférieurs à 5 mètres dans le TIN le plus grossier.
Un autre paramètre intéressant est le paramètre « -bulge 1.0 » qui spécifie à quel point le TIN est autorisé à se gonfler lorsqu’il inclut des points au fur et à mesure qu’il s’affine. Le renflement par défaut est d’un dixième du pas pour les tailles de pas supérieures à 5 mètres et d’un cinquième du pas dans les autres cas.
L’écart-type maximal pour les patchs planaires en centimètres peut être défini avec ‘-stddev 10’. Le décalage maximal en mètres jusqu’auquel les points au-dessus de l’estimation actuelle du sol sont inclus peut être défini avec ‘-offset 0.1’.
LASground_new
Il s’agit d’un outil d’extraction de la terre nue : il classe les points LIDAR en points au sol (classe = 2) et en points non au sol (classe = 1). Il s’agit d’une version totalement remaniée de lasground qui gère beaucoup mieux les terrains compliqués où il y a des montagnes escarpées à proximité de zones urbaines avec de nombreux bâtiments.
La taille du pas par défaut a été augmentée à 25 mètres, ce qui permet de supprimer la plupart des bâtiments dans les villes courantes (à l’exception des très grands entrepôts ou usines qui nécessitent un pas plus grand).
Pour les petites villes ou les terrains avec peu de bâtiments, utilisez l’option ‘-town’ qui réduit la taille du pas à 10 mètres. Pour les très grandes villes, utilisez l’option ‘-metro’ et la taille du pas sera augmentée à 50 mètres.
Vous pouvez également expérimenter en réglant directement la taille du pas en utilisant ‘-step 35’.
Il y a ensuite l’option « -nature » qui utilise un pas de 5 mètres pour les terrains sans bâtiments et l’option « -wilderness » qui utilise 3 mètres si vous vous intéressez à des éléments plus petits sur le terrain dans le LiDAR à haute résolution.
L’utilisateur expérimenté peut affiner l’algorithme en spécifiant le seuil en mètres à partir duquel les pics sont supprimés. Le paramètre ‘-spike 0.5’ permet de supprimer les pics ascendants supérieurs à 50 centimètres et le paramètre ‘-spike_down 2.5’ permet de supprimer les pics descendants inférieurs à 2,5 mètres dans le TIN le plus grossier.
Le décalage maximal en mètres jusqu’auquel les points au-dessus de l’estimation actuelle du sol sont inclus peut être défini avec ‘-offset 0.1’. Vous pouvez également – si vous voulez essayer un grand nombre de paramètres – jouer avec ‘-bulge 1.5’ qui – par défaut – est fixé à un dixième de la taille de l’étape et ensuite serré dans l’intervalle de 1.0 à 2.0.
Ce qui est valable pour les deux outils
Vous pouvez utiliser d’autres classifications que la norme ASRPS avec ‘-ground_class 10’ ou ‘-non_ground_class 25’. Il est possible de laisser intacte la classification originale de tous les points qui ne sont pas classés comme sol avec ‘-non_ground_unchanged’.
Si vous souhaitez exclure certaines classifications du calcul de la terre nue, vous pouvez le faire avec ‘-ignore_class 7’. Pour les collines très escarpées, vous pouvez intensifier la recherche des points initiaux du sol avec ‘-fine’, ‘-extra_fine’, ‘-ultra_fine’ ou ‘-hyper_fine’. De même, pour les terrains très plats, vous pouvez simplifier la recherche avec ‘-coarse’ ou ‘-extra_coarse’, mais essayez d’abord le réglage par défaut.
Enfin, vous pouvez demander à lasground ou lasground_new de calculer la hauteur au-dessus du sol pour chaque point (afin de pouvoir utiliser lasclassify ensuite sans avoir besoin de lancer lasheight d’abord) avec ‘-compute_height’ ou même demander à ce que la hauteur calculée remplace la valeur d’élévation avec l’option ‘-replace_z’. Vous obtenez alors directement un fichier LAS/LAZ normalisé en hauteur qui peut être utilisé, par exemple, avec les outils lascanopy ou lasgrid ou l’algorithme CHM (canopy height model) sans fosse. Si lasground ou lasground_new fonctionne mal, essayez de désactiver certaines optimisations en utilisant les drapeaux ‘-no_clean’ ou ‘-no_bulge’.
S’il y a trop peu de points pour effectuer une classification fiable du terrain, les fichiers sont simplement copiés (et dans le cas de ‘-replace_z’, toutes les élévations sont mises à zéro). Ces fichiers peuvent également être ignorés à l’aide de l’option de ligne de commande ‘-skip_files’.
Pré-traitement du nuage exemple avec LAStile
Nous allons utiliser le même nuage de points LIDAR que dans l’article précédent, un nuage classé auquel on a effacé la classification. Ceci permet de comparer les résultats des outils avec le MNT fait directement avec la classification « sol » de l’IGN.
Le premier problème que nous avons est que ce nuage de points contient 28 millions de points. Si nous utilisons les outils LAStools de cet article sur ce nuage, nous avons un message:
ERROR processing file 'C:\telechargements\ncLHD_FXX_0722_6403_PTS_C_LAMB93_IGN69.laz'. maybe out of memory?
On doit donc découper notre nuage en nuages plus petits (moins de 1.5 millions si vous n’avez pas de licence) et utiliser les outils de type « répertoire » au lieu de « fichier ». Nous reconstruirons une sortie unique à la fin du traitement.
Pour créer les tuiles, nous créons un répertoire vide, puis nous ouvrons l’outil LAStile
Vous aurez à calculer la « tile size » pour que les tuiles aient le nombre de points souhaité. Notre nuage en entrée fait 1000mx1000m et 28 millions de points. Si nous voulons moins de 1.5 millions de points par tuile, 25 tuiles de 200mx200m auront environ 1.1 million de points. Nous indiquerons alors 200 dans tile size.
Par contre, le champ Output LAS/LAZ, qui est marqué optionnel n’est pas du tout optionnel sous peine d’aller les chercher dans les recoins du /Users/nom_user/AppData/Local/Temp/. Vous devez rentre un répertoire pour les tuiles et un nom, par exemple « tuile.las ». Les tuiles seront alors nommées « tuile_coordonnéeX_coordonnéeY.las ».
Le traitement que nous réservons à ces tuiles comprend des interpolations entre les points. Si nous avions un tuilage classique, bord à bord, nous aurions des effets de bord: les points situés sur les bord n’auraient pas les voisins situés sur la tuile adjacente. Pour éviter cela, LAStools ajoute une zone tampon autour de chaque tuile. Au moment de reconstituer le nuage résultat elles seront enlevées automatiquement mais on n’aura pas d’effet de bords dans les traitements intermédiaires.
Extraction des points « sol »
Nous chargeons le nuage de point à traiter, dans sa version colorisée car ce sera plus pratique pour analyser les résultats.
Nous avons une zone urbaine entourée de zones naturelles. Nous allons utiliser l’outil LASground en le configurant avec les paramètres -city pour terrain type et -ultra_fine pour preprocessing. C’est la configuration classique en traitement du LIDAR pour l’archéologie et elle correspond très bien à notre nuage LIDAR. N’oubliez pas de cocher la case 64bits executable.
Le résultat est une série de nuages avec deux classes :
- 1- non classé (points hors sol)
- 2- sol
C’est ici que nous avons la plus grande différence avec le traitement avec CloudCompare. Pour évaluer le résultat nous avons deux problèmes:
- le premier c’est le fait d’avoir divisé notre nuage en de multiples lots de données.On aura difficilement une vue d’ensemble.
- le deuxième c’est le manque d’une véritable interface 3D qui permette de voir le résultat sous tous les angles. La vue 3D de QGis est trop grossière pour voir correctement le résultat.
Le moyen qui nous reste est d’utiliser la vue du Profil d’élévation, mais qui nous oblige à tracer plusieurs transects pour détecter les éventuels problèmes.
Selon les types de terrain présents dans notre nuage initial, il sera nécessaire de vérifier plusieurs tuiles.
Dans notre exemple nous allons nous arrêter là. Mais il est assez courant qu’on ai besoin d’une deuxième passe de lasground. Le cas classique est celui des recherches archéologiques. Supposons que nous ayons dans notre nuage de points de l’exemple, une zone intéressante dans la partie naturelle de l’image. Nous avons utilisé l’option -city pour classer les bâtiments en hors sol. Cette option utilise un pas de 25 mètres. Si nous avons des petites structures elles risquent fort de ne pas être classées en hors sol. Une deuxième exécution de lasground, cette fois avec l’option -wilderness (zone naturelle sans constructions) en l’appliquant exclusivement aux points classés en « sol » par le premier passage, pourrait alors enlever les petites structures.
Calcul du MNT avec LAS2dem
Cet outil lit les points LIDAR, les triangule temporairement en un TIN, puis calque le TIN sur un raster MNT. L’outil peut utiliser les valeurs ‘-elevation’, ‘-slope’, ‘-intensité’, ‘-rgb’, ou une coloration ‘-hillshade’ ou ‘-gray’ ou ‘-false’. La sortie peut être au format BIL, ASC, IMG, FLT, XYZ, DTM, TIF, PNG ou JPG. . La plage particulière de valeurs à représenter peut être limitée à l’aide de ‘-set_min_max 10 100’ ou peut être définie à l’aide de ‘-compute_min_max’. Quand vous utilisez des filtres tels que ‘-last_only’ ou ‘-keep_class 2’, vous pouvez utiliser l’option ‘-extra_pass’ pour déterminer d’abord le nombre de points à trianguler. Cela permet d’économiser de la mémoire.
Par défaut, la taille du raster généré est basée sur l’étendue de la boîte de délimitation. Si le fichier LAS/LAZ a été généré à l’aide de lastile, comme dans notre exemple, son étendue peut être fixée à celle de la tuile en utilisant l’option ‘-use_tile_bb’. Tout « tampon de bordure » que la tuile aurait pu avoir n’est alors pas rastérisé. Cela permet d’éviter les artefacts de bordure tout en créant des tuiles correspondantes en parallèle.
Un fichier KML est automatiquement généré pour permettre l’affichage du MNE dans Google Earth (pour TIF/PNG/JPG). Comme le fichier LAS/LAZ contient les informations de projection , celles-ci sont utilisées pour le géoréférencement du fichier KML.
Pour notre exemple, voici la fenêtre de dialogue de las2dem:
Le filtre keep_class 2 fait qu’on ne traitera que les points classés « sol » (code 2).
On défini le pas du MNT à 0.5 mètres.
Nous cochons la case « use tile bounding box » pour que le raster en sortie de chaque tuile soit découpé pour ne garder que la tuile d’origine, sans la zone tampon créé par lastile.
-extra_pass permet d’optimiser l’allocation de mémoire.
Le résultat est la création de trois fichiers par tuile: le fichier tif, le fichier world associé et le fichier kml.
On remarque que les tuiles en sortie sont jointives (sans débordement):
LAStools a bien l’outil pour tuiler le nuage de point de départ, mais n’a pas d’outil pour reconstituer le MNT final. Nous devons utiliser l’outil standard de QGis: menu-> raster -> divers -> fusion
On sélectionne toutes les tuiles, on donne un nom au fichier tif en sortie et on exécute la commande.
Nous pouvons voir enfin le résultat complet et le comparer au MNT de référence fait à partir du classement de l’IGN.
Dans la partie naturelle de notre zone LIDAR, les deux résultats concordent:
Par contre, dans la zone urbanisée, on note des différences:
En toute logique, il faudrait revenir au premier passage de lasground et modifier le pas avec une valeur de 10 mètres (-town) et tout refaire…