R: Compute the hull of each tree.

delineate_crowns {lidR} | R Documentation

## Compute the hull of each tree.

### Description

Compute the hull of each segmented tree. The hull can be convex, concave or a bounding box (see details and references).

### Usage

    delineate_crowns(
      las,
      type = c("convex", "concave", "bbox"),
      concavity = 3,
      length_threshold = 0,
      func = NULL,
      attribute = "treeID"
    )

### Arguments

`las` | An object of class LAS or LAScatalog.
`type` | character. Hull type. Can be 'convex', 'concave' or 'bbox'.
`concavity` | numeric. If `type = "concave"`, a relative measure of concavity. 1 results in a relatively detailed shape, Infinity results in a convex hull.
`length_threshold` | numeric. If `type = "concave"`, when a segment length is below this threshold, no further detail is added. Higher values result in simpler shapes.
`func` | formula. An expression to be applied to each tree. It works like in grid_metrics voxel_metrics or tree_metrics and computes, in addition to the hulls a set of metrics for each tree.
`attribute` | character. The attribute where the ID of each tree is stored. In lidR, the default is "treeID".

### Details

The concave hull method under the hood is described in Park & Oh (2012). The function relies on the concaveman function.

### Value

A `SpatialPolygonsDataFrame`. If a tree has less than 4 points it is not considered.

### Working with a `LAScatalog`

This section appears in each function that supports a LAScatalog as input.

In `lidR` when the input of a function is a LAScatalog the function uses the LAScatalog processing engine. The user can modify the engine options using the available options. A careful reading of the engine documentation is recommended before processing `LAScatalogs`. Each `lidR` function should come with a section that documents the supported engine options.

The `LAScatalog` engine supports `.lax` files that significantly improve the computation speed of spatial queries using a spatial index. Users should really take advantage a `.lax` files, but this is not mandatory.

### Supported processing options

Supported processing options for a `LAScatalog` (in bold). For more details see the LAScatalog engine documentation:

- chunk size: How much data is loaded at once.

- chunk buffer*: Mandatory to get a continuous output without edge effects. The buffer is always removed once processed and will never be returned either in R or in files.

- chunk alignment: Align the processed chunks.

- progress: Displays a progression estimation.

- output files: Supported templates are `{XLEFT}`, `{XRIGHT}`, `{YBOTTOM}`, `{YTOP}`, `{XCENTER}`, `{YCENTER}` `{ID}` and, if chunk size is equal to 0 (processing by file), `{ORIGINALFILENAME}`.

- select: Load only attributes of interest.

- filter: Read only points of interest.

### References

Park, J. S., & Oh, S. J. (2012). A new concave hull algorithm and concaveness measure for n-dimensional datasets. Journal of Information science and engineering, 28(3), 587-600.

### Examples

    LASfile <- system.file("extdata", "MixedConifer.laz", package="lidR")
    poi = "-drop_z_below 0 -inside 481280 3812940 481320 3812980"
    las = readLAS(LASfile, select = "xyz0", filter = poi)

    # NOTE: This dataset is already segmented

    #plot(las, color = "treeID", colorPalette = pastel.colors(200))

    # Only the hulls
    convex_hulls = delineate_crowns(las)
    plot(convex_hulls)

    # The hulls + some user-defined metrics
    convex_hulls = delineate_crowns(las, func = ~list(Zmean = mean(Z)))
    convex_hulls

    # The bounding box
    bbox_hulls = delineate_crowns(las, "bbox")
    plot(bbox_hulls)

    # With concave hull
    concave_hulls = delineate_crowns(las, "concave")
    plot(concave_hulls)

    spplot(convex_hulls, "ZTOP")
    spplot(convex_hulls, "Zmean")

[Package lidR version 3.2.2 Index]