User Tools

Site Tools


Control Point Tool

ScanLook has its own control point measurement and analysis tool. This allows the user to adjust the trajectory as computed by the INS software to line up better with known control points.


The adjustment within ScanLook is performed prior to generating the entire point cloud and is separated into an XY correction and a Z correction. Furthermore, the adjustment can be computed using the scan data from any of the scanners with the corrections then being shared between scanners. This allows for one set of corrections being applied to each scanner. Generally, the corrections necessary for any one instrument should apply to all instruments.

However, if for some reason the user decides that individual solutions are best, this can also be done by first processing one scanner and then starting over and doing the additional sensors in a separate step.

Control point refinement in ScanLook is much faster than alternative means and also provides more consistent results with all instruments. It is faster in that other solutions first compute the entire point cloud, then compute corrections, and finally compute a corrected point cloud. Some do this iteratively. In ScanLook, the point cloud is not computed until after the control points have been measured, analyzed, and accepted.

All of the sensors on ScanLook should be consistently calibrated so only a single set of corrections should be necessary.

In addition ScanLook allows for the separation of the correction to horizontal and vertical and has much more flexibility point by point by allowing for check points, point types (XY, XYZ, Z), point status (use, skip, force, etc.), point usage (XY, Z, XYZ), and more.

The Workflow

Load your project like normal, computing the trajectory, etc.

Within your project folder create a control.txt file as defined below (basically an id x y z file with some options). It does not support YXZ as of yet (i.e., again, it must be easting, northing, height).

Next, click on Control to bring up the Control Point Analysis dialog. Edit the settings, if different than the defaults, and click on Make Points. This will cycle through all of the control points along the entire trajectory creating a “control” sub-folder with point patches for each point at the time it is near the trajectory (for the scanner selected on the initial screen). This process can be time consuming depending upon how big your session is, the parameters specified, how many points you have, and how many times the trajectory overlaps and crosses itself. The Velodyne data will process much quicker than the FARO data.

When Make Points completes, a report will be displayed in the Measure and Edit Control Points dialog. This report contains a lot of information. You can also edit the information on this dialog including changing how the point will be used (XYZ, XY, Z) or re-measuring the point manually. If anything is edited, it should eventually be saved (using Apply or OK), and then a new solution computed using the Compute button. If in doubt, click on Compute.

Return to the Control Point Analysis dialog. Set the Operations to the type of correction you need to apply: XY, Z, both, or none. Whatever is set here will then be performed for all subsequent point cloud operations.

Once the data is satisfactory, click on Compute, review and accept the final solution, and return to the main Point Cloud Export dialog and continue using Convert as normal. The corrections that have been enabled and computed will be applied directly to the point cloud during its formation.

The Control Point File

On the Control Point Analysis dialog, the Control button will now be active. It assumes you have a <projectFolder>\control.txt file.

The control.txt file must be in the following format: id x y z [ [pt=[control] | check] [plane=[ground] | wall] [pc=[XYZ] | XY | Z] ] [desc=]

Here the left bracket “[” and right bracket “]” enclose optional items.

The vertical bar “|” is used to delimiter selections, e.g. pt can be control or check.

Items enclosed by left and right brackets denote default values such as [XYZ] is the default type for pc.

Example: 100 2000.00 3000.00 400.0

  means id=100 XYZ=(2000, 3000, 400) and it's an XYZ ground control point (XYZ ground control are all defaults)

100 2000.00 3000.00 400.0 pc=Z

  Same as before except it is a Z (vertical) only point

100 2000.00 3000.00 400.0 pc=XY pt=check

  Now it's an XY (horizontal) check point

100 2000.00 3000.00 400.0 plane=wall

  Now it is a full (XYZ) control point on a wall.

The points always default to control, ground and XYZ if not specified. The keyword desc is short for description and must appear after all other keywords. All text shown after desc= will be considered the description.

Point ids should not have spaces. The data can be comma delimited (100,2000.00,3000.00,400.0).

Here’s a small sample:

  17   1312388.875 	721506.388 	1031.614
  18   1312396.262 	721531.141 	1032.201
  1000 1311445.699	721724.432	1035.97  pt=check
  1001 1311520.644	721621.143	1033.24  pt=check desc=this is the last point

The Control Point Analysis Dialog

