polylidar.polylidarutil.plane_filtering.filter_planes_and_holes

polylidar.polylidarutil.plane_filtering.filter_planes_and_holes(polygons, points, config_pp, rm=None)

Extracts the plane and obstacles returned from polylidar. This function performs post-processing of the Polygons returned by Polylidar3D using the Shapely library. If the polygons are 3D you must provide a scipy rotation matrix such that the polygon align with they XY plane (Shapely can only handle 2D polygons with XY coordinates).

The basic steps are:
  • Simplification of Polygon by config_pp[‘simplify]

  • Positive buffer of Polygon by config_pp[‘positive_buffer]

  • Negative Buffer of POlygons by config_pp[‘negative_buffer]

  • Simplification of Polygon by config_pp[‘simplify]

  • Remove polygons whose area is less or greater than data in config_pp[‘filter][‘plane_area’]

  • Remove holes whose vertices are less than data in config_pp[‘filter][‘hole_vertices’]

  • Remove holes whose area is less or greater than data in config_pp[‘filter][‘hole_area’]

It then returns the shapely polygons of the polygons and holes (obstacles)

An example config_pp

{
    positive_buffer: 0.005 # m, Positively expand polygon.  Fills in small holes
    negative_buffer: 0.03 # m, Negative buffer to polygon. Expands holes and constricts outer hull of polygon
    simplify: 0.02  # m, simplify edges of polygon
    filter: # obstacles must have these characteristics
        hole_area:
            min: 0.025   # m^2
            max: 0.785 # m^2
        hole_vertices:
            min: 6
        plane_area:
            min: .5 # m^2
}
Parameters
  • polylidar (polygons {list[Polygons]} -- A list of polygons returned from) –

  • array (points {ndarray} -- MX3) –

  • filtering (config_pp {dict} -- Configuration for post processing) –

  • 2D (rm {scipy.spatial.RotationMatrix} -- Rotation matrix applied to 3D polygons to make) –

Returns

tuple – A list of plane shapely polygons and a list of holes in polygons