Point normal orientation and surface reconstruction by incorporating isovalue constraints to Poisson equation
Link to the paper (preprint).
In this work, we incorporate isovalue constraints to the Poisson equation, and establish a formulation that optimizes the implicit function and normals simultaneously in a single target function on the Poisson reconstruction framework.
This repository includes the implementation of our method, which mainly includes three steps: 1. Orienting the coarse point cloud by incorporating isovalue constraints to the Poisson equation. 2. Carrying out the coarse to fine implicit orientation, which means to utilize the implicit field generated by the coarse point cloud to orient the normals of the fine point cloud. 3. Feeding the oriented fine point cloud to screened Poisson surface reconstruction and obtaining the reconstructed surface.
PCL is required for the knn searching. We use PCL 1.10.1, which can be downloaded here. The bin folders (e.g., "C:\Program Files\PCL 1.10.1\bin" and "C:\Program Files\PCL 1.10.1\3rdParty\VTK\bin") need to be added in the windows environment paths.
The main program (the VS solution "PoissonRecon.sln") inputs a point cloud with unoriented normals, and generates the oriented point set with the reconstructed triangular mesh. The main function is in "PoissonRecon.cpp". This program can also be executed in the command line with the following format:
./Bin/x64/Release/PoissonRecon.exe coarse_filein fine_filein fileout use_implicit_orient is_noisy_input oriented_optimized
Meaning of the parameters: 1.coarse_filein: file name of the coarse point cloud containing unoriented normals. 2.fine_filein: file name of the fine point cloud containing unoriented normals. 3.fileout: file name of the output mesh. The oriented point cloud will be named as fileout[:-4]+"_oriented.xyz". 4.use_implicit_orient: whether to use the coarse to fine implicit orientation method. When set to false, the surface are directly constructed by the coarse point cloud (after orientation). 5.is_noisy_input: whether the input is a noisy point cloud. 6.oriented_optimized: "true" for using oriented normals, "false" for using optimized normals (3D sketches only).
Following commands can run some examples:
./Bin/x64/Release/PoissonRecon.exe ./data/xyzrgb_statuette_coarse.xyz ./data/xyzrgb_statuette_fine.xyz ./results/xyzrgb_statuette.ply true false true
./Bin/x64/Release/PoissonRecon.exe ./data/Elbow_Crab_coarse.xyz ./data/Elbow_Crab_fine.xyz ./results/Elbow_Crab.ply true false true
./Bin/x64/Release/PoissonRecon.exe ./data/doghead.xyz ./data/doghead.xyz ./results/doghead.ply false false false
./Bin/x64/Release/PoissonRecon.exe ./data/screwnew_pcd_coarse.xyz ./data/screwnew_pcd_fine.xyz ./results/screwnew_pcd.ply true true true
./Bin/x64/Release/PoissonRecon.exe ./data/think10k591234.xyz ./data/think10k591234.xyz ./results/think10k591234.ply false true true
./Bin/x64/Release/PoissonRecon.exe ./data/think10k60683.xyz ./data/think10k60683.xyz ./results/think10k60683.ply false true true
./Bin/x64/Release/PoissonRecon.exe ./data/scissors4.xyz ./data/scissors4.xyz ./results/scissors4.ply false true true
The main program requires unoriented normals, which can be estimated by "./jets/normals_estimation.exe" with the following command:
./jets/normals_estimation.exe input_xyz output_xyz neighbour_size
This executable program is compiled by CGAL 5.5.1.
Moreover, the file "./subsample/random_sample.py" randomly subsamples the point clouds in the "./in" folder to "expected_num (default is 60000)" points. The outputs will be located in the "./out" folder. Some 3D IO functions are implemented by Points2Surf. The following commands can be used for subsampling:
cd ./subsample
python random_sample.py
Our method works on an average laptop CPU, but the point cloud orientation process may have a high memory demand. Therefore, it is recommended to use the coarse to fine implicit field orientation method when solving large scale point clouds. (Sampling 50K-60K points for the coarse point set is a good choice.) Devices with at least 16GB memory are strongly recommended. Moreover, running from the command line is a good way since opening the visual studio will take some memory.
@article{IsoConstraints2023,
title = {Point normal orientation and surface reconstruction by incorporating isovalue constraints to Poisson equation},
journal = {Computer Aided Geometric Design},
volume = {103},
pages = {102195},
year = {2023},
issn = {0167-8396},
doi = {https://doi.org/10.1016/j.cagd.2023.102195},
url = {https://www.sciencedirect.com/science/article/pii/S0167839623000274},
author = {Dong Xiao and Zuoqiang Shi and Siyu Li and Bailin Deng and Bin Wang},
}