When you click on the Control button the Control Point Analysis dialog will appear.

This dialog lets you automatically compute the Z corrections for the control points for the scanner selected on the prior dialog and also generates point patches for every point as it is found along the trajectory within the settings provided.

The Operations group allows you to control what type of correction to enable. The XY correction is separate from the Z correction as the points in each may be different and the corrections are done separately.

The Compute Corrections operation will enable the processing to cycle through all of the control points, compute patches around each, and compute the corrections in Z to apply. The output will be in the <Project Folder>\<Scanner Folder>\Control folder and will appear with the scanner name, point number, and GPS time of the point.

The Create Adjusted Patches operation will apply the corrections enabled and compute updated control point patches as they will appear in the adjusted point cloud. This is an unnecessary step but gives you a preview of the adjustment around the control points. The report should provide the same information but sometimes seeing the point cloud helps understand what happened. The output will be in the <Project Folder>\<Scanner Folder>\Adjusted folder. The point patches are named as already mentioned above.

The Time (secs) operations provide control over how the points will be handled for computing the corrections.

The Similarity Z and XY default to 0.2 seconds. This means any control points that appear within 0.2 seconds of each other in the point cloud will have their corrections averaged into a single correction. Generally this is a good idea for points crossing a roadway, like a cross-section. The time used should be a function of the speed traveled. Consider that 50mph is 73 feet/sec. So 0.2 seconds at 50mph means points within 0.2*73 ft, or roughly 14.6 ft, will have their corrections averaged. In low-speed, urban street scanning, points near stop lights that are not very carefully placed need to be considered in this selection. The time period is optionally different for the XY and Z correction for a good reason. We don't need nearly as many XY corrections as we need for Z due to GNSS computations (Z has a weaker geometry than XY).

The Point-to-Point Z and XY time is relative to the span over which the local correction will be applied. Generally a Z correction will not span a long period of time. Often 20 seconds is more than enough. However, this is selectable because every project is different. An example best illustrates how this works. If a single Z point correction is 1.0 ft and 20 seconds is entered, then the correction is applied from 0 to 1 ft and then to 0 again over a 40 second span. The XY span is generally much larger than a Z correction. Also by way of example, if traveling at 50mph a 20 second span would cover 20*73 ft/sec or 1460 ft (or about 480 meters). This rule should also be considered when planning your control point distribution. In theory the Point-to-Point times should be small (20 for Z and 300 for XY), however, in practice is often seems it is better to simply set them to 1000 for each. Practice and theory do not always have to correspond exactly.

The Start/Stop times simply limit the times in the trajectory that we are working with. The trajectory may have spanned hours of data but you may be interested in only a small portion. This can be used to restrict the search along the trajectory and save in processing time.

The two options in the When Restarting group are self-explanatory in function. If the Delete Existing Control Patches option is selected then all existing control point patches will be recomputed. This is handy for a complete reset. The Keep Existing Control Patches option allows for new entries in the control.txt file without having to recompute everything. This is very handy when there are lots of points present. Adding a few points can result in an update quickly.

The Control Point Patch Definition grouping controls how the control point patches will be created. The Delete Existing option is obviously the more expensive operation. Also note that when deleting not only the patches are deleted but any and all edits (including measurements) are deleted as well.

The Search Radius determines how big of a patch in XY will be generated around each point. The units are in project linear units (feet or meters). 5 feet or 1.6 meters is a pretty good sized patch. If you are driving really slow this can create a patch with a lot of points which can slow processing down so this should be considered when setting this parameter.

The Z Range is similar to the Search Radius except it only affects the Z search. This is helpful in eliminating overhangs, trees and shrubs, survey equipment, cars, etc. that might be over the control point, or even under the control if the points are on something above ground.

The Max XY distance from INS to Point option is in project units and controls how far from any given epoch in the trajectory we can look for and include a control point. For instance, an entry of 30 feet means we will search within 30 feet of the trajectory for all control points. The bigger this field is the longer the processing will take.

The Max Z distance from INS to Point is similar to the option above. Normally for roadway scans this will be 10 to 30 feet. When doing multi-deck bridge work you generally don't want to include control from a lower deck. Likewise, when doing low-altitude aerial this field needs to be increased accordingly.

