qsf() now checks QSM logs before returning and issues warnings when potential issues are detected, prompting users to inspect the results with qsf_log().qsm() now attempts to automatically repair some very rare topology issues, preventing qsf() from failing on certain edge cases.F- ix: CRS assignment with st_crs()<- was not returning objects with qsm and qsf classes
segment_instance() now detects and fixes over-segmentation, i.e. single
trees split across two or more tree IDs. This occurs occasionally for large
trees and especially often for buttress trees. The module is enabled by
default and can be turned off with:
arbor_parameters_default$instance$oversegmentation_solver_enabled = FALSE
If disabled at segmentation time, it can still be run afterwards, e.g. in post-processing, on an already segmented point cloud, with:
las <- resolve_oversegmentation(las)
qsf_write() can now merge an entire forest into a single combined
mesh file. Documentation for qsf_write() now explains, format by format, how
well individual trees stay distinguishable when several QSMs are combined
into one mesh file.
qsf_write(qsf, "forest.obj")
New QSF file format. When writing QSMs to .qsm files, qsf_write() now also
creates a .qsf file that indexes all the .qsm files. A QSF can be reloaded with
qsf_read() by reading the .qsf index file.
qsf_write(qsf, "forest.qsf")
qsf <- qsf_read("forest.qsf")
qsf_log() has been redesigned. It is easier to read, and easier to manipulate.
New function qsf_filter() with user-friendly wrappers that allow to filter QSMs in the QSF
object by log types, by DBH, by height. E.g. :
qsf_filter_ok(qsf) # trees with no log entry at all
qsf_filter_sapling(qsf) # saplings according to arbor's definition
qsf_filter_flagged(qsf) # trees with at least one log entry, any kind
qsf_filter_warnings(qsf) # trees carrying at least one warning
qsf_filter_broken() # automatically detected as broken trees.
# [...] and more
qsf_tree() produces a more comprehensive output.
find_seeds() no longer throw the error "No circle detected in wood slices",
No shape detection is no longer an issue.Fix #15: Prevent QSM generation failure on non-constructible skeletons by defaulting to a zero-volume placeholder edge.
Fix: QSM messages were not written in .qsm files. They are now recorded
properly.
Fix: qsf() was not propagating the CRS from the point cloud to the QSMs + fix various attribution and access to QSM and QSF CRS with st_crs().
Added details about tree excluded by qsf() in the manual page and the arbor's book
New book section about the new over-fitting solver
New book section about the qsf log analysis
New book section about the qsm flowchart
Public release