LiDAR – Sensor Calibration Using TerraMatch


The purpose of this study is to account for and correct various sensor misalignment issues. There are three types of sensor calibration including rigorous (sensor specific, uses range data), quasi-rigorous (error specific, no range data) and non-rigorous(purely data driven, no trajectory etc).

The corrections will be completed by Terramatch which uses a Quasi-Rigorous technique and mostly corrects boresight errors including roll, pitch and heading errors.

Boresight Roll Error – positions shift across-track. Due to angling of the laser. (perpendicular to flightline).

Boresight Pitch Error – As you move away from nadir you can increase the position shift (parallel to flight line).

Boresight Heading Error – positions rotate around the mirror.

Within TerraMatch there are two approaches for calibration including surface matching (comparison of TINS of overlapping flightlines), and tie-line matching which compares features like roof tops. This project focusses on the surface matching method.

Study Area

The data for this study was collected by the Applied Geomatics Research Group out of Middleton Nova Scotia. The LiDAR points were collected on Julian Day 332 2007. The data being used is only a subset of the entire survey. The provided points are projected in UTM 20 NAD83 (CSRS98) while the trajectory data is not projected and has a datum of NAD83 (CSRS98). The LiDAR system used was the Optech ALTM 3100 LiDAR system.



Steps for completing mis-alignment corrections in TerraMatch include:

1) Create a microstation project

2) Open and create a terrascan project

3) Add your area of interest as a reference layer

4) Import points to your terrascan project (ensure a proper projection) including the creation of blocks

5) Remove unwanted blocks and recreate the study area including only required blocks

6) Create a subset of calibration blocks and load them into a new project. Complete following steps on the calibration blocks

7) Add trajectory data and separate into flightlines either by clipping to polygon or splitting at a laser gap of 20 seconds.

8) Deduce what flightline each point belongs to using the macro tool. Run the modify line numbering, deduce line numbers and delete by flightline macros. Classify points from anylines to a default class and then assign flightlines based on time stampe using the deduce flightline macro. Finally delete any unclassified points.

9) Classify imagery by running a classification macro. Process flightlines individually.

10) Determine main error types (roll, pitch, heading) by viewing profiles. Horizontal displacement between the flightlines in a profile perpendicular to flightpath will demonstrate roll errors. Horizontal displacement parallel to flightpath suggests pitch errors. For more information about errors, look here.

11) Open TerraMatch and Run the measure match tool. Use project points (make sure your project is point to the appropriate folder and has been saved) with a max triangle of 20. Use ground class. Run the tool and save a *.txt report.

12) Run the find match tool on project points using the ground class do it on the whole dataset based on the correction determined from step 10. Apply the dataset and write to a new directory instead of overwriting current data if preferred.

13) Point your project to your calibration blocks and run the measure match tool a second time on your corrected calibration blocks. Save your results and compare to the original measure match report

14) Repeat step for each error type making sure to use the most recently corrected calibration blocks

15) Run this process on your entire project once you have tested and chosen your settings

16) Correct for zshift using the find match tool. Test it using pre and post measure match reporting.

17) If the correction has shifted the data so that it is outside of the blocks you need to delete and reimport the points.


Misalignment Analysis

As discussed briefly above it is important to determine what types of errors your dataset is experiencing. To do this you should look at profiles of LiDAR point cloud both parallel to and perpendicular to the flight path. It is best to do this in several locations. The data should be displayed by the flightline. I focused on block 5 for my misalignment analysis. I set my top view window to display points by class and my profile to show points by flightline. This was helpful for determining misalignment profile locations. It is ideal to test this in areas with peaked roofs. Only the ground and building classes were turned on to aid in this process.

Image 21
Image 3

Profile 1 will be the best for showing Roll errors as it is perpendicular to the flight path.

Profile 2 will show Pitch errors as it is parallel to the flight path.

Although the mis-alignment errors are minimal in this dataset, it is fairly clear that the points from various flight paths line up less accurately in profile 1. This is consistent with the conclusion that roll causes the largest mis-alignment errors in this dataset.

  • Perpendicular Profile of Uncorrected Points (Profile 1)

    Perpendicular Profile of Uncorrected Points (Profile 1)

  • Perpendicular Profile of Corrected Points (Profile 1)

    Perpendicular Profile of Corrected Points (Profile 1)

  • Parallel Profile - Uncorrected Points (Profile 2)

    Parallel Profile - Uncorrected Points (Profile 2)

  • Parallel Profile of Corrected Points (Profile 2)

    Parallel Profile of Corrected Points (Profile 2)


Overall the calibration decreased the magnitude of the shift between flightlines. This is obviously both visually and by looking at the generated reports. Generally an acceptable level of error is 15cm. This means that your dz RMS values for your find match analysis needs to be lower than 15cm. In this case, the corrections completed on the calibration blocks resulted in an RMS value of 0.0799 from 0.1712. The RMS for the entire survey should be the same since the same correction was applied. The shift by flightline is shown in the summary tables below.

The similarity in the original and final shift magnitudes of the calibrated and survey blocks show that the calibration dataset is a good approximation.

No major issues were encountered during this project. One difficulty encountered was displaying the LiDAR points by flightline. The flightline numbering of points was completed properly but it was preferred that the data be displayed in swaths. The data was unable to be displayed this way even though the data was sorted by time stamp which should have made preferential display of points instead of the lack of consistency encountered.

Additionally when running the find match correction tool the inclusion of buildings did not decrease the shift as was hoped. This meant that the data was rerun using the ground surface only. Adjusting classification settings could have aided in this.

Because it was determined that pitch errors were minimal they were not corrected for.

Calibration Misalignment

It is clear below that the corrections decreased the magnitude of the shift between flightlines. The average original shift was 0.2734 and decreased to 0.09761. The value seen below is the average by block while the shifts listed above is averaged by points.  The starting dz RMS is 0.1712 and 0.0799.


Survey Misalignment

Each step of the survey decreases the magnitude of the shift. It is possible that a better classification could result in a larger decrease in flightline shift. The data went from 0.2716 to 0.09712 then to 0.08562 the Z Shift applied. The numbers shown below are averaged by the blocks while the numbers just listed are a total average of the points.