The Radius for Auto Z calculation specifies the XY radius around a point in which the points in the area are used to determine the best Z value for the point. This number is generally 0.6 ft or slightly less depending largely upon the speed of travel. If moving fast and using the FARO this number may need to be set closer to 1.0 ft.

The Point Criterion fields are used to determine if a point is directly usable for an auto Z correction.

The Min # Points Required is generally set around 50. This means at least 50 points must be found within the point cloud patch within the Radius for Auto Z calculation specified distance or the point will not be considered (i.e. it will be marked as failed) in the correction calculation. We do not want to compute a correction based upon a low point density on the control.

The Max allowable dist from Scanner field defaults to 25 (feet, if meters reduce this field). This is similar to the Max XY distance from INS to Point except here it is used as a filter to eliminate points considered too far from the scanner. Generally points closer to the scanner are better used as control and points across several lanes of traffic should be used in subsequent scans.

The Z Residual Threshold is used to discard points that are generally too far away from the expected vertical placement. This is helpful in excluding cars parked over points, etc.

The Auto Z Sigma defaults to 3.5 and is used to eliminate points based upon their Z values. The 3.5 is a typical statistical multiplier. When computing the Auto Z value the average and standard deviation are computed for the points in the patch. The multiplier is then used to discard outliers in the data set to get the best Auto Z value.

The command buttons control what will happen with the settings.

The Apply button simply saves the results. The Cancel button closes the dialog without doing anything.

The Convert button does exactly the same thing as the button on the prior dialog. It is here to save a little confusion and time (Apply, Cancel, then Convert). When clicking on Convert on either dialog the corrections enabled on this dialog will be applied during the point cloud generation.

The Edit button activates the Measure and Edit Control Points dialog.

The Compute button applies all of the measurements and filters to build the necessary corrections. It will also generate a csv formatted report and finally displays the Measure and Edit Control Points dialog for a final review.

The Edit Control button invokes your system specified text editor for the control.txt file.

The Batch Control button activates the batch control point analysis tool on a specified folder (which is prompted for upon clicking on this button).

The Make Points button does all the real work. When selected, all of the control point patches are generated for the selected scanner and the points are filtered and processed into a correction table and a report. The point patches will be output by <scanner>_<point number>_<gps time>_001.<ext> to the <Project Folder>\<Scanner>\Control (if the operation is Compute Corrections otherwise to the Adjusted folder). These patches are available for viewing and comparison. During this process the Point Cloud Export (main) dialog is shown and the point id being processed should appear in the status bar. When all points have been processed, the Measure and Edit Control Points dialog will appear.

The patches in the Adjusted folder can be reviewed to see how the corrections affected the final output. Normally this is unnecessary but it can be a useful diagnostic tool.

Please note for multiple sensor systems, rather than computing separate corrections leading to misalignment of the resulting point clouds, either one of the data sets can be used to compute the corrections and then those corrections can be used for both data sets ensuring continual point cloud alignment. It is also possible to use one sensor to compute some corrections and a second sensor additional corrections. For instance, the Velodyne scanner may be better at locating the XY positions and the FARO better for measuring Z positions.

The Measure and Edit Control Points Dialog

This dialog is used to measure points and edit them as well. Be sure to explore the Right Click options on this dialog as they are very helpful in understanding the data and results.

  Point-Id Measure IsCheck Type Status As-Typ Survey-XYZ Measured-XYZ Residual-XYZ Corr-XYZ
  Dist LHS #-Pts Start-Time End-Time Plane Min-Z Delta-Z Adjusted-XYZ vAdjusted-XYZ
  Lidar-File Edited Description Reason-Failed

This a lot of data but everything has a use. This data is also stored in your project folder in a csv file for use in a spreadsheet program such as Excel. You can generate some very useful reports in Excel using Pivot Tables, etc.

Let's look at each column.

Point Id is simply the point id. It will likely appear multiple times if the vehicle passed by the point more than once.

Measure will actually appear as a green box with an arrow. Clicking this invokes the control point measurement dialog.

IsCheck is true or false. Obviously it is true if the point is a check point. Check points are not used to determine the amount of correction. Their purpose is to report how much correction is applied at that point as a test of the data quality.

Type is either XYZ, XY, or Z as specified in the control.txt file.

