Algorithms for tree detection, noise removal, stem modelling, 3D visualization and manipulation of terrestrial 'LiDAR' (but not only) point clouds, currently focusing on high performance applications for forest inventory - being fully compatible with the 'LAS' infrastructure provided by 'lidR'. For in depth descriptions of the stem classification and segmentation algorithms check out Conto et al. (2017)
High performance R functions for forest inventory based on Terrestrial Laser Scanning (but not only) point clouds.
This package is a refactor of the methods described in this paper.
The algorithms were rewritten in C++ and wrapped in R functions through
Rcpp. The algorithms were reviewed and enhanced, new functionalities introduced and the rebuilt functions now work upon
LAS objects infrastructure.
This is an ongoing project and new features will be introduced often. For any questions or comments please contact me through github. Suggestions, ideas and references of new algorithms are always welcome - as long as they fit into TreeLS' scope.
lidRwrappers for writing TLS data with extra header fields
install.packages('devtools', dependencies = TRUE)from the R console
On the R console, run:
For anyone still interested in the old implementations of this library (fully developed in R, slow but suitable for research), you can still use it. In order to do it, uninstall any recent instances of
TreeLS and reinstall the legacy version:
Not all features from the old package were reimplemented using
Rcpp, but I'll get there.
Example of full processing pipe until stem segmentation for a forest plot:
library(TreeLS) # open artificial sample file file = system.file("extdata", "pine_plot.laz", package="TreeLS") tls = readTLS(file) # normalize the point cloud tls = tlsNormalize(tls, keepGround = T) plot(tls, color='Classification') # extract the tree map from a thinned point cloud thin = tlsSample(tls, voxelize(0.05)) map = treeMap(thin, map.hough(min_density = 0.03)) # visualize tree map in 2D and 3D xymap = treePositions(map, plot = TRUE) plot(map, color='Radii') # classify stem points tls = stemPoints(tls, map) # extract measures seg = stemSegmentation(tls, sgmt.ransac.circle(n = 15)) # view the results tlsPlot(tls, seg) tlsPlot(tls, seg, map)