I came across an interesting blog article by Jarlath O’Neil-Dunne from the University of Vermont on how LiDAR return information can be used as a simple way to discriminate vegetated areas from buildings. He first computes a normalized first-return DSM and a normalized last-return DSM that he subtracts from another to highlight the vegetation. He writes “This is because the height difference of the first and last returns for buildings is often identical, whereas for trees it is typically much greater.”
Side note: I am not entirely happy with the terminology of a “Normalized Digital Terrain Model (nDTM)”. Jarlath writes: “A similar approach is used to create a Normalized Digital Terrain Model (nDTM). A DTM is generated from the last returns. The DEM is then subtracted from the DTM to create the nDTM.” I like to reserve the term “Digital Terrain Model (DTM)” for bare-earth terrain computed from returns classified as ground.
Below I radically simplify Jarlath workflow by eliminating the two normalization steps. This not only saves the creation of 3 temporary rasters but also removes the requirement to have ground-classified LiDAR:
- Create a first-return frDSM
- Create a last-return lrDSM
- Subtract the lrDSM from the frDSM to get a return-difference rdDEM
This rdDEM has non-zero heights in all areas where the LiDAR produced more than one return. This happens most often and most pronounced in vegetated areas. Here is how to implement this with las2dem of LAStools:
las2dem -i ..\data\fusa.laz -first_only -o frDSM.bil las2dem -i ..\data\fusa.laz -last_only -o lrDSM.bil lasdiff -i frDSM.bil -i lrDSM.bil -o rdDEM.laz lasview -i rdDEM.laz
Does this work well for you? The results on the “fusa.laz” data set are not entirely convincing … maybe because the vegetation was too dense (leaf-on?) so that the LiDAR penetration is not as pronounced. You can switch back and forth between the first-return and the last-return DSM by loading both *.bil files into lasview with the ‘-files_are_flightlines’ option and then press hotkeys ‘0’ and ‘1’ to toggle between the points and ‘t’ to triangulate the selected DSM.
lasview -i frDSM.bil lrDSM.bil -files_are_flightlines
We should point out that for Jarlath the return difference raster rdDEM is just one part of the pipeline that is followed by an object-based approach in which they integrate the spectral information from aerial imagery and then use iterative expert systems to further improve the tree canopy classification.
Nevertheless, we believe that our way of classifying vegetation and buildings via a pipeline of lasground, lasheight, and lasclassify gives a better and more robust initial guess than multi-return height differences towards what is vegetation and what are buildings. Below you see this is implemented using the new LASlayers concept:
lasground -i ..\data\fusa.laz -city -extra_fine -olay lasheight -i ..\data\fusa.laz -ilay -olay lasclassify -i ..\data\fusa.laz -ilay -olay lasview -i ..\data\fusa.laz -ilay
Using lasgrid there are many ways that can easily turn the classified point cloud into a raster so that it can be used for subsequent exploitation together with other image data using a raster processing software. An example is shown below.
lasgrid -i ..\data\fusa.laz -ilay -keep_class 5 ^ -step 0.5 -subcircle 0.1 -occupancy -fill 1 -false ^ -use_bb -o vegetation.tif lasgrid -i ..\data\fusa.laz -ilay -keep_class 6 ^ -step 0.5 -subcircle 0.1 -occupancy -fill 1 -gray ^ -use_bb -o buildings.tif gdalwarp vegetation.tif buildings.tif classified.tif
Alternatively we can use lasboundary to create a shapefile describing either the vegetation or the buildings.
lasboundary -i ..\data\fusa.laz -ilay -keep_class 5 ^ -disjoint -concavity 1.5 -o vegetation.shp lasboundary -i ..\data\fusa.laz -ilay -keep_class 6 ^ -disjoint -concavity 1.5 -o buildings.shp