A high-performance implementation of RANSAC algorithm for robust plane detection in 3D point clouds and line segments with flexible input modes.
This project implements an efficient RANSAC-based algorithm specifically designed for plane detection in 3D data. The algorithm supports flexible input modes and can process point clouds, line segments, or both simultaneously for robust plane segmentation.
The algorithm follows a comprehensive pipeline designed for robust plane detection with flexible input processing:
- Input Processing: Accepts point clouds, line segments, or both as input data
- Adaptive Sampling: Implements three sampling strategies based on input type:
- Point-only mode: Three-point sampling for plane estimation
- Line-only mode: Two-line sampling for plane construction
- Combined mode: Mixed point-line sampling for enhanced robustness
- Plane Construction & Evaluation: Constructs candidate planes and evaluates fitness
- Iterative Optimization: Uses dynamic probability models with adaptive termination
- Boundary Refinement: Applies line constraints and connectivity verification
- Plane Segmentation: Outputs refined plane segmentation results
- Flexible Input Modes: Supports three input configurations:
- Point cloud only processing
- Line segments only processing
- Combined point cloud and line segment processing
- Specialized Plane Detection: Optimized RANSAC algorithm specifically for plane segmentation
- High-performance Implementation: Multi-threaded execution with OpenMP acceleration
- Advanced Sampling Strategies: Multiple sampling methods for different input types
- Memory Efficient: Optimized spatial indexing with octree-based data structures
- C++17 compatible compiler (GCC 9.0+, MSVC 19.28+, Clang 10.0+)
- CMake 3.16 or higher
- Required libraries: Eigen3, PCL, VTK, OpenMP, CERES, NLopt, TBB, BLAS/LAPACK
See DEPENDENCIES.md for detailed installation instructions.
git clone https://github.com/dreamer198/PSUPL.git
cd PSUPL
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)Input data should be in .obj format with point cloud vertices and line segments.
Optimized for large-scale point cloud processing with multi-threading support.
This project is licensed under the MIT License - see the LICENSE file for details.