Status is either use, skip, failed, force, or NOT FOUND. Use means is will be used in the correction table. Skip means it will not be used for some reason (i.e. it will be withheld). Failed means it did not pass the criterion specified for point inclusion in the corrections. NOT FOUND means it did not appear anywhere within the point cloud. Force means that the point will unconditionally be used in the solution. Whenever you manually edit a point it automatically gets converted to Force.

One curiosity is a skipped check point – what is it? By skipping a check point you are simply able to group your calculations of check point statistics whereby you can exclude some of the check points from the overall statistics. It is possible that a check point is blundered and therefore should be skipped.

As Typ is XYZ, XY or Z. In the case of Auto Z calculation it will be Z. This type can be a subset of the point type meaning you cannot have a Type=XY and MeasuredAs=Z.

Survey XYZ are the control point XYZ values as found in the control.txt file.

Measured XYZ are the best estimate lidar point coordinates from the point cloud patch. In the case of Z only calculations the XY values are only good guides to demonstrate the dispersion of points around the control point. The program picks the closest lidar point found.

Residual XYZ are the residuals of the point (Measured XYZ - Survey XYZ). The smaller the better.

Corr XYZ are the negative (opposite) of the Residual XYZ values. The XY values will be 0 (blank) for auto Z points. These values are also driven by the As Typ field. Manually editing these fields in the corresponding ControlCorrection.xml file can also control the behavior of the adjustment (but is ill-advised). While Residual XYZ may show values for each coordinate, the Corr XYZ may not. The reason for this is a full XYZ point will have residuals (Residual XYZ) but it may be an As Typ Z point having only a Z correction.

Dist is the distance from the control point to the scanner/INS/trajectory.

LHS is true if the point is on the left-hand side of the trajectory otherwise it is false (right side).

# Pts is the number of points found in the patch that meet the criterion. Generally 50 or more is good.

Start/End Time is the GPS time at which a particular point patch was started and finally ended. This is largely determined by the points location and the trajectory along with the search radius used to create the point patch.

Plane is either ground or wall as specified in the control.txt file.

Min Z is the minimum Z value of all points found within the point patch.

dZ is the difference of the Max and Min Z. Again, it helps understand the point distribution.

Adjusted XYZ are the coordinates of the Measured XYZ values after correction.

v Adjusted XYZ are the residuals of the adjusted laser points (Adjusted XYZ - Survey XYZ). These values allow you to see exactly how much correction was applied to the original value and what difference remains with the original control afterwards. Generating corrected patches should demonstrate these same values.

Lidar File is the name of the lidar point cloud file for the point. It also contains the sensor name to help identify the source of the cloud.

Edited is a column used to simply flag lines that have been edited, but not yet saved.

Description is a free format text field containing a point description or other useful information.

Reason Failed is text field describing why a particular point has failed the filtering process and is being skipped.

Again, this data is saved as a csv file for easy viewing in Excel. The user more familiar with Excel will find this very convenient. Using the View::Freeze Panes::Freeze Top Row is useful to keep the header in place. Then using the Data::Sort and sorting by Status and Point Id is very helpful. Sorting by Start Time is also quite useful. Using pivot tables is also a major bonus. Having all of this information available in any easy to use format to help understand the data is very convenient and should lead to an optimum refined solution.

The fields that can be edited include the Status, As Typ, and Measured XYZ fields. These have been discussed in some detail above so only other important details will be discussed here.

The Status field can be set to skip to completely withhold a point from the solution.

The As Typ field can be used to set the point to a subset of the point Type. This is useful for using a Full XYZ point as a vertical Z-only point.

The Measured XYZ can be manually edited OR the point can be measured by double clicking the point row OR clicking the → (arrow) column.

The data is color coded for quick and easy analysis.

When a line has been edited the text on the line will turn blue until it has been saved. This lets you easily identify points you have already edited in some way, usually by means of a measurement.

Red lines appear for failed or skipped Status records.

Blue lines appear if the Status is not found.

Black lines appear if the Status is force (meaning use the point no matter what).

That sums up the dialog except for the command buttons.

All AsZ. This command resets all of the As Typ field values to Z (vertical only).

Print. Obviously, this is used to print the data. It will print as it is arranged.

Reset Layout. If you change the grid layout to a different format (sorting, grouping, etc.), you can reset to the original settings using this command.

