TreeLS

R functions for processing individual tree TLS point clouds

https://github.com/tiagodc/TreeLS

Science Score: 39.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 2 DOI reference(s) in README
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (19.1%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

R functions for processing individual tree TLS point clouds

Basic Info
  • Host: GitHub
  • Owner: tiagodc
  • License: gpl-3.0
  • Language: C++
  • Default Branch: master
  • Size: 49.1 MB
Statistics
  • Stars: 90
  • Watchers: 10
  • Forks: 29
  • Open Issues: 23
  • Releases: 0
Created about 10 years ago · Last pushed about 1 year ago
Metadata Files
Readme Changelog License

README.md

GPLv3 License GitHub tag (latest by date)

TreeLS

High performance R functions for forest data processing based on Terrestrial Laser Scanning (but not only) point clouds.

Description

This package is a refactor of the methods described in this paper, among many other features for 3D point cloud processing of forest environments.

Most algorithms are written in C++ and wrapped in R functions through Rcpp. TreeLS is built on top of lidR, using its LAS infrastructure internally for most methods.

For any questions, comments or bug reports please submit an issue here on GitHub. Suggestions, ideas and references of new algorithms are always welcome - as long as they fit into TreeLS' scope.

TreeLS is currently on v2.0.2. To install it from an official mirror, use: install.packages("TreeLS"). To install the most recent version, check out the Installation from source section below.

News

  • August/2020: Version 2.0 is finally available! It's a major release, introducing several new functionalities, bug fixes, more robust estimators for noisy clouds and more flexible plotting. All functionalities from older versions are now available and optimized, so there should be no need to use legacy code anymore. The scope of application of TreeLS has become much wider in this version, specially due to the introduction of functions like fastPointMetrics and shapeFit, making it much easier for researchers to assess point cloud data in many contexts and develop their own methods on top of those functions. For a comprehensive list of the updates check out the CHANGELOG.

  • March/2019: TreeLS is finally available on CRAN and is now an official R package.

Main functionalities

  • Tree detection at plot level
  • Tree region assignment
  • Stem detection and denoising
  • Stem segmentation
  • Forest inventory
  • Fast calculation of point features
  • Research basis and other applications
  • 3D plotting and manipulation

Installation from source

Requirements

  • Rcpp compiler:
    • on Windows: install Rtools for your R version - make sure to add it to your system's path
    • on Mac: install Xcode
    • on Linux: be sure to have r-base-dev installed

Install TreeLS latest version

On the R console, run: remotes::install_github('tiagodc/TreeLS')

Usage

Example of full processing workflow from reading a point cloud file until stem segmentation of a forest plot: ``` library(TreeLS)

open sample plot file

file = system.file("extdata", "pine_plot.laz", package="TreeLS") tls = readTLS(file)

normalize the point cloud

tls = tlsNormalize(tls, keep_ground = F) x = plot(tls)

extract the tree map from a thinned point cloud

thin = tlsSample(tls, smp.voxelize(0.02)) map = treeMap(thin, map.hough(mindensity = 0.1), 0) addtreeMap(x, map, color='yellow', size=2)

classify tree regions

tls = treePoints(tls, map, trp.crop()) addtreePoints(x, tls, size=4) addtreeIDs(x, tls, cex = 2, col='yellow')

classify stem points

tls = stemPoints(tls, stm.hough()) add_stemPoints(x, tls, color='red', size=8)

make the plot's inventory

inv = tlsInventory(tls, dmethod=shapeFit(shape='circle', algorithm = 'irls')) addtlsInventory(x, inv)

extract stem measures

seg = stemSegmentation(tls, sgt.ransac.circle(n = 20)) add_stemSegments(x, seg, color='white', fast=T)

plot everything once

tlsPlot(tls, map, inv, seg, fast=T)

check out only one tree

tlsPlot(tls, inv, seg, tree_id = 11)

------------------------------------------

overview of some new methods on v2.0

------------------------------------------

file = system.file("extdata", "pine.laz", package="TreeLS") tls = readTLS(file) %>% tlsNormalize()

calculate some point metrics

tls = fastPointMetrics(tls, ptm.knn()) x = plot(tls, color='Verticality')

get its stem points

tls = stemPoints(tls, stm.eigen.knn(voxelspacing = .02)) addstemPoints(x, tls, size=3, color='red')

get dbh and height

dbhalgo = shapeFit(shape='cylinder', algorithm = 'bf', n=15, inliers=.95, zdev=10) inv = tlsInventory(tls, hp = .95, dmethod = dbhalgo) add_tlsInventory(x, inv)

segment the stem usind 3D cylinders and getting their directions

seg = stemSegmentation(tls, sgt.irls.cylinder(n=300)) add_stemSegments(x, seg, color='blue')

check out a specific tree segment

tlsPlot(seg, tls, segment = 3)

```

Owner

  • Name: Tiago de Conto
  • Login: tiagodc
  • Kind: user

Forester, data scientist and software developer - currently focusing on fields related to forest monitoring, remote sensing and point cloud processing.

GitHub Events

Total
  • Watch event: 5
  • Issue comment event: 3
  • Push event: 2
  • Pull request event: 2
  • Fork event: 2
Last Year
  • Watch event: 5
  • Issue comment event: 3
  • Push event: 2
  • Pull request event: 2
  • Fork event: 2

Committers

Last synced: 11 months ago

All Time
  • Total Commits: 337
  • Total Committers: 7
  • Avg Commits per committer: 48.143
  • Development Distribution Score (DDS): 0.092
Past Year
  • Commits: 2
  • Committers: 2
  • Avg Commits per committer: 1.0
  • Development Distribution Score (DDS): 0.5
Top Committers
Name Email Commits
tiagodc t****9@y****r 306
Nic s****s@h****t 17
tiagodc t****l@g****m 6
Tiago de Conto t****c@T****l 5
Jean-Romain J****n 1
Caio Hamamura c****a@g****m 1
Anthony Marcozzi a****i@g****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 10 months ago

All Time
  • Total issues: 53
  • Total pull requests: 4
  • Average time to close issues: 27 days
  • Average time to close pull requests: 5 months
  • Total issue authors: 31
  • Total pull request authors: 4
  • Average comments per issue: 2.77
  • Average comments per pull request: 0.5
  • Merged pull requests: 4
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 1
  • Pull requests: 1
  • Average time to close issues: 7 days
  • Average time to close pull requests: 3 months
  • Issue authors: 1
  • Pull request authors: 1
  • Average comments per issue: 2.0
  • Average comments per pull request: 2.0
  • Merged pull requests: 1
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • mavavilj (6)
  • stefanoch90 (5)
  • mansi-aggarwal-2504 (5)
  • Jean-Romain (3)
  • npuletti (3)
  • jdonager (3)
  • spokswinski (2)
  • karasinski88 (2)
  • bbrede (2)
  • timwh (1)
  • aasthaagarwal17 (1)
  • mayhaw (1)
  • LiuQW-YNnormal (1)
  • sweco-sekrsv (1)
  • tomishninja (1)
Pull Request Authors
  • spono (2)
  • caiohamamura (1)
  • amarcozzi (1)
  • Jean-Romain (1)
Top Labels
Issue Labels
bug (7) question (6) help wanted (3) enhancement (1)
Pull Request Labels

Dependencies

DESCRIPTION cran
  • R >= 3.3.0 depends
  • data.table >= 1.12.0 depends
  • lidR >= 3.0.0 depends
  • magrittr >= 1.5 depends
  • RCSF * imports
  • benchmarkme * imports
  • deldir * imports
  • dismo * imports
  • glue * imports
  • mathjaxr * imports
  • nabor * imports
  • raster * imports
  • rgl * imports
  • rlas * imports
  • sp * imports