Skip to content

Releases: apburt/treeseg

v0.2.2

31 May 20:06
Compare
Choose a tag to compare

DOI

Notes

  • This release includes a tutorial demonstrating the usage of treeseg.

  • segmentstem and getcrownvolume have been reimplemented to provide more robust results. segmentstem no longer attempts to locate the base of the crown, and its output can contain some branching. The base of the volume segmented by getcrownvolume is now user-defined (e.g., 0.66 * the height of the cloud output from segmentstem). These stem and crown clouds are then concatenated, with any duplicate points removed using the new removeDuplicatePoints function.

  • The buildTree function now precalculates whether the bounding boxes of each region intersect via the new precalculateIntersections function. This decreases compute time at the expense of increased RAM requirements. There is substantial scope to optimise this function.

  • The stems output from findstems are now ordered descending by diameter.

v0.2.1

01 Feb 14:00
Compare
Choose a tag to compare

DOI

Notes

  • Downsampling is by default now undertaken using an octree, rather than a voxel grid. This avoids the potential for an integer overflow if either (or both) the voxel size is too small or the 3D space is too large. The optional bool 'octree' in the downsample function defined in treeseg.cpp can be set to false if the voxel approach is preferred.

  • The DEM generated in getdemslice previously assumed that the point in each DEM tile with the lowest z-coordinate constituted the ground. This could be problematic if the cloud contained noise (e.g., ghosting from returns from water). The ground is now determined by the point specified by a user-defined percentile, when the points are arranged from smallest to largest z-coordinate (default: 2.5th).

  • The classification and segmentation of ground returns in segmentstem is now derived from a plane fitted via SACMODEL_NORMAL_PARALLEL_PLANE, rather than SACMODEL_PLANE. This provides more robust results.

  • The preprocessor macro XYZRRDRS has been defined in treeseg_pointtype.h, which influences the definition of PointTreeseg. By default this is set to false, and PointTreeseg = pcl::PointXYZ. If the user is using RIEGL V-Line scan data, this can be optionally set to true, and the attributes range, reflectance, deviation, return number and scan number will be stored in the point cloud. This takes effect across the binaries (including rxp2pcd and pcdPointTreeseg2txt (previously pcd2xyz)).

  • Thinning was previously undertaken by first downsampling the original cloud using a voxel grid, and subsequently preserving the point in the original cloud that was closest, in terms of Euclidean distance, to the centroid of each voxel. If XYZRRDRS is defined as true, it is likely that the user would prefer to select the point to be preserved based on a different metric (e.g., the goodness of the range estimate; deviation). By default, if XYZRRDRS is defined as true, the point with the smallest deviation will now be preserved. If multiple points inside the particular voxel match this criteria, the closest to the voxel centroid will be preserved. The function thin in treeseg.cpp can be readily modified if an alternative attribute is preferred to define the selection (e.g., reflectance). The optional bool 'preservePointClosestToVoxelCentroid' can be set to true if the original behaviour is preferred.

  • The removeFarRegions function used in segmentcrown has been rewritten and reimplemented. This should reduce the overhead of the subsequent buildTree function.

  • The buildTree function used in segmentcrown has also been rewritten, to reduce the likelihood of errors of omission, at the expense of increased errors of commission. This is in preparation for the next version of treeseg to include some element of machine learning, to assist in the decision of whether some region belongs to a particular tree.

  • Optimisations including #23, #24.

  • Bug fixes including #14, #18, #19 and #20.

  • Some general housekeeping including better practices (e.g., function parameter passing: in parameters pass by value or const reference, in-out parameters by reference), and making some functions more flexible (e.g., regionSegmentation).

v0.2.0

03 Apr 13:15
Compare
Choose a tag to compare

DOI

Notes

  • A custom point type, PointTreeseg, has been introduced across the libraries and executables. This permits flexibility in parsing additional return attributes (e.g., range / reflectance / scan number etc). By default PointTreeseg = PointXYZ, but can be readily modified in treeseg_pointtype.h using the example template.

  • If additional point data are parsed, then downsampling behaviour may be undesirable (i.e., losing and/or aggregating these additional data). thin.cpp is an alternative to downsample.cpp, that reduces point cloud size whilst preserving additional return attributes.

  • The larger-area (plot-level) point cloud is now expected to be a series of individual tiled point clouds (n >= 1). rxp2pcd has been modified to output these tiles, with tile area (m2) defined by an input argument. Each executable has also been updated to expect these tiles. This is something of a workaround for the issue of requiring large contiguous blocks of unoccupied RAM to load large point clouds (approx. >4GB).

  • Updated rxp2pcd for compatibility with RiVLIB 2.5.x.

  • The separation of wood and leaf returns in segmentcrown via libleafsep is now optional via boolean input argument.

  • Various bug fixes.

Initial development release

25 Oct 17:07
1600868
Compare
Choose a tag to compare

DOI

Release as described by MEE applications paper.