MIT License

项目介绍

yblin/Supervoxel-for-3D-point-clouds 是一个托管在 GitHub 上的开源项目,主要使用 C++ 编写,采用 MIT License 许可证,目前获得 250 个 Star、62 次 Fork。

仓库全名
yblin/Supervoxel-for-3D-point-clouds
开源许可证
MIT License
Star 数
250
Fork 数
62
未关闭 Issue
5

README 摘要

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…

完整内容见 GitHub 原始 README 或本页 。

常见问题

Supervoxel-for-3D-point-clouds 用什么语言开发?

主要使用 C++ 编写,采用 MIT License 许可证,目前有 250 个 Star。

Supervoxel-for-3D-point-clouds 可以免费商用吗?

仓库采用 MIT License 许可证,可免费使用与修改,商业使用请遵守许可证条款(例如保留版权声明与许可声明)。

如何获取 Supervoxel-for-3D-point-clouds 的源码?

可以直接克隆仓库:git clone https://github.com/yblin/Supervoxel-for-3D-point-clouds.git,默认分支为 master;安装与运行步骤见仓库 README。

Supervoxel-for-3D-point-clouds 最近还在维护吗?

仓库最近一次更新为 2023年6月30日,当前有 5 个未关闭 Issue;Star 数为 250,可作为社区活跃度的参考。

关于

GitHub 原始描述(英文)

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

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

简要分析

热度分
380
价值分
168
活跃状态
活跃

语言占比

C
C++
QMake

贡献者

README

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])

评论

暂无评论