SymSeg is a model-free method for segmenting objects and recovering their symmetries from multiple-view 3D pointclouds. The algorithm takes a pointcloud and an occupancy map of the scene as input and returns a set of object segmentation masks and corresponding symmetries. Please cite the following work if you use it for your research:
Ecins, Aleksandrs; Fermüller, Cornelia; Aloimonos, Yiannis (2018) Seeing Behing the Scene: Using Symmetry To Reason About Objects in Cluterred Environments. International Conference on Intelligent Robots. [Project Page]
This repository contains the C++ implementation of the algorithm and a sample test scene. Additional test scenes can be downloaded from the Cluttered Tabletop Dataset (160 Mb).
- PCL
- OctoMap (with dynamicEDT3D)
- protobuffer
Tested in Ubuntu 14.04 and 16.04 with PCL 1.8.0 and Octomap 1.8.1
To checkout and build symseg in the build
directory, execute the following in a terminal:
git clone https://github.com/aecins/symseg.git
cd symseg
mkdir build
cd build
cmake ..
make -j
The examples
directory provides examples for three different segmentation modes:
rotational_segmentation
segments rotational objectsreflectional segmentation
segments reflectional objectsfull_segmentation
segments rotational objects first, then segment reflectional objects
To segment the provided sample scene execute the following from the bin
directory:
./rotational_segmentation ../sample_scene
Additionally we provide code for detecting symmetries in pointclouds of single objects. Note that input pointclouds must contain a single object and must have consistently oriented normals. To detect symmetries execute from the bin
directory:
./reflectional_detection ../sample_object_cloud.ply