Bayesian Point Cloud Reconstruction implementation

I need to be able to generate a mesh from a unordered point cloud data.

While I was trying to implement the Marching Cubes algorithm I stumbled across this paper:

Bayesian Point Cloud Reconstruction

I wonder if there's already an implementation in .NET of this algorihtm. C++ would also be ok...

UPDATE

The problem with the marching cubes algorithm is that I'm having trouble converting my point cloud data, which is basically a set of 3D points, into the input voxel grid data that the algorithm needs which is a three dimensional array of values between 0 and 1.

I still don't know how to convert it...


There're two libraries, that I know of, that implement mesh generation from point clouds in C++. CGAL's Mesh Generation module and PCL. I know that atleast CGAL's version supports multiple algorithms, but I'm not sure if they have the one you're referring to. However, if you're looking for 'smoother' alternatives to marching cubes you can give them a try.

The advantage of marching cubes is that you can speed it up considerably by porting it to the GPU . If you want to just smooth out something after the marching cubes, you can try CGAL's Mesh simplification techniques.

CGAL does have a license for commercial usage, while PCL is released under BSD, so is free.

Update:

Converting a point cloud to a voxel grid is simple, if you've enough memory to make the grid at the necessary granularity. For example, if you need a voxel every one unit and cover a space of 256^3 and you have that much memory to spare, you just have to make a 256^3 binary array and set 1 wherever there's a point in the cloud.

If you need higher granularity (say a voxel every 0.1 unit) or need to cover more space(1024^3), and if you don't have enough memory, then you need smarter ways.

One option I can think of is to sort your point cloud and take it a three slices at a time. Say you sorted the points along z and say your granularity is 0.1 unit. The your algorithm for marching cubes can be something like:

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

There's also Sparse Voxel Octrees, which can be tedious to implement, but super efficient. You can run marching cubes on it.

Point Cloud - Voxel Set duality is an active field of research and you'll be able to find tons of information online and various implementations of this idea. Good Luck.

链接地址: http://www.djcxy.com/p/37186.html

上一篇: 最快的三角测量算法带孔?

下一篇: 贝叶斯点云重构实现