Colorizing points with imagery
This exercise uses PDAL to apply color information from a raster onto point data. Point cloud data, especially LiDAR, do not often have coincident color information. It is possible to project color information onto the points from an imagery source. This makes it convenient to see data in a larger context.
Exercise
PDAL provides a filter to apply color information from raster files onto point cloud data. Think of this operation as a top-down projection of RGB color values on the points.
Because this operation is somewhat complex, we are going to use a pipeline to define it.
1{
2 "pipeline": [
3 "./exercises/analysis/thinning/uncompahgre.laz",
4 {
5 "type": "filters.colorization",
6 "raster": "./exercises/analysis/colorization/casi-2015-04-29-weekly-mosaic.tif"
7 },
8 {
9 "type": "filters.range",
10 "limits": "Red[1:]"
11 },
12 {
13 "type": "writers.las",
14 "compression": "true",
15 "minor_version": "2",
16 "dataformat_id": "3",
17 "filename":"./exercises/analysis/colorization/uncompahgre-colored.laz"
18 }
19 ]
20}
Note
This JSON file is available in your workshop materials in the
./exercises/analysis/colorization/colorize.json
file. Remember to
open this file and replace each occurrence of ./
with the correct path for your machine.
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.
"./exercises/analysis/thinning/uncompahgre.laz",
2. filters.colorization
The filters.colorization PDAL filter does most of the work for this
operation. We’re going to use the default data scaling options. This
filter will create PDAL dimensions Red
, Green
, and Blue
.
{
"type": "filters.colorization",
"raster": "./exercises/analysis/colorization/casi-2015-04-29-weekly-mosaic.tif"
},
3. filters.range
A small challenge is the raster will colorize many points with NODATA values.
We are going to use the filters.range to filter keep any points that
have Red >= 1
.
{
"type": "filters.range",
"limits": "Red[1:]"
},
4. writers.las
We could just define the uncompahgre-colored.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": "3",
"filename":"./exercises/colorization/analysis/uncompahgre-colored.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 Conda Shell:
$ pdal pipeline ./exercises/analysis/colorization/colorize.json
Visualization
Use one of the point cloud visualization tools you installed to take a look at
your uncompahgre-colored.laz
output. In the example below, we simply
opened the file using the http://plas.io website.

Notes
Applying color information that is not time-coincident with the point cloud data will mean you will see discontinuities.
GDAL is used to read the image source. Any GDAL-readable data format can be used.
There are performance considerations to be aware of depending on the raster format and type being used. See filters.colorization for more information.
These data are of Uncompahgre Basin courtesy of the NASA Airborne Snow Observatory.