TreeLS (version 1.0)

map.hough: Tree mapping algorithm: Hough Transform

Description

This function is meant to be used inside treeMap. It applies an adapted version of the Hough Transform for circle search. Mode details are given in the sections below.

Usage

map.hough(hmin = 1, hmax = 3, hstep = 0.5, pixel_size = 0.025,
  max_radius = 0.25, min_density = 0.1, min_votes = 3)

Arguments

hmin, hmax

numeric - height thresholds within the point cloud in which circle search will be performed.

hstep

numeric - height interval to perform circle search.

pixel_size

numeric - pixel side length to discretize the point cloud layers while performing the Hough Transform circle search.

max_radius

numeric - approximately the largest stem cross section radius expected in the point cloud.

min_density

numeric - between 0 and 1 - minimum point density within a pixel evaluated on the Hough Transform - i.e. only dense point clousters will undergo circle search.

min_votes

integer - Hough Transform parameter - minimum number of circle intersections over a pixel to assign it as a circle center candidate.

<code>LAS@data</code> Special Fields

Each point in the LAS object output represents a pixel center that is possibly also a stem cross-section center.

The variables describing each point in the output are:

  • Intensity: number of votes received by that point

  • PointSourceID: unique stem segment ID (among all trees)

  • Keypoint_flag: if TRUE, the point is the most likely circle center of its stem segment (PointSourceID)

  • Radii: approximate radius estimated by that point - always a multiple of the pixel_size

  • TreeID: unique tree ID of the point

  • TreePosition: if TRUE, the point represents its tree's approximate coordinate

Adapted Hough Transform

The Hough Transform circle search algorithm used in TreeLS applies a constrained circle search on discretized point cloud layers. Tree-wise, the circle search is recursive, in which the search for circle parameters of a stem section is constrained to the feature space of the stem section underneath it. Initial estimates of the stem's feature space are performed on a baselise stem segment - i.e. a low height interval where a tree's bole is expected to be clearly visible in the point cloud. The algorithm is described in detail by Conto et al. (2017).

This adapted version of the algorithm is very robust against outliers, but not against forked or leaning stems.

Tree Selection

An initial tree filter is used to select probable trees in the input point cloud. Parallel stacked layers, each one as thick as hstep, undergo the circle search within the hmin/hmax limits. On every layer, pixels above the min_votes criterion are clustered, forming probability zones. Probability zones vertically aligned on at least 3/4 of the stacked layers are assigned as tree occurrence regions and exported in the output map.

References

Conto, T. ; Olofsson, K. ; Gorgens, E. B. ; Rodriguez, L. C. E. ; Almeida, G. Performance of stem denoising and stem modelling algorithms on single tree point clouds from terrestrial laser scanning. Computers and Electronics in Agriculture, v. 143, p. 165-176, 2017.

Examples

Run this code
# NOT RUN {
file = system.file("extdata", "model_boles.laz", package="TreeLS")
tls = readTLS(file)
plot(tls)

## build a 3D map of tree occurrences
map = treeMap(tls)
plot(map, color='Radii')

## get a 2D representation of the tree map
xymap = treePositions(map)
head(xymap)
# }

Run the code above in your browser using DataLab