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.
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.
First step after importing data is to build topology:
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
You can visualise the results in QGIS: