• Stars
    star
    301
  • Rank 138,451 (Top 3 %)
  • Language
    C++
  • License
    MIT License
  • Created almost 6 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Polylidar3D - Fast polygon extraction from 3D Data

Polylidar3D

Polygon Extraction from 2D Point Sets, Unorganized/Organized 3D Point Clouds, and Triangular Meshes

Key Features β€’ Documentation β€’ Use Cases β€’ Credits β€’ Related β€’ Citations β€’ License

Docs Cite 2D Cite 3D

Key Features

  • Fast (Multi)Polygon Extraction from multiple sources of 2D and 3D Data
    • Written in C++ for portability
    • Extremely fast single-threaded but includes CPU multi-threading using data and task-based parallelism
    • Polygons with holes may be returned
  • Python3 bindings using PyBind11
    • Low overhead for calling python/cpp interface (no copying of point cloud data)
  • Python and C++ Examples
    • Examples from 2D point sets, unorganized 3D point clouds, organized 3D point clouds (i.e., range images), and user provided meshes
  • Cross platform
    • Windows and Linux ready

Polylidar3D is a non-convex polygon extraction algorithm which takes as input either unorganized 2D point sets, unorganized 3D point clouds (e.g., airborne LiDAR point clouds), organized 3D point clouds (e.g., range images), or user provided meshes. In 3D, the non-convex polygons extracted represent flat surfaces in an environment, while interior holes represent obstacles on said surfaces. The picture above provides an examples of Polylidar3D extracting polygons from a 2D point set and a 3D triangular mesh; green is the concave hull and orange are interior holes. Polylidar3D outputs planar triangular segments and their polygonal representations. Polylidar3D is extremely fast, taking as little as a few milliseconds and makes use of CPU multi-threading and GPU acceleration when available.

Here is a small introductory blog-post about Polylidar3D.

Documentation and Branches

Please see documentation for installation, api, and examples. Note that Polylidar went though major changes in July 2020 for 3D work, now called Polylidar3D. The old repository for 2D work (and some basic 3D) is found in the branch polylidar2D and is connected to this paper. Polylidar3D can still handle 2D point sets but the API is different and not the focus of this repo. For papers referencing Polylidar2D and Polylidar3D please see Citations.

Eventually I am going to make a standalone cpp/header file for 2D point set -> polygon extraction for those that don't need any of the features of Polylidar3D.

Polylidar Use Cases

  • Polylidar-RealSense - Live ground floor detection with Intel RealSense camera using Polylidar
  • Polylidar-KITTI - Street surface and obstacle detection from autonomous driving platform
  • PolylidarWeb. An very old Typescript (javascript) version with live demos of Polylidar2D
  • Concave-Evaluation - Evaluates and benchmarks several competing concavehull algorithms

Credits

This software is only possible because of the great work from the following open source packages:

Related Methods

2D ConcaveHull Extraction

Contributing

Any help or suggestions would be appreciated!

Citation

2D

If are using Polylidar for 2D work please cite:

J. Castagno and E. Atkins, "Polylidar - Polygons From Triangular Meshes," in IEEE Robotics and Automation Letters, vol. 5, no. 3, pp. 4634-4641, July 2020, doi: 10.1109/LRA.2020.3002212. Link to Paper

@ARTICLE{9117017,
  author={J. {Castagno} and E. {Atkins}},
  journal={IEEE Robotics and Automation Letters}, 
  title={Polylidar - Polygons From Triangular Meshes}, 
  year={2020},
  volume={5},
  number={3},
  pages={4634-4641}
}

3D

If you are using Polylidar3D for 3D work please cite:

J. Castagno and E. Atkins, "Polylidar3D - Fast Polygon Extraction from 3D Data," in MDPI Sensors, vol. 20, no.17, 4819, September 2020, doi: 10.3390/s20174819 Link to Paper

@Article{s20174819,
author = {Castagno, Jeremy and Atkins, Ella},
title = {Polylidar3D-Fast Polygon Extraction from 3D Data},
journal = {Sensors},
volume = {20},
year = {2020},
number = {17},
article-number = {4819},
url = {https://www.mdpi.com/1424-8220/20/17/4819},
issn = {1424-8220}
}

License

MIT


GitHub @jeremybyu

More Repositories

1

polylidar-realsense

Using Polylidar with an Intel RealSense Camera
Python
39
star
2

airsimgeo

AirSim with more coordinate systems
Python
16
star
3

cpp-pybind-skel

C++ and Python Library Template
Python
10
star
4

PointCloudGeneratorUE4

Generates Points Clouds in Unreal Engine
C++
10
star
5

FastGaussianAccumulator

Performs Gaussian Integration
C++
8
star
6

simplifyline

Simplify 2D and 3D Lines
C++
6
star
7

polylidar-kitti

Polygon extraction using Polylidar on the KITTI dataset
Python
5
star
8

meteor-import

A simple example of using Meteor 1.3 with react and npm.
JavaScript
5
star
9

bpyproj

A blender add-on for Map Projections
Python
5
star
10

concavehull-evaluation

This repository contains all benchmarking and test code for several concave hull algorithms, including Polylidar.
Jupyter Notebook
4
star
11

OrganizedPointFilters

C++
4
star
12

UE4PolygonServer

Plugin in UE4 for Drawing Polygons through Remote Procedure Calls
C++
2
star
13

urbanvis

Urban Visualization with QGIS and ThreeJS
2
star
14

realsense-tracking

Module For Interacting with RealSense Sensors
Jupyter Notebook
2
star
15

ue4poly

Python client for sending polygon draw commands to UE4
Python
2
star
16

polylidar-plane-benchmark

Benchmark 3D Plane Extraction
Python
2
star
17

intro-ds-website

SCSS
2
star
18

ng6-meteor

Angular, Meteor, Webpack - NG6 Starter
JavaScript
1
star
19

TaskLibraryBenchmark

Task/Fiber Scheduler Benchmark (WIP)
C++
1
star
20

mdp-machine-learning

MDP Machine Learning Lecture
HTML
1
star
21

modbus

Modbus Client for Meteor
JavaScript
1
star
22

jeremybyu

1
star
23

polylidarweb

Web Version of Polylidar - NOT MAINTAINED
TypeScript
1
star
24

griffe-scikit-build-core-bug

Python
1
star
25

seminar-ai

CSS
1
star