Skip to content

v0.2.1

Compare
Choose a tag to compare
@apburt apburt released this 01 Feb 14:00
· 14 commits to master since this release

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).