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.