All Projects → yblin → Supervoxel For 3d Point Clouds

yblin / Supervoxel For 3d Point Clouds

A no dependency, header-only, license free, fast supervoxel segmentation library for 3D point clouds

Labels

Projects that are alternatives of or similar to Supervoxel For 3d Point Clouds

Doom Nano
A 3d raycast engine for Arduino
Stars: ✭ 86 (-15.69%)
Mutual labels:  3d
Mini3d
3D Software Renderer in 700 Lines !!
Stars: ✭ 1,320 (+1194.12%)
Mutual labels:  3d
Atlasnetv2
This repository contains the source codes for the paper AtlasNet V2 - Learning Elementary Structures.
Stars: ✭ 99 (-2.94%)
Mutual labels:  3d
3dhop
3D Heritage Online Presenter
Stars: ✭ 89 (-12.75%)
Mutual labels:  3d
Stellar Webpack
A little experiment
Stars: ✭ 91 (-10.78%)
Mutual labels:  3d
Pepper S Cone Unity
Pepper's Cone
Stars: ✭ 97 (-4.9%)
Mutual labels:  3d
Brats17
Patch-based 3D U-Net for brain tumor segmentation
Stars: ✭ 85 (-16.67%)
Mutual labels:  3d
Pseudo3d
Simple pseudo 3D perspective components for cocos creator
Stars: ✭ 102 (+0%)
Mutual labels:  3d
Altium Library
Altium Library with 4000 components, IPC compliant footprints, 3D step model
Stars: ✭ 92 (-9.8%)
Mutual labels:  3d
Objectron
Objectron is a dataset of short, object-centric video clips. In addition, the videos also contain AR session metadata including camera poses, sparse point-clouds and planes. In each video, the camera moves around and above the object and captures it from different views. Each object is annotated with a 3D bounding box. The 3D bounding box describes the object’s position, orientation, and dimensions. The dataset contains about 15K annotated video clips and 4M annotated images in the following categories: bikes, books, bottles, cameras, cereal boxes, chairs, cups, laptops, and shoes
Stars: ✭ 1,352 (+1225.49%)
Mutual labels:  3d
Connected Components 3d
Connected components on multilabel 3D & 2D images. Handles 26, 18, and 6 connected variants.
Stars: ✭ 90 (-11.76%)
Mutual labels:  3d
Freecad
This is the official source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler. Issues are managed on our own bug tracker at https://www.freecadweb.org/tracker
Stars: ✭ 10,366 (+10062.75%)
Mutual labels:  3d
Supra
SUPRA: Software Defined Ultrasound Processing for Real-Time Applications - An Open Source 2D and 3D Pipeline from Beamforming to B-Mode
Stars: ✭ 96 (-5.88%)
Mutual labels:  3d
Declaracad
A declarative 3D modeling application built using Open Cascade and python
Stars: ✭ 89 (-12.75%)
Mutual labels:  3d
Renderer
A shader-based software renderer written from scratch in C89
Stars: ✭ 1,366 (+1239.22%)
Mutual labels:  3d
Simulator
A ROS/ROS2 Multi-robot Simulator for Autonomous Vehicles
Stars: ✭ 1,260 (+1135.29%)
Mutual labels:  3d
Spatial Collision Datastructures
Benchmark of various spatial data structures for collision detection.
Stars: ✭ 96 (-5.88%)
Mutual labels:  3d
React 3d Viewer
A 3D model viewer component based on react.js 一个基于react.js的组件化3d模型查看工具
Stars: ✭ 100 (-1.96%)
Mutual labels:  3d
Pd Select
vue components ,like ios 3D picker style,vue 3d 选择器组件,3D滚轮
Stars: ✭ 101 (-0.98%)
Mutual labels:  3d
Assetkit
🎨 Modern 2D/3D - Importer • Exporter • Util - Library, also called (AssetIO)
Stars: ✭ 97 (-4.9%)
Mutual labels:  3d

Supervoxel for 3D point clouds

Introduction

We present a simple but effective supervoxel segmentation method for point clouds, which formalizes supervoxel segmentation as a subset selection problem. We develop an heuristic algorithm that utilizes local information to efficiently solve the subset selection problem. The proposed method can produce supervoxels with adaptive resolutions, and dose not rely the selection of seed points. The method is fully tested on three publicly available point cloud segmentation benchmarks, which cover the major point cloud types. The experimental results show that compared with the state-of-the-art supervoxel segmentation methods, the supervoxels extracted using our method preserve the object boundaries and small structures more effectively, which is reflected in a higher boundary recall and lower under-segmentation error.

The details can be found in the following ISPRS 2018 paper

Citing our work

If you find our works useful in your research, please consider citing:

Lin Y, Wang C, Zhai D, W Li, and J Li. Toward better boundary preserved supervoxel segmentation for 3D point clouds. Isprs Journal of Photogrammetry & Remote Sensing, vol. 143, pages 39-47, 2018.

BibTex

@article{Lin2018Supervoxel,
	title = "Toward better boundary preserved supervoxel segmentation for 3D point clouds",
	journal = "ISPRS Journal of Photogrammetry and Remote Sensing",
	volume = "143",
	pages = "39 - 47",
	year = "2018",
	note = "ISPRS Journal of Photogrammetry and Remote Sensing Theme Issue “Point Cloud Processing”",
	issn = "0924-2716",
	doi = "https://doi.org/10.1016/j.isprsjprs.2018.05.004",
	url = "http://www.sciencedirect.com/science/article/pii/S0924271618301370",
	author = "Lin, Yangbin and Wang, Cheng and Zhai, Dawei and Li, Wei and Li, Jonathan",
	keywords = "Supervoxel segmentation, Point clouds, Subset selection, Over-segmentation"
}

Install & complie

Please directly copy the code into your workspace and complie it with any complier that supports C++11. It dose not require linking any additional libraries.

Sample usage:

cl::geometry::point_cloud::SupervoxelSegmentation(points, neighbors, resolution, metric, &supervoxels, &labels);

Where, 'points' is the input 3D point cloud. It can be read from XYZ file by calling:

cl::geometry::io::ReadXYZPoints(filename.c_str(), &points);

'neighbors' gives the neighborhood for each point. It can be constrcuted by computing k-neareast neighbors of each point. For example:

const int k_neighbors = 15;
cl::Array<cl::Array<int> > neighbors(n_points);
cl::Array<cl::RPoint3D> neighbor_points(k_neighbors);
for (int i = 0; i < n_points; ++i) {
    kdtree.FindKNearestNeighbors(kdtree.points()[i], k_neighbors, &neighbors[i]);
}

'resolution' is used to determine the number of supervoxels you want. 'metric' is used to evaluate the feature distance between two points. In our paper, we use the following metric, which is same to the VCCS.

class VCCSMetric {
public:
	explicit VCCSMetric(double resolution)
		: resolution_(resolution) {}

	double operator() (const PointWithNormal& p1,
					   const PointWithNormal& p2) const {
		return 1.0 - std::fabs(p1.normal * p2.normal) +
			   cl::geometry::Distance(p1, p2) / resolution_ * 0.4;
	}

private:
	double resolution_;
};

The output 'supervoxels' is an array that stores the indices of the representation points. And 'labels' is used to denote which supervoxel owns the i-th point.

Please see main.cc for more details.

The file "test.xyz" can be found in test_data.

Comparison

For comparison, we also provide our implementation of VCCS and its variant (See main.cc for more details). Please feel free to use it.

Sample results.

The first column is the orignal point cloud with ground-truth annotation. The second column is the supervoxel segmentation by VCCS (found in vccs_supervoxel.h) . The third column is the VCCS method with kNN variation (found in vccs_knn_supervoxel.h). And the last column is the result obtained by our method.

Contact

Please feel free to leave suggestions or comments to Dr. Lin ([email protected]), or Prof. Wang ([email protected])

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].