remove_flightline_bias: Correct biased point class frequency in overlap between...

View source: R/overlap_functions.R

remove_flightline_biasR Documentation

Correct biased point class frequency in overlap between flight lines

Description

This function can be used to correct for biased representation of one or more point classes in areas where adjacent flight lines overlap. Such biases can be caused by data post-processing where flight line overlap is removed for some, but not all, point classes. Why anyone would want to do that is a complete mystery, but it was commonly seen in airborne LiDAR data for New South Wales, Australia, prior to 2020 where overlap was removed for all but class 5 (high vegetation) points resulting in incorrect vegetation cover estimates. If the overlap is either left for all point classes, or removed for all classes, then vegetation cover and other ratio-based metrics will be unbiased.

Usage

remove_flightline_bias(
  las,
  algorithms = c("spline", "nibble"),
  classes = 5,
  res.spline = 10,
  res.nibble = res.spline/2,
  buffer = 100,
  min.points = 1000,
  ...
)

Arguments

las

A LAS object, e.g. imported using prepare_tile.

algorithms

A vector of algorithm names. Valid options are 'spline' and 'nibble'. This argument can be used to restrict processing to just one algorithm. If both are specified (the default) the spline algorithm will always be tried first as it tends to produce better results but can fail if flight line orientation is inconsistent.

classes

Vector of one or more integer codes for point classes to consider. Only points belonging to these classes will be removed.

res.spline

Raster cell size to use when identifying flight line overlap areas using the spline algorithm. The default (10) assumes map units are metres.

res.nibble

Raster cell size to use when identifying and removing overlap areas using the nibble algorithm. The default is half of the res.spline value if specified, otherwise 5 (which assumes map units are metres).

buffer

Width of a buffer (map units) placed around the tile to ensure that, for the 'spline' algorithm, the boundaries partitioning overlap areas extend beyond all points. Default value is 100 which assumes map units are metres.

min.points

The minimum number of points in the relevant point classes for a flight line to be considered. Flight lines with fewer points are ignored. If less than two flight lines have sufficient points the LAS object is returned unchanged.

...

Additional arguments to pass to link{get_flightline_info} when checking for consistent north-south or east-west orientation.

Details

This function identifies areas of overlap between adjacent flight lines based on the specified point classes; determines a mid-line boundary between the flight lines within each area; and removes points from the data such that the remaining points from each flight line are strictly on one side of the boundary. Two algorithms are available: the first ('spline') identifies a vector boundary in continuous space; the second ('nibble') uses a raster approach that is more robust in the face of inconsistent flight line shapes and orientations, but can result in minor image artefacts in the form of reduced point density. By default, the spline boundary algorithm is tried first and, only if this fails, the nibble algorithm is applied. See details below. Caution: You should only use this function after checking that there actually is a bias in point class representation within any overlap areas using the function check_overlap_bias, and be careful to specify the correct classes to consider via the classes argument. If no bias exists in the data, running this function for a subset of point classes will create one!

The spline boundary algorithm begins by identifying areas of overlap in raster space, then fitting a spline vector boundary along the middle of each area, and removes points from each side that belong to the flight line (mainly) on the other side. Before searching for, and removing, overlaps the function checks that all flight lines have consistent orientation: either all north-south or all are east-west, allowing for some leeway. If this is not the case, the algorithm will not proceed.

The nibble algorithm also begins by identifying areas of overlap in raster space. Next it creates a raster where cells outside overlap areas are set to the integer flight line ID, while cells in overlap areas are set to missing values. A 'nibble' process (inspired by the ArcGIS raster algorithm of the same name) is then iteratively applied to replace the missing values with the majority value of neighbouring cells. This tends to produce a similar partitioning to the vector boundary algorithm for overlap areas that span the image, but also deals with irregular flight line orientations and shapes. The disadvantage of this algorithm is that it can leave narrow trails of reduced point density across the image if any pairs of flight lines abut rather than overlap. However, this effect can be minimized by working at a finer raster resolution.

Value

A modified copy of the input LAS object.

See Also

check_flightline_orientation, check_overlap_bias, get_flightline_info, get_flightline_polygons, plot_flightline_points


mbedward/CERMBlidar documentation built on April 10, 2024, 2:05 p.m.