Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

range_correction

Intensity normalization algorithm


Description

This function is made to be used in normalize_intensity. It corrects intensity with a range correction according to the formula (see references):

Inorm = Iobs * (R/Rs)^f

To achieve the range correction the position of the sensor must be known at different discrete times. Using the 'gpstime' of each point, the position of the sensor is interpolated from the reference and a range correction is applied.

Usage

range_correction(sensor, Rs, f = 2.3, gpstime = "gpstime", elevation = "Z")

get_range(las, sensor, gpstime = "gpstime", elevation = "Z")

Arguments

sensor

SpatialPointsDataDrame object containing the coordinates of the sensor at different timepoints t. The time and elevation are stored as attributes (default names are 'gpstime' and 'Z'). It can be computed with track_sensor.

Rs

numeric. Range of reference.

f

numeric. Exponent. Usually between 2 and 3 in vegetation contexts.

gpstime, elevation

character. The name of the attributes that store the gpstime of the position and the elevation of the sensor respectively. If elevation = NULL the Z coordinates are searched in the third column of the coordinates matrix of the SpatialPointsDataFrame. This is useful if read from a format that supports 3 coordinates points.

las

an object of class LAS. get_range() is a regular function documented here for convenience.

References

Gatziolis, D. (2011). Dynamic Range-based Intensity Normalization for Airborne, Discrete Return Lidar Data of Forest Canopies. Photogrammetric Engineering & Remote Sensing, 77(3), 251–259. https://doi.org/10.14358/pers.77.3.251

Examples

# A valid file properly populated
LASfile <- system.file("extdata", "Topography.laz", package="lidR")
las <- readLAS(LASfile)

# pmin = 15 because it is an extremely tiny file
# strongly decimated to reduce its size. There are
# actually few multiple returns
sensor <- track_sensor(las, Roussel2020(pmin = 15))

# Here the effect is virtually null because the size of
# the sample is too small to notice any effect of range
las <- normalize_intensity(las, range_correction(sensor, Rs = 2000))

# This might be useful for some applications
R = get_range(las, sensor)

lidR

Airborne LiDAR Data Manipulation and Visualization for Forestry Applications

v3.1.2
GPL-3
Authors
Jean-Romain Roussel [aut, cre, cph], David Auty [aut, ctb] (Reviews the documentation), Florian De Boissieu [ctb] (Fixed bugs and improved catalog features), Andrew Sánchez Meador [ctb] (Implemented wing2015() for segment_snags()), Bourdon Jean-François [ctb] (Contributed to Roussel2020() for track_sensor()), Gatziolis Demetrios [ctb] (Implemented Gatziolis2019() for track_sensor())
Initial release
2021-03-11

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.