PDAL has only ground/non-ground classifiers. Filters — pdal.io (which we already use).
I’m (roughly) following the method of:
Timo Hackel, Jan D Wegner, and Konrad Schindler. Fast semantic segmentation of 3d point clouds with strongly varying density. ISPRS Annals of the Photogrammetry, Remote Sensing and Spatial Information Sciences, Prague, Czech Republic, 3:177–184, 2016
Which is for the most part conveniently implemented in CGAL.
Sure, but there’s more options than that. You could use filter range to query RGB values, or height above ground values, or a std limit based off some clustering function for finding shapes, and you can tag those queries for classifying or probably set a new classification value (i havent tried this yet). Here’s me just messing around with different filters in a pipeline. This isn’t a polished example, but it tags the original PC, samples it for faster ground classification, then merges the classified PC to create a HAG which i then filter to the limits, -0.5m to 50m. I imagine with a few more lines of code you could tag vertical intervals based of some max z value and RGB value to stratify veg.
But your first attempt looks pretty great with that code!
Well a bit noisy; I think there’s lots of room for improvement. I’m going to replace random forests with gradient boosting and see how that performs, try various scales, plus I haven’t verified that all features are computed perfectly.