Reset. This resets any changes made since the last time the data was saved.

Compute. This forces a new solution to be computed.

Apply. Click this to save the data and remain on the dialog.

Ok. Same as Apply but also dismisses the dialog.

Cancel. Dismiss the dialog and lose all changes since the last time anything was saved.

This dialog can also be navigated using the arrow keys.

The point can be selected for measurement by double clicking the line (after it is first selected), clicking on the Measure column, or by using the Ctrl-Enter keyboard option. This last option is very handy when rapidly measuring the entire list of points. Let’s look at this a little further.   When clicking on a point for measurement, the Graphics dialog will appear.

The Control Point Measurement Dialog

This dialog appears after activating control point measurement.

The dialog has a right click menu with a number of commands along with a menu bar and a toolbar. There are also keyboard commands to facilitate rapid measurement. Most of these commands need no explanation.

By default when this window is displayed it is set to Measure mode (that's a cursor with a red circle around it). You can exit the mode using a right click or selecting another command. You can also use M on the keyboard when the window has the focus to enter the Measure mode. In this mode a red circle is drawn to show the area of points that will be used to compute the Auto Z measurement. The XY coordinates come directly from the cursor placement. The radius of the area can be altered using the [ and ] keys. This is handy, especially to make the circle smaller when a point is near a road edge or has some sort of debris near the target.

The mouse wheel can be used to zoom in or out. Its direction can be controlled from the Right Click menu.

A left click results in a measurement being made with the points within the radius being highlighted. The Measure and Edit Control Points dialog will reflect the new measurement with new coordinates and residuals. The line will also change to a blue color to indicate it has been edited and not yet saved.

The window shows the current XY coordinates, point id and GPS time and has a number of viewing commands available. Each item has a tooltip to guide you on its purpose.

The graphics drawn over the lidar data include a large cross showing where the point was last measured.

A red circle, triangle, or circle and triangle is used to show where the survey values project into the raw point cloud data.

There is also a small dot drawn where the most recent point measurement was observed.

The points inside the measurement circle will also be highlighted upon measurement.

It is possible to leave the Graphics window up and load another point. This is fine but you should not load the same point (from a different time), at least not yet. You also shouldn’t load too many points this way as it will slow the graphics down eventually.

The Edit Options brings up the Graphic Options dialog. Of interest to us here is the Lidar Point Size. It defaults to 1 and ranges up to 10. This allows you to make the point sizes rather big. It is useful some times.

The File::Load LiDAR option allows you to browse and load additional lidar files. At the moment we only support xyzi text files. This can be handy when measuring a FARO point that does not have enough definition for good XY estimation. Use this command to load a matching Velodyne point. It should be from the same time (within 0.1 second). To do this you would first have to process all of the data for the Velodyne and then for the FARO. Eventually this will likely be improved to be a bit more automated. At the moment the Velodyne patches can be made much faster than the FARO patches and for positioning the Velodyne data is just as good as the FARO.

For non-distinct points, use the line-line intersection measurement command. You can enter this command using the keyboard L or using right click Measure and selecting the line line tools. You simply draw lines along the edges of the targets to find the intersection point, and consequent measurement.

Be sure to explore the right click menu. There are additional commands available for histogram manipulation and more.

Enabling and Disabling the Corrections

Once control points have been measured and analyzed the corrections that result can be easily enabled or disabled. Back on the Control Point Analysis dialog in the Operations section all of this can easily be controlled. The XY correction can be enabled or disabled and the same holds for the Z correction. Applying the corrections is literally as simple as enabling these two options and then processing the point cloud like normal.

Now, if you wish to change the range of the correction by altering values in the Time (secs) section, then you must also use the Compute button to have the affect of the change. For instance, if you change the Point-to-Point option from 20 seconds to 1000 seconds for the Z correction, the corrections must be recomputed using the Compute dialog button.

The ControlCorrections.xml file

There is one more file created during this process. In the <Project Folder> you will see the ControlCorrection.xml file. This file contains all of the information in the report CSV file as well as the correction table. It is absolutely required for any corrections.

Go to lidarusa/resources/trainingportal to view the control point tool document. (You will need a password from lidarusa in order to view the site)

control-point-tool.txt · Last modified: 2017/10/13 14:11 by rachel.waugh