class mp2p_icp_filters::FilterPlanePatches
Overview
Extracts large planar patches from a point layer and appends them to metric_map_t::planes, each with the surface area it was fitted from.
Unlike FilterEdgesPlanes, which labels individual points as planar in the LOAM sense, this produces actual patches: a plane equation, a centroid, and an extent. That is what an estimator needs when it has to weigh one surface against another, e.g. to read gravity off the assumption that large patches in a built environment are plumb or level.
The extraction is greedy and seeded by per-point normals: voxel-downsample, estimate a normal for every remaining point once from its k nearest neighbors, then repeatedly take the seed whose plane holds the most points, refit that plane by PCA on its inliers, and remove them. A patch is kept only if its smaller in-plane extent reaches min_span, which is what separates a wall from a sliver fitted across a cluttered surface.
Deterministic by construction: the seeds are a fixed stride through the surviving points rather than a random sample, so two runs over the same scan produce byte-identical patches regardless of thread count or of how the work was scheduled.
#include <FilterPlanePatches.h> class FilterPlanePatches: public mp2p_icp_filters::FilterBase { public: // structs struct Parameters; // fields Parameters params; // methods virtual void filter(mp2p_icp::metric_map_t& inOut) const; };
Inherited Members
public: // methods Parameterizable& operator = (const Parameterizable&); Parameterizable& operator = (Parameterizable&&); virtual void filter(mp2p_icp::metric_map_t& inOut) const = 0; FilterBase& operator = (const FilterBase&); FilterBase& operator = (FilterBase&&);
Fields
Parameters params
Algorithm parameters
Methods
virtual void filter(mp2p_icp::metric_map_t& inOut) const
See docs above for FilterBase.