Our project is an algorithm to convert point cloud data into meshes based on Ball-Pivoting Algorithm(BPA)
. So far, we have good progress in coding parts.
Data preparation and pre-processing are done in the first place. using .ply files from the Stanford repository
, we wrote some python codes to convert them into .xyz files, a custom format
which contain not only the locations but also the normal directions of the points. To achieve this, we borrow the area-weighted vertex normal
method from proj 2 to interpolate the normals. In addition to these
large point-clouds, we also wrote several programs to generate fake point-cloud data of simple geometries (e.g. sphere, cube, etc.) for debugging purpose.
Once the data is ready, we began to implement the algorithm from scratch. We started off from basic data structures, such as vertex, edge, triangle, etc.,
and finished some useful helper functions (e.g. circum-sphere construction) along the way. Since our algorithm involves tremendous K-nearest-neighbor
queries,
we implemented an accelerating structure, Octree
which supports efficient construction and searching.
For the core BPA, we have implemented the function to find the seed triangle, with other supporting functions like compatibility check, sphere construction, and spatial nearest
neighbors from Octree. Furthermore, all of the above functions and structures have been tested on our own on simple 3D geometries.
For the overall pipeline, we included some file I/O functions to help working with files in the disk. Also, we get the chance to write the CMake files ourselves for the very first time in this course and enable cross-platform development.
Back in our initial proposal, we set up 3 (potential) goals for our project. While some of them are in good shape right now, some requires some modification and the details are specified below.
We ended up converting vanilla .ply file to our custom format without using external packages. For the BPA itself, we went half way through the core codes, and finished data structure constructions, initiated pipelines like reading files, and included unit-test codes. For the following days, we would finish the BPA with other core codes as expand triangulation and candidate vertex selection, and other post-processes.
Modifications:
None
We started with some experiments that benchmark our speed, and we would also add methods to measure the precision of our reconstruction. For the MeshiEdit, we would like to find a way to let it render .ply files, and maybe also .xyz files if needed.
Modifications:
None
(This part is considered "tentative" for us due to the intense schedule in the summer course. We will prioritize working in the first two tasks and begin this one once the above are finished)
As mentioned in the proposal, we feel strongly motivated to implement the Poisson Reconstruction Surface (PSR)
, however, due to the fast pace and shorter pierid of final project,
we might only have a decent chance to do it.
Modifications:
Maybe we cannot have time to implement this method ourselves.
If the above holds, we will try to look for open-sourced code online of PSR, and instead directly compare the results of these two methods.
Set up the project folder with capability to work with point cloud files. (Finished)
Implement a functional BPA algorithm. (2/3 Finished)
Finish Milestone Report. (Finished)
Integrate the BPA algorithm into a complete pipeline that converts point-cloud input to mesh outputs. (Started)
Evaluate the algorithm’s performance by comparing with the original meshes. (Started)
Try to implement the Poisson model (if we have time).
Present final report and presentation.
In addition to those listed in the proposal, we find the following resources useful as well this week
An Analysis and Implementation of a Parallel Ball Pivoting Algorithm http://www.ipol.im/pub/art/2014/81/article.pdf
Made with ❤ with Bootstrap, by Star Li (listar2000@berkeley.edu)