首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >贝叶斯点云重建实现

贝叶斯点云重建实现
EN

Stack Overflow用户
提问于 2013-09-30 16:16:22
回答 1查看 1K关注 0票数 0

我需要能够从无序的点云数据生成一个网格。

当我试图实现Marching多维数据集算法时,我偶然发现了本文:

贝叶斯点云重建

我想知道是否已经在.NET中实现了这个算法。C++也会没事..。

更新

前进立方体算法的问题是,我很难把我的点云数据,基本上是一组3D点,转换成输入的体素网格数据,这是算法需要的一个0到1之间的三维值数组。

我还是不知道怎么改变它..。

EN

回答 1

Stack Overflow用户

发布于 2013-09-30 21:27:22

据我所知,有两个库在C++中实现了从点云生成网格。CGAL网格生成模块和PCL模块。我知道至少CGAL的版本支持多种算法,但我不确定它们是否有您所指的算法。然而,如果你正在寻找更平滑的替代行进立方体,你可以给他们一个尝试。

前进立方体的优点是你可以大大加快它的速度通过将其移植到GPU。如果你想在行进的立方体之后整理一些东西,你可以试试CGAL的网格简化技术。

CGAL确实有一个用于商业用途的许可证,而PCL是在BSD下发布的,所以是免费的。

更新:

如果您有足够的内存使网格具有必要的粒度,则将点云转换为体素网格非常简单。例如,如果您需要每一个单元都有一个体素,并且覆盖256^3的空间,并且您有那么多的内存可以节省,那么您只需创建一个256^3二进制数组,并在云中有一个点的地方设置1。

如果您需要更高的粒度(例如,每0.1个单元就有一个体素),或者需要覆盖更多的空间(1024^3),如果您没有足够的内存,那么您需要更聪明的方法。

我能想到的一个选择是对你的点云进行排序,一次把它分成三片。假设您按照z对点进行排序,并表示您的粒度为0.1单位。执行多维数据集的算法可以如下所示:

代码语言:javascript
复制
for z in (minz to maxz in steps of 0.1) { //We want to do marching cubes on z-1, z, z+1
    FreeVoxelSet(z-2) //This will free the voxel slice at z-2 from previous iteration
    CreateVoxelSet(z+1) //This step will go through your sorted point cloud and voxelate all points between z and z+1
    DoMarchingCubes(z) //You have z-1, z (from prev iterations) and z+1(this iter)        
}

还有稀疏Voxel八叉树,实现起来可能很繁琐,但效率却很高。你可以在上面运行行军立方体。

点云- Voxel集对偶性是一个活跃的研究领域,您将能够在网上找到大量的信息以及这种想法的各种实现。祝好运。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19098995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档