Removing noise¶
This exercise uses PDAL to remove unwanted noise in an ALS collection.
Warning
Our default Install Docker machine instance is probably going to run out of memory for this operation (it only has 1gb). We may need to recreate it with the following commands to increase the available memory:
Remove the existing machine instances
$ docker-machine rm default
Create a new one with 2gb of memory
$ docker-machine rm default
Exercise¶
PDAL provides a filter through PCL to apply a statistical filter to data.
Because this operation is somewhat complex, we are going to use a pipeline to define it.
{
"pipeline": [
"/data/exercises/analysis/denoising/18TWK820985.laz",
{
"type": "filters.outlier",
"method": "statistical",
"extract": "true",
"multiplier": 3,
"mean_k": 8
},
{
"type": "filters.range",
"limits": "Z[-100:3000]"
},
{
"type": "writers.las",
"compression": "true",
"minor_version": "2",
"dataformat_id": "0",
"filename":"/data/exercises/analysis/denoising/clean.laz"
}
]
}
Note
This pipeline is available in your workshop materials in the
./exercises/analysis/denoising/denoise.json
file.
Pipeline breakdown¶
1. Reader¶
After our pipeline errata, the first item we define in the pipeline is the point cloud file we’re going to read.
"/data/exercises/analysis/denoising/18TWK820985.laz",
2. filters.outlier¶
The filters.outlier PDAL filter does most of the work for this operation.
{
"type": "filters.outlier",
"method": "statistical",
"extract": "true",
"multiplier": 3,
"mean_k": 8
},
3. filters.range¶
Even with the filters.outlier operation, there is still a cluster of
points with extremely negative Z
values. These are some artifact or
miscomputation of processing, and we don’t want these points. We are going to
use :filters.range to keep only points that are within the range
-100 <= Z <= 3000
.
{
"type": "filters.range",
"limits": "Z[-100:3000]"
},
4. writers.las¶
We could just define the clean.laz
filename, but we want to
add a few options to have finer control over what is written. These include:
{
"type": "writers.las",
"compression": "true",
"minor_version": "2",
"dataformat_id": "0",
"filename":"/data/exercises/analysis/denoising/clean.laz"
}
compression
: LASzip data is ~6x smaller than ASPRS LAS.minor_version
: We want to make sure to output LAS 1.2, which will provide the widest compatibility with other softwares that can consume LAS.dataformat_id
: Format 3 supports both time and color information
Note
writers.las provides a number of possible options to control how your LAS files are written.
Execution¶
Invoke the following command, substituting accordingly, in your Docker Quickstart Terminal:
docker run -v /c/Users/Howard/PDAL:/data -t pdal/pdal \
pdal pipeline \
/data/exercises/analysis/denoising/denoise.json

Visualization¶
Use one of the point cloud visualization tools you installed to take a look at
your clean.laz
output. In the example below, we simply
opened the file using the Fugro Viewer

Notes¶
- Control the aggressiveness of the algorithm with the
mean_k
parameter. - filters.outlier requires the entire set in memory to process. If you have really large files, you are going to need to split them in some way.