This repositority is forked from https://github.com/Ylannl/GoCoPP with updated compile setting and instruction.
Inria - Université Côte d'Azur
@INPROCEEDINGS{Yu_cvpr22,
Author = {Yu, Mulin and Lafarge, Florent},
Title = {Finding Good Configurations of Planar Primitives in Unorganized Point Clouds},
booktitle = {Proc. of the IEEE conference on Computer Vision and Pattern Recognition (CVPR)},
Year = {2022},
address = {New Orleans, US},
}
We present an algorithm for detecting planar primitives from unorganized 3D point clouds. Departing from an initial configuration, the algorithm refines both the continuous plane parameters and the discrete assignment of input points to them by seeking high fidelity, high simplicity and high completeness. Our key contribution relies upon the design of an exploration mechanism guided by a multiobjective energy function. The transitions within the large solution space are handled by five geometric operators that create, remove and modify primitives. We demonstrate the potential of our method on a variety of scenes, from organic shapes to man-made objects, and sensors, from multiview stereo to laser. We show its efficacy with respect to existing primitive fitting approaches and illustrate its applicative interest in compact mesh reconstruction, when combined with a plane assembly method.
CGAL 5.2.2 Eigen Boost_1_76_0 CMake Visual Studio 2017
Open sources/CMakeLists.txt in cmake-gui and fill in all the relevant fields. This will generate a Visual Studio solution in folder “build”. Open this solution and compile the projects GoCoPP
. The output executable files are created in subfolder “build/bin”.
The input data is a PLY file. It should contain the coordinates of input points (x y z). The normals of input points (nx ny nz) are also encouraged to be included. If not included, they will be estimated by PCA just after loading the file.
-
The parameter
--epsilon
is the fitting tolerance that specifies the maximal distance of an inlier to its supporting plane (default0.4% * bounding box diagonal
). -
The parameter
--sigma
is the minimal primitive size that allows primitives with a too low number of inliers to be discarded (default50
). -
The parameter
--nn
is the k of the k-nearest neighbor graph and also used to estimate the points' normals if they are not provided (default20
). -
The parameter
--normal_deviation
is (i) the minimum cosine of the angle between an inlier and its supporting plane, which is used for region growing, and (ii) the minimum cosine of the angle between two primitives that can be merged (default0.85
). -
The parameter
--s
and--c
are the weight for simplicity and completeness, note that0 < s + c < 3
(default1
and1
). -
The parameter
--norm
decide the fidelity metric, which can benormal
,L2
orhybrid
(defaulthybrid
).L2
represents the Euclidean distance between the inlier points and the associated supporting planes,normal
presents the deviation between inliers' normals and the associated supporting planes' normals andhybrid
mode usesL2
in the priority queue andnormal
in the transfer operator. -
The parameter
--max_steps
is the maximum iterations of our exploration mechanism (default7
). -
The parameter
--constraint
is an option to make sure that the final configuration does not degrade the fidelity, simplicity and completeness of the initial configuration (defaultFalse
). -
The parameter
--vg
is an option to output the results in 'vg' form(Vertex Group) (defaultFalse
). -
The parameter
--alpha
is an option to output the primitives that are represented as alpha shapes (defaultTrue
). -
The parameter
--hull
is an option to output the primitives that are represented as convex hulls (defaultFalse
).
- An example:
.\GoCoPP.exe path_to_your_file.ply --constraint --norm L2
Inria