How to Process and Filter LIDAR Points in GRASS GIS

Here is a quick tutorial on how to process and filter LIDAR points in GRASS GIS. This is a quick guide when you do not have LAS files. For full guide, visit the GRASS website. This method is probably superseded by the integration of LAStools in QGIS.

Pre-processing

In this tutorial, it is assumed that all your points are in ESRI Shapefile and there is an attribute containing elevation values (z column in this example.).

Setting up GRASS Location and importing data

Set up GRASS Location and Mapset. You can do that easily through GRASS Plugin in QGIS.

Once your Location and Mapset are set up, you can import the vector points into GRASS using:

v.in.ogr dsn=PATH\points.shp output=points

Note that the file was imported as a normal vector layer and not a 3D one.

Processing

First step after importing data is to build topology:

v.build map=points

Now we need to set the region (with 2 metres resolution for the final output raster):

g.region vect=points res=2

And to convert vector layer to 3D (using z column):

v.to.3d input=points output=points_3d type=point column=z

To detect outlier:

v.outlier input=points_3d output=points_outlier outlier=points_outlier_output

For edge detection:

v.lidar.edgedetection input=points_outlier output=points_edge_detection

To identify and extract attached and detached objects (e.g. buildings):

v.lidar.growing input=points_edge_detection output=points_growing first=points_3d

Lidar correction module:

v.lidar.correction input=points_growing output=points_classified terrain=points_terrain

And to create a DTM out of filtered terrain points:

v.surf.bspline input=points_terrain raster=points_filtered

Outputs

You can visualise the results in QGIS: