From faf42467c223bd4587d54c4ea5699011fac671a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sun, 25 Nov 2018 22:42:21 +0100 Subject: [PATCH 01/53] first draft version of OpenGR wrapper done based on super4pcs_test.cc --- Installation/cmake/modules/FindOpenGR.cmake | 33 +++ .../Point_set_processing_3/CMakeLists.txt | 11 + .../Point_set_processing_3/data/hippo1.ply | Bin 0 -> 293208 bytes .../Point_set_processing_3/data/hippo2.ply | Bin 0 -> 210792 bytes .../registration_with_OpenGR.cpp | 65 ++++++ .../include/CGAL/OpenGR/align.h | 203 ++++++++++++++++++ 6 files changed, 312 insertions(+) create mode 100644 Installation/cmake/modules/FindOpenGR.cmake create mode 100644 Point_set_processing_3/examples/Point_set_processing_3/data/hippo1.ply create mode 100644 Point_set_processing_3/examples/Point_set_processing_3/data/hippo2.ply create mode 100644 Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp create mode 100644 Point_set_processing_3/include/CGAL/OpenGR/align.h diff --git a/Installation/cmake/modules/FindOpenGR.cmake b/Installation/cmake/modules/FindOpenGR.cmake new file mode 100644 index 00000000000..679b1340c9d --- /dev/null +++ b/Installation/cmake/modules/FindOpenGR.cmake @@ -0,0 +1,33 @@ +if ( NOT (OpenGR_LIBRARIES AND OpenGR_INCLUDE_DIR) ) + +# look for headers + if (NOT OpenGR_INCLUDE_DIR) + find_path(OpenGR_INC_DIR + NAMES "super4pcs/shared4pcs.h") + + if(NOT OpenGR_INC_DIR) + message(STATUS "Can not find OpenGR include directory") + else() + message(STATUS "Found OpenGR headers in ${OpenGR_INC_DIR}") + set(OpenGR_INCLUDE_DIR "${OpenGR_INC_DIR}" CACHE PATH "Path to OpenGR headers files") + endif() + endif() + +# look for library + if (NOT OpenGR_LIBRARIES) + find_library(OpenGR_algo_LIBRARY + NAMES opengr_algo) + + if (NOT OpenGR_algo_LIBRARY) + message(STATUS "Can not find OpenGR libraries") + else() + message(STATUS "Found OpenGR algorithm library: ${OpenGR_algo_LIBRARY}") + set(OpenGR_LIBRARIES "${OpenGR_algo_LIBRARY}" CACHE PATH "OpenGR libraries") + endif() + endif() + +endif() + +if ( OpenGR_LIBRARIES AND OpenGR_INCLUDE_DIR ) + set(OpenGR_FOUND ON) +endif() diff --git a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt index cf741624daa..c93cdfe0b27 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt +++ b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt @@ -78,6 +78,17 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "jet_smoothing_example.cpp" ) create_single_source_cgal_program( "normal_estimation.cpp" ) create_single_source_cgal_program( "edges_example.cpp" ) + + # Executables that require OpenGR + find_package(OpenGR) + if (OpenGR_FOUND) + include_directories(SYSTEM ${OpenGR_INCLUDE_DIR}) + create_single_source_cgal_program( "registration_with_OpenGR.cpp" ) + target_link_libraries("registration_with_OpenGR" PRIVATE ${OpenGR_LIBRARIES}) + else() + message(STATUS "NOTICE: registration_with_OpenGR requires OpenGR, and will not be compiled.") + endif() + else() message(STATUS "NOTICE: Some of the executables in this directory need Eigen 3.1 (or greater) and will not be compiled.") diff --git a/Point_set_processing_3/examples/Point_set_processing_3/data/hippo1.ply b/Point_set_processing_3/examples/Point_set_processing_3/data/hippo1.ply new file mode 100644 index 0000000000000000000000000000000000000000..3dd54ca58d9cad1df71847a681515a5aa14975dd GIT binary patch literal 293208 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

Vco;-Q6GsP)6 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

1P`O02@Y?p1>xeK51;8YLQ)amOU9}Z!td+= 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�UNE*j^3k`c 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 literal 0 HcmV?d00001 diff --git a/Point_set_processing_3/examples/Point_set_processing_3/data/hippo2.ply b/Point_set_processing_3/examples/Point_set_processing_3/data/hippo2.ply new file mode 100644 index 0000000000000000000000000000000000000000..4fb9e674be3918315c12c4df1fe8f985329c2c10 GIT binary patch literal 210792 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

^%?cQ$Ac@Kg|{Z22b&EgNM{COe# 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%0Dn(uXPB2qGxMkiHNPxRTI~-CKaTC)-%yFp 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 +#include +#include +#include + +#include + +#include +#include +#include + +typedef CGAL::Simple_cartesian K; +typedef K::Point_3 Point_3; +typedef K::Vector_3 Vector_3; +typedef std::pair Pwn; +typedef CGAL::First_of_pair_property_map Point_map; +typedef CGAL::Second_of_pair_property_map Normal_map; + +namespace params = CGAL::parameters; + +int main(int argc, const char** argv) +{ + const char* fname1 = (argc>1)?argv[1]:"data/hippo1.ply"; + const char* fname2 = (argc>2)?argv[2]:"data/hippo2.ply"; + + std::vector pwns1, pwns2; + std::ifstream input(fname1); + if (!input || + !CGAL::read_ply_points(input, std::back_inserter(pwns1), + CGAL::parameters::point_map (CGAL::First_of_pair_property_map()). + normal_map (Normal_map()))) + { + std::cerr << "Error: cannot read file " << fname1 << std::endl; + return EXIT_FAILURE; + } + input.close(); + + input.open(fname2); + if (!input || + !CGAL::read_ply_points(input, std::back_inserter(pwns2), + CGAL::parameters::point_map (Point_map()). + normal_map (Normal_map()))) + { + std::cerr << "Error: cannot read file " << fname2 << std::endl; + return EXIT_FAILURE; + } + input.close(); + + // call the registration method Super4PCS from OpenGR + CGAL::OpenGR::align(pwns1, pwns2, + params::point_map(Point_map()).normal_map(Normal_map()), + params::point_map(Point_map()).normal_map(Normal_map())); + + std::ofstream out("pwns2_aligned.ply"); + if (!out || + !CGAL::write_ply_points( + out, pwns2, + CGAL::parameters::point_map(Point_map()). + normal_map(Normal_map()))) + { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/Point_set_processing_3/include/CGAL/OpenGR/align.h b/Point_set_processing_3/include/CGAL/OpenGR/align.h new file mode 100644 index 00000000000..35f0a0a88e6 --- /dev/null +++ b/Point_set_processing_3/include/CGAL/OpenGR/align.h @@ -0,0 +1,203 @@ +// Copyright (c) 2018 GeometryFactory(France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// You can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0+ +// +// Author(s) : Sebastien Loriot + +#include +#include +#include +#include + +#include + +#include +#include + +#include + +#ifndef CGAL_OPENGR_ALIGN_H +#define CGAL_OPENGR_ALIGN_H + +namespace CGAL { + +namespace OpenGR { + +namespace internal { + +template +void +align(const PointRange1& range1, PointRange2& range2, + PointMap1 point_map1, PointMap2 point_map2, + VectorMap1 vector_map1, VectorMap2 vector_map2, + GlobalRegistration::Match4PCSOptions& options) +{ + typedef typename Kernel::Point_3 Point_3; + typedef typename Kernel::Vector_3 Vector_3; + namespace GR=GlobalRegistration; + + std::vector set1, set2; + std::vector normals1, normals2; + + typedef GR::Sampling::UniformDistSampler SamplerType; + SamplerType sampler; + + // prepare matcher ressources + GR::Match4PCSBase::MatrixType mat (GR::Match4PCSBase::MatrixType::Identity()); + + // copy points and normal + const std::size_t nbpt1 = range1.size(); + set1.reserve(nbpt1); + normals1.reserve(nbpt1); + for (typename PointRange1::const_iterator it=range1.begin(), + end=range1.end(); it!=end; ++it) + { + const Point_3& p = get(point_map1, *it); + const Vector_3& v = get(vector_map1, *it); + set1.push_back(GR::Point3D(p.x(), p.y(), p.z())); + normals1.push_back(GR::Point3D::VectorType(v.x(), v.y(), v.z())); + } + + const std::size_t nbpt2 = range2.size(); + set2.reserve(nbpt2); + normals2.reserve(nbpt2); + for (typename PointRange1::const_iterator it=range2.begin(), + end=range2.end(); it!=end; ++it) + { + const Point_3& p = get(point_map2, *it); + const Vector_3& v = get(vector_map2, *it); + set2.push_back(GR::Point3D(p.x(), p.y(), p.z())); + normals2.push_back(GR::Point3D::VectorType(v.x(), v.y(), v.z())); + } + + // logger + GR::Utils::Logger logger; + + // TODO add alternative? + GR::MatchSuper4PCS matcher(options, logger); + // TODO: add as a named parameter? + GR::Match4PCSBase::DummyTransformVisitor visitor; + + // Match and return the score (estimated overlap or the LCP). + //GR::Point3D::Scalar score = + matcher.ComputeTransformation(set1, &set2, mat, sampler, visitor ); + + CGAL_assertion(mat.coeff(3,0) == 0); + CGAL_assertion(mat.coeff(3,1) == 0); + CGAL_assertion(mat.coeff(3,2) == 0); + CGAL_assertion(mat.coeff(3,3) == 1); + + // TODO: add an alternative version that only returns the matrix? + //typename Kernel::Aff_transformation_3 cgal_trsf( + // mat.coeff(0,0), mat.coeff(0,1), mat.coeff(0,2), mat.coeff(0,3), + // mat.coeff(1,0), mat.coeff(1,1), mat.coeff(1,2), mat.coeff(1,3), + // mat.coeff(2,0), mat.coeff(2,1), mat.coeff(2,2), mat.coeff(2,3)); + + // update CGAL points + std::size_t id = 0; + for (typename PointRange2::iterator it=range2.begin(), + end=range2.end(); it!=end; ++it) + { + put(point_map2, *it, Point_3(set2[id].x(), set2[id].y(), set2[id].z())); + ++id; + } +} + +} // end of namespace internal + +/*! + * TODO: document me + */ +template +void +align(const PointRange1& point_set_1, PointRange2& point_set_2, + const NamedParameters1& np1, const NamedParameters2& np2) +{ + namespace PSP = CGAL::Point_set_processing_3; + using boost::choose_param; + using boost::get_param; + + // property map types + typedef typename PSP::GetPointMap::type PointMap1; + typedef typename PSP::GetPointMap::type PointMap2; + CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, + typename boost::property_traits::value_type> ::value), + "The point type of input ranges must be the same"); + + typedef typename PSP::GetNormalMap::type NormalMap1; + typedef typename PSP::GetNormalMap::type NormalMap2; + CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, + typename boost::property_traits::value_type> ::value), + "The vector type of input ranges must be the same"); + + typedef typename PSP::GetK::Kernel Kernel; + + PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); + NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); + PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); + NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); + + // TODO: Add a named parameter + GlobalRegistration::Match4PCSOptions options; + // DEFAULT OPTION for hippo + // -o 0.7 -d 0.01 -t 1000 -n 200 -r 4pcs_fast.obj -m mat_4pcs_fast.txt -x + bool overlapOk = options.configureOverlap(0.7); + CGAL_assertion(overlapOk); + + options.sample_size = 200; + options.max_normal_difference = -1; + options.max_color_distance = -1; + options.max_time_seconds = 1000; + options.delta = 0.01; + + internal::align(point_set_1, point_set_2, + point_map1, point_map2, + normal_map1, normal_map2, + options); +} + +// convenience overloads +template +void +align(const PointRange1& point_set_1, PointRange2& point_set_2, + const NamedParameters1& np1) +{ + namespace params = CGAL::Point_set_processing_3::parameters; + align(point_set_1, point_set_2, np1, params::all_default(point_set_1)); +} + +template +void +align(const PointRange1& point_set_1, PointRange2& point_set_2) +{ + namespace params = CGAL::Point_set_processing_3::parameters; + align(point_set_1, point_set_2, + params::all_default(point_set_1), + params::all_default(point_set_2)); +} + +} } // end of namespace CGAL::OpenGR + +#endif // CGAL_OPENGR_ALIGN_H From d36aa9757344a8499938442a0fb3df4c34451d55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sun, 25 Nov 2018 23:11:50 +0100 Subject: [PATCH 02/53] add named parameters for OpenGR options --- .../CGAL/boost/graph/parameters_interface.h | 1 + BGL/test/BGL/test_cgal_bgl_named_params.cpp | 3 +++ .../registration_with_OpenGR.cpp | 19 +++++++++++++++++-- .../include/CGAL/OpenGR/align.h | 17 ++++------------- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/parameters_interface.h b/BGL/include/CGAL/boost/graph/parameters_interface.h index 3273de59c53..d458a28474b 100644 --- a/BGL/include/CGAL/boost/graph/parameters_interface.h +++ b/BGL/include/CGAL/boost/graph/parameters_interface.h @@ -93,6 +93,7 @@ CGAL_add_named_parameter(face_normal_t, face_normal, face_normal_map) CGAL_add_named_parameter(random_seed_t, random_seed, random_seed) CGAL_add_named_parameter(do_project_t, do_project, do_project) CGAL_add_named_parameter(tolerance_map_t, tolerance_map, tolerance_map) +CGAL_add_named_parameter(opengr_options_t, opengr_options, opengr_options) //internal CGAL_add_named_parameter(weight_calculator_t, weight_calculator, weight_calculator) diff --git a/BGL/test/BGL/test_cgal_bgl_named_params.cpp b/BGL/test/BGL/test_cgal_bgl_named_params.cpp index e797e2b3398..9f118062e4b 100644 --- a/BGL/test/BGL/test_cgal_bgl_named_params.cpp +++ b/BGL/test/BGL/test_cgal_bgl_named_params.cpp @@ -97,6 +97,7 @@ void test(const NamedParameters& np) assert(get_param(np, CGAL::internal_np::face_normal).v == 36); assert(get_param(np, CGAL::internal_np::random_seed).v == 37); assert(get_param(np, CGAL::internal_np::do_project).v == 38); + assert(get_param(np, CGAL::internal_np::opengr_options).v == 9001); // Internal named parameters assert(get_param(np, CGAL::internal_np::weight_calculator).v == 39); @@ -178,6 +179,7 @@ void test(const NamedParameters& np) check_same_type<36>(get_param(np, CGAL::internal_np::face_normal)); check_same_type<37>(get_param(np, CGAL::internal_np::random_seed)); check_same_type<38>(get_param(np, CGAL::internal_np::do_project)); + check_same_type<9001>(get_param(np, CGAL::internal_np::opengr_options)); // Internal named parameters check_same_type<39>(get_param(np, CGAL::internal_np::weight_calculator)); @@ -240,6 +242,7 @@ int main() .face_normal_map(A<36>(36)) .random_seed(A<37>(37)) .do_project(A<38>(38)) + .opengr_options(A<>(9001)) .weight_calculator(A<39>(39)) .preserve_genus(A<40>(40)) .verbosity_level(A<41>(41)) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp index df14ef06635..ce89971aabb 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp @@ -46,10 +46,25 @@ int main(int argc, const char** argv) } input.close(); + // OpenGR options + GlobalRegistration::Match4PCSOptions options; + bool overlap_OK = options.configureOverlap(0.7); + if(!overlap_OK) + { + std::cerr << "Invalid overlap configuration.\n"; + return EXIT_FAILURE; + } + options.sample_size = 200; + options.max_time_seconds = 1000; + options.delta = 0.01; + // call the registration method Super4PCS from OpenGR CGAL::OpenGR::align(pwns1, pwns2, - params::point_map(Point_map()).normal_map(Normal_map()), - params::point_map(Point_map()).normal_map(Normal_map())); + params::point_map(Point_map()) + .normal_map(Normal_map()) + .opengr_options(options), + params::point_map(Point_map()) + .normal_map(Normal_map())); std::ofstream out("pwns2_aligned.ply"); if (!out || diff --git a/Point_set_processing_3/include/CGAL/OpenGR/align.h b/Point_set_processing_3/include/CGAL/OpenGR/align.h index 35f0a0a88e6..93d87f01f44 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/align.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/align.h @@ -134,7 +134,8 @@ void align(const PointRange1& point_set_1, PointRange2& point_set_2, const NamedParameters1& np1, const NamedParameters2& np2) { - namespace PSP = CGAL::Point_set_processing_3; + namespace PSP = CGAL::Point_set_processing_3; + namespace GR = GlobalRegistration; using boost::choose_param; using boost::get_param; @@ -158,18 +159,8 @@ align(const PointRange1& point_set_1, PointRange2& point_set_2, PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); - // TODO: Add a named parameter - GlobalRegistration::Match4PCSOptions options; - // DEFAULT OPTION for hippo - // -o 0.7 -d 0.01 -t 1000 -n 200 -r 4pcs_fast.obj -m mat_4pcs_fast.txt -x - bool overlapOk = options.configureOverlap(0.7); - CGAL_assertion(overlapOk); - - options.sample_size = 200; - options.max_normal_difference = -1; - options.max_color_distance = -1; - options.max_time_seconds = 1000; - options.delta = 0.01; + GR::Match4PCSOptions options = choose_param(get_param(np1, internal_np::opengr_options), + GR::Match4PCSOptions()); internal::align(point_set_1, point_set_2, point_map1, point_map2, From 5911cbc568d4dd25bc494539ebab9ce358da8644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sun, 25 Nov 2018 23:14:20 +0100 Subject: [PATCH 03/53] return score and silent logger --- .../registration_with_OpenGR.cpp | 17 ++++++---- .../include/CGAL/OpenGR/align.h | 32 ++++++++++--------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp index ce89971aabb..e512cb36c60 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp @@ -59,12 +59,13 @@ int main(int argc, const char** argv) options.delta = 0.01; // call the registration method Super4PCS from OpenGR - CGAL::OpenGR::align(pwns1, pwns2, - params::point_map(Point_map()) - .normal_map(Normal_map()) - .opengr_options(options), - params::point_map(Point_map()) - .normal_map(Normal_map())); + double score = + CGAL::OpenGR::align(pwns1, pwns2, + params::point_map(Point_map()) + .normal_map(Normal_map()) + .opengr_options(options), + params::point_map(Point_map()) + .normal_map(Normal_map())); std::ofstream out("pwns2_aligned.ply"); if (!out || @@ -76,5 +77,9 @@ int main(int argc, const char** argv) return EXIT_FAILURE; } + std::cout << "Registration score: " << score << ".\n" + << "Transformed version of " << fname2 + << " written to pwn2_aligned.ply.\n"; + return EXIT_SUCCESS; } \ No newline at end of file diff --git a/Point_set_processing_3/include/CGAL/OpenGR/align.h b/Point_set_processing_3/include/CGAL/OpenGR/align.h index 93d87f01f44..4e46fa4087d 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/align.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/align.h @@ -46,7 +46,7 @@ template -void +double align(const PointRange1& range1, PointRange2& range2, PointMap1 point_map1, PointMap2 point_map2, VectorMap1 vector_map1, VectorMap2 vector_map2, @@ -91,7 +91,7 @@ align(const PointRange1& range1, PointRange2& range2, } // logger - GR::Utils::Logger logger; + GR::Utils::Logger logger(GR::Utils::NoLog); // TODO add alternative? GR::MatchSuper4PCS matcher(options, logger); @@ -99,8 +99,8 @@ align(const PointRange1& range1, PointRange2& range2, GR::Match4PCSBase::DummyTransformVisitor visitor; // Match and return the score (estimated overlap or the LCP). - //GR::Point3D::Scalar score = - matcher.ComputeTransformation(set1, &set2, mat, sampler, visitor ); + double score = + matcher.ComputeTransformation(set1, &set2, mat, sampler, visitor ); CGAL_assertion(mat.coeff(3,0) == 0); CGAL_assertion(mat.coeff(3,1) == 0); @@ -121,6 +121,8 @@ align(const PointRange1& range1, PointRange2& range2, put(point_map2, *it, Point_3(set2[id].x(), set2[id].y(), set2[id].z())); ++id; } + + return score; } } // end of namespace internal @@ -130,7 +132,7 @@ align(const PointRange1& range1, PointRange2& range2, */ template -void +double align(const PointRange1& point_set_1, PointRange2& point_set_2, const NamedParameters1& np1, const NamedParameters2& np2) { @@ -162,31 +164,31 @@ align(const PointRange1& point_set_1, PointRange2& point_set_2, GR::Match4PCSOptions options = choose_param(get_param(np1, internal_np::opengr_options), GR::Match4PCSOptions()); - internal::align(point_set_1, point_set_2, - point_map1, point_map2, - normal_map1, normal_map2, - options); + return internal::align(point_set_1, point_set_2, + point_map1, point_map2, + normal_map1, normal_map2, + options); } // convenience overloads template -void +double align(const PointRange1& point_set_1, PointRange2& point_set_2, const NamedParameters1& np1) { namespace params = CGAL::Point_set_processing_3::parameters; - align(point_set_1, point_set_2, np1, params::all_default(point_set_1)); + return align(point_set_1, point_set_2, np1, params::all_default(point_set_1)); } template -void +double align(const PointRange1& point_set_1, PointRange2& point_set_2) { namespace params = CGAL::Point_set_processing_3::parameters; - align(point_set_1, point_set_2, - params::all_default(point_set_1), - params::all_default(point_set_2)); + return align(point_set_1, point_set_2, + params::all_default(point_set_1), + params::all_default(point_set_2)); } } } // end of namespace CGAL::OpenGR From f2da91be40e8310b77a7fb2d679f57da7acf54a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 29 Nov 2018 01:55:46 +0100 Subject: [PATCH 04/53] update after OpenGR update OpenGR HEAD = cbce48e030 --- Installation/cmake/modules/FindOpenGR.cmake | 17 +------ .../Point_set_processing_3/CMakeLists.txt | 1 - .../registration_with_OpenGR.cpp | 3 +- .../include/CGAL/OpenGR/align.h | 45 +++++++++++-------- 4 files changed, 31 insertions(+), 35 deletions(-) diff --git a/Installation/cmake/modules/FindOpenGR.cmake b/Installation/cmake/modules/FindOpenGR.cmake index 679b1340c9d..99cf68dc346 100644 --- a/Installation/cmake/modules/FindOpenGR.cmake +++ b/Installation/cmake/modules/FindOpenGR.cmake @@ -1,4 +1,4 @@ -if ( NOT (OpenGR_LIBRARIES AND OpenGR_INCLUDE_DIR) ) +if ( OpenGR_INCLUDE_DIR ) # look for headers if (NOT OpenGR_INCLUDE_DIR) @@ -13,21 +13,8 @@ if ( NOT (OpenGR_LIBRARIES AND OpenGR_INCLUDE_DIR) ) endif() endif() -# look for library - if (NOT OpenGR_LIBRARIES) - find_library(OpenGR_algo_LIBRARY - NAMES opengr_algo) - - if (NOT OpenGR_algo_LIBRARY) - message(STATUS "Can not find OpenGR libraries") - else() - message(STATUS "Found OpenGR algorithm library: ${OpenGR_algo_LIBRARY}") - set(OpenGR_LIBRARIES "${OpenGR_algo_LIBRARY}" CACHE PATH "OpenGR libraries") - endif() - endif() - endif() -if ( OpenGR_LIBRARIES AND OpenGR_INCLUDE_DIR ) +if ( OpenGR_INCLUDE_DIR ) set(OpenGR_FOUND ON) endif() diff --git a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt index c93cdfe0b27..bbe1e6b9a21 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt +++ b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt @@ -84,7 +84,6 @@ if ( CGAL_FOUND ) if (OpenGR_FOUND) include_directories(SYSTEM ${OpenGR_INCLUDE_DIR}) create_single_source_cgal_program( "registration_with_OpenGR.cpp" ) - target_link_libraries("registration_with_OpenGR" PRIVATE ${OpenGR_LIBRARIES}) else() message(STATUS "NOTICE: registration_with_OpenGR requires OpenGR, and will not be compiled.") endif() diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp index e512cb36c60..570cf46d368 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp @@ -47,7 +47,8 @@ int main(int argc, const char** argv) input.close(); // OpenGR options - GlobalRegistration::Match4PCSOptions options; + CGAL::OpenGR::Options options; + bool overlap_OK = options.configureOverlap(0.7); if(!overlap_OK) { diff --git a/Point_set_processing_3/include/CGAL/OpenGR/align.h b/Point_set_processing_3/include/CGAL/OpenGR/align.h index 4e46fa4087d..f4b1a2c2f9a 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/align.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/align.h @@ -25,8 +25,9 @@ #include -#include -#include +#include +#include +#include #include @@ -37,6 +38,11 @@ namespace CGAL { namespace OpenGR { +typedef gr::Match4pcsBase::OptionsType Options; + namespace internal { template set1, set2; std::vector normals1, normals2; - typedef GR::Sampling::UniformDistSampler SamplerType; - SamplerType sampler; + // TODO: see if should allow user to change those types + typedef Eigen::Matrix MatrixType; + typedef gr::UniformDistSampler SamplerType; + typedef gr::DummyTransformVisitor TrVisitorType; + typedef gr::Match4pcsBase MatcherType; - // prepare matcher ressources - GR::Match4PCSBase::MatrixType mat (GR::Match4PCSBase::MatrixType::Identity()); + MatrixType mat (MatrixType::Identity()); + SamplerType sampler; + TrVisitorType visitor; // copy points and normal const std::size_t nbpt1 = range1.size(); @@ -93,14 +106,11 @@ align(const PointRange1& range1, PointRange2& range2, // logger GR::Utils::Logger logger(GR::Utils::NoLog); - // TODO add alternative? - GR::MatchSuper4PCS matcher(options, logger); - // TODO: add as a named parameter? - GR::Match4PCSBase::DummyTransformVisitor visitor; - - // Match and return the score (estimated overlap or the LCP). + // matcher + MatcherType matcher(options, logger); double score = - matcher.ComputeTransformation(set1, &set2, mat, sampler, visitor ); + matcher.ComputeTransformation(set1, set2, mat, sampler, visitor); + gr::Utils::TransformPointCloud( set2, mat); CGAL_assertion(mat.coeff(3,0) == 0); CGAL_assertion(mat.coeff(3,1) == 0); @@ -137,7 +147,7 @@ align(const PointRange1& point_set_1, PointRange2& point_set_2, const NamedParameters1& np1, const NamedParameters2& np2) { namespace PSP = CGAL::Point_set_processing_3; - namespace GR = GlobalRegistration; + namespace GR = gr; using boost::choose_param; using boost::get_param; @@ -161,8 +171,7 @@ align(const PointRange1& point_set_1, PointRange2& point_set_2, PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); - GR::Match4PCSOptions options = choose_param(get_param(np1, internal_np::opengr_options), - GR::Match4PCSOptions()); + Options options = choose_param(get_param(np1, internal_np::opengr_options), Options()); return internal::align(point_set_1, point_set_2, point_map1, point_map2, From 049d80c3202b125220d0dca6998c15e509b42e96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 29 Nov 2018 14:41:46 +0100 Subject: [PATCH 05/53] remove no longer needed file --- Installation/cmake/modules/FindOpenGR.cmake | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 Installation/cmake/modules/FindOpenGR.cmake diff --git a/Installation/cmake/modules/FindOpenGR.cmake b/Installation/cmake/modules/FindOpenGR.cmake deleted file mode 100644 index 99cf68dc346..00000000000 --- a/Installation/cmake/modules/FindOpenGR.cmake +++ /dev/null @@ -1,20 +0,0 @@ -if ( OpenGR_INCLUDE_DIR ) - -# look for headers - if (NOT OpenGR_INCLUDE_DIR) - find_path(OpenGR_INC_DIR - NAMES "super4pcs/shared4pcs.h") - - if(NOT OpenGR_INC_DIR) - message(STATUS "Can not find OpenGR include directory") - else() - message(STATUS "Found OpenGR headers in ${OpenGR_INC_DIR}") - set(OpenGR_INCLUDE_DIR "${OpenGR_INC_DIR}" CACHE PATH "Path to OpenGR headers files") - endif() - endif() - -endif() - -if ( OpenGR_INCLUDE_DIR ) - set(OpenGR_FOUND ON) -endif() From 1453280fcd653c7a25f9864ed7185bc9220f50ec Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Fri, 30 Nov 2018 13:36:43 +0100 Subject: [PATCH 06/53] fix license checker --- Point_set_processing_3/include/CGAL/OpenGR/align.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Point_set_processing_3/include/CGAL/OpenGR/align.h b/Point_set_processing_3/include/CGAL/OpenGR/align.h index f4b1a2c2f9a..bd7d39fa830 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/align.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/align.h @@ -18,6 +18,11 @@ // // Author(s) : Sebastien Loriot +#ifndef CGAL_OPENGR_ALIGN_H +#define CGAL_OPENGR_ALIGN_H + +#include + #include #include #include @@ -31,9 +36,6 @@ #include -#ifndef CGAL_OPENGR_ALIGN_H -#define CGAL_OPENGR_ALIGN_H - namespace CGAL { namespace OpenGR { From da776c75c1c37c83c8502c1b930b43ffde2b1a3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 4 Dec 2018 16:15:56 +0100 Subject: [PATCH 07/53] add compute_transformation --- .../registration_with_OpenGR.cpp | 13 +- .../CGAL/OpenGR/{align.h => registration.h} | 124 ++++++++++++++---- 2 files changed, 112 insertions(+), 25 deletions(-) rename Point_set_processing_3/include/CGAL/OpenGR/{align.h => registration.h} (58%) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp index 570cf46d368..4293558dd76 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include @@ -59,7 +59,16 @@ int main(int argc, const char** argv) options.max_time_seconds = 1000; options.delta = 0.01; - // call the registration method Super4PCS from OpenGR + // EITHER call the registration method Super4PCS from OpenGR to get the transformation to apply to pwns2 + // std::pair res = + CGAL::OpenGR::compute_transformation(pwns1, pwns2, + params::point_map(Point_map()) + .normal_map(Normal_map()) + .opengr_options(options), + params::point_map(Point_map()) + .normal_map(Normal_map())); + + // OR call the registration method Super4PCS from OpenGR and apply the transformation to pwn2 double score = CGAL::OpenGR::align(pwns1, pwns2, params::point_map(Point_map()) diff --git a/Point_set_processing_3/include/CGAL/OpenGR/align.h b/Point_set_processing_3/include/CGAL/OpenGR/registration.h similarity index 58% rename from Point_set_processing_3/include/CGAL/OpenGR/align.h rename to Point_set_processing_3/include/CGAL/OpenGR/registration.h index bd7d39fa830..225e4a5820b 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/align.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/registration.h @@ -18,8 +18,8 @@ // // Author(s) : Sebastien Loriot -#ifndef CGAL_OPENGR_ALIGN_H -#define CGAL_OPENGR_ALIGN_H +#ifndef CGAL_OPENGR_REGISTRATION_H +#define CGAL_OPENGR_REGISTRATION_H #include @@ -32,7 +32,6 @@ #include #include -#include #include @@ -54,11 +53,11 @@ template -double -align(const PointRange1& range1, PointRange2& range2, - PointMap1 point_map1, PointMap2 point_map2, - VectorMap1 vector_map1, VectorMap2 vector_map2, - Options& options) +std::pair +compute_transformation(const PointRange1& range1, const PointRange2& range2, + PointMap1 point_map1, PointMap2 point_map2, + VectorMap1 vector_map1, VectorMap2 vector_map2, + Options& options) { typedef typename Kernel::Point_3 Point_3; typedef typename Kernel::Vector_3 Vector_3; @@ -112,29 +111,42 @@ align(const PointRange1& range1, PointRange2& range2, MatcherType matcher(options, logger); double score = matcher.ComputeTransformation(set1, set2, mat, sampler, visitor); - gr::Utils::TransformPointCloud( set2, mat); - CGAL_assertion(mat.coeff(3,0) == 0); - CGAL_assertion(mat.coeff(3,1) == 0); - CGAL_assertion(mat.coeff(3,2) == 0); - CGAL_assertion(mat.coeff(3,3) == 1); + typename Kernel::Aff_transformation_3 cgal_trsf( + mat.coeff(0,0), mat.coeff(0,1), mat.coeff(0,2), mat.coeff(0,3), + mat.coeff(1,0), mat.coeff(1,1), mat.coeff(1,2), mat.coeff(1,3), + mat.coeff(2,0), mat.coeff(2,1), mat.coeff(2,2), mat.coeff(2,3)); - // TODO: add an alternative version that only returns the matrix? - //typename Kernel::Aff_transformation_3 cgal_trsf( - // mat.coeff(0,0), mat.coeff(0,1), mat.coeff(0,2), mat.coeff(0,3), - // mat.coeff(1,0), mat.coeff(1,1), mat.coeff(1,2), mat.coeff(1,3), - // mat.coeff(2,0), mat.coeff(2,1), mat.coeff(2,2), mat.coeff(2,3)); + return std::make_pair(cgal_trsf, score); +} + +template +double +align(const PointRange1& range1, PointRange2& range2, + PointMap1 point_map1, PointMap2 point_map2, + VectorMap1 vector_map1, VectorMap2 vector_map2, + Options& options) +{ + std::pair res = + compute_transformation(range1, range2, + point_map1, point_map2, + vector_map1, vector_map2, + options); // update CGAL points - std::size_t id = 0; for (typename PointRange2::iterator it=range2.begin(), end=range2.end(); it!=end; ++it) { - put(point_map2, *it, Point_3(set2[id].x(), set2[id].y(), set2[id].z())); - ++id; + put(point_map2, *it, get(point_map2, *it).transform(res.first)); } - return score; + return res.second; } } // end of namespace internal @@ -181,6 +193,49 @@ align(const PointRange1& point_set_1, PointRange2& point_set_2, options); } +/*! + * TODO: document me + */ +template +std::pair + ::Kernel::Aff_transformation_3, double> +compute_transformation(const PointRange1& point_set_1, const PointRange2& point_set_2, + const NamedParameters1& np1, const NamedParameters2& np2) +{ + namespace PSP = CGAL::Point_set_processing_3; + namespace GR = gr; + using boost::choose_param; + using boost::get_param; + + // property map types + typedef typename PSP::GetPointMap::type PointMap1; + typedef typename PSP::GetPointMap::type PointMap2; + CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, + typename boost::property_traits::value_type> ::value), + "The point type of input ranges must be the same"); + + typedef typename PSP::GetNormalMap::type NormalMap1; + typedef typename PSP::GetNormalMap::type NormalMap2; + CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, + typename boost::property_traits::value_type> ::value), + "The vector type of input ranges must be the same"); + + typedef typename PSP::GetK::Kernel Kernel; + + PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); + NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); + PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); + NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); + + Options options = choose_param(get_param(np1, internal_np::opengr_options), Options()); + + return internal::compute_transformation(point_set_1, point_set_2, + point_map1, point_map2, + normal_map1, normal_map2, + options); +} + // convenience overloads template @@ -202,6 +257,29 @@ align(const PointRange1& point_set_1, PointRange2& point_set_2) params::all_default(point_set_2)); } +template +std::pair + ::Kernel::Aff_transformation_3, double> +compute_transformation(const PointRange1& point_set_1, PointRange2& point_set_2, + const NamedParameters1& np1) +{ + namespace params = CGAL::Point_set_processing_3::parameters; + return compute_transformation(point_set_1, point_set_2, np1, params::all_default(point_set_1)); +} + +template +std::pair > + ::Kernel::Aff_transformation_3, double> +compute_transformation(const PointRange1& point_set_1, PointRange2& point_set_2) +{ + namespace params = CGAL::Point_set_processing_3::parameters; + return compute_transformation(point_set_1, point_set_2, + params::all_default(point_set_1), + params::all_default(point_set_2)); +} + } } // end of namespace CGAL::OpenGR -#endif // CGAL_OPENGR_ALIGN_H +#endif // CGAL_OPENGR_REGISTRATION_H From 48ad9c4d5798a26702fc28728f6d64302f9f3efd Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 7 Jan 2019 12:21:12 +0100 Subject: [PATCH 08/53] Separate files and rename functions --- .../registration_with_OpenGR.cpp | 31 ++-- ... => compute_registration_transformation.h} | 129 +++------------- .../include/CGAL/OpenGR/register_point_sets.h | 139 ++++++++++++++++++ 3 files changed, 174 insertions(+), 125 deletions(-) rename Point_set_processing_3/include/CGAL/OpenGR/{registration.h => compute_registration_transformation.h} (56%) create mode 100644 Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp index 4293558dd76..73bf607cc09 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp @@ -3,7 +3,8 @@ #include #include -#include +#include +#include #include #include @@ -49,7 +50,7 @@ int main(int argc, const char** argv) // OpenGR options CGAL::OpenGR::Options options; - bool overlap_OK = options.configureOverlap(0.7); + bool overlap_OK = options.configureOverlap(0.8); if(!overlap_OK) { std::cerr << "Invalid overlap configuration.\n"; @@ -61,21 +62,21 @@ int main(int argc, const char** argv) // EITHER call the registration method Super4PCS from OpenGR to get the transformation to apply to pwns2 // std::pair res = - CGAL::OpenGR::compute_transformation(pwns1, pwns2, - params::point_map(Point_map()) - .normal_map(Normal_map()) - .opengr_options(options), - params::point_map(Point_map()) - .normal_map(Normal_map())); + CGAL::OpenGR::compute_registration_transformation(pwns1, pwns2, + params::point_map(Point_map()) + .normal_map(Normal_map()) + .opengr_options(options), + params::point_map(Point_map()) + .normal_map(Normal_map())); // OR call the registration method Super4PCS from OpenGR and apply the transformation to pwn2 double score = - CGAL::OpenGR::align(pwns1, pwns2, - params::point_map(Point_map()) - .normal_map(Normal_map()) - .opengr_options(options), - params::point_map(Point_map()) - .normal_map(Normal_map())); + CGAL::OpenGR::register_point_sets(pwns1, pwns2, + params::point_map(Point_map()) + .normal_map(Normal_map()) + .opengr_options(options), + params::point_map(Point_map()) + .normal_map(Normal_map())); std::ofstream out("pwns2_aligned.ply"); if (!out || @@ -92,4 +93,4 @@ int main(int argc, const char** argv) << " written to pwn2_aligned.ply.\n"; return EXIT_SUCCESS; -} \ No newline at end of file +} diff --git a/Point_set_processing_3/include/CGAL/OpenGR/registration.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h similarity index 56% rename from Point_set_processing_3/include/CGAL/OpenGR/registration.h rename to Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index 225e4a5820b..017a78bf438 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/registration.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -18,8 +18,8 @@ // // Author(s) : Sebastien Loriot -#ifndef CGAL_OPENGR_REGISTRATION_H -#define CGAL_OPENGR_REGISTRATION_H +#ifndef CGAL_OPENGR_COMPUTE_REGISTRATION_TRANSFORMATION_H +#define CGAL_OPENGR_COMPUTE_REGISTRATION_TRANSFORMATION_H #include @@ -54,10 +54,10 @@ template std::pair -compute_transformation(const PointRange1& range1, const PointRange2& range2, - PointMap1 point_map1, PointMap2 point_map2, - VectorMap1 vector_map1, VectorMap2 vector_map2, - Options& options) +compute_registration_transformation(const PointRange1& range1, const PointRange2& range2, + PointMap1 point_map1, PointMap2 point_map2, + VectorMap1 vector_map1, VectorMap2 vector_map2, + Options& options) { typedef typename Kernel::Point_3 Point_3; typedef typename Kernel::Vector_3 Vector_3; @@ -120,79 +120,8 @@ compute_transformation(const PointRange1& range1, const PointRange2& range2, return std::make_pair(cgal_trsf, score); } -template -double -align(const PointRange1& range1, PointRange2& range2, - PointMap1 point_map1, PointMap2 point_map2, - VectorMap1 vector_map1, VectorMap2 vector_map2, - Options& options) -{ - std::pair res = - compute_transformation(range1, range2, - point_map1, point_map2, - vector_map1, vector_map2, - options); - - // update CGAL points - for (typename PointRange2::iterator it=range2.begin(), - end=range2.end(); it!=end; ++it) - { - put(point_map2, *it, get(point_map2, *it).transform(res.first)); - } - - return res.second; -} - } // end of namespace internal -/*! - * TODO: document me - */ -template -double -align(const PointRange1& point_set_1, PointRange2& point_set_2, - const NamedParameters1& np1, const NamedParameters2& np2) -{ - namespace PSP = CGAL::Point_set_processing_3; - namespace GR = gr; - using boost::choose_param; - using boost::get_param; - - // property map types - typedef typename PSP::GetPointMap::type PointMap1; - typedef typename PSP::GetPointMap::type PointMap2; - CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, - typename boost::property_traits::value_type> ::value), - "The point type of input ranges must be the same"); - - typedef typename PSP::GetNormalMap::type NormalMap1; - typedef typename PSP::GetNormalMap::type NormalMap2; - CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, - typename boost::property_traits::value_type> ::value), - "The vector type of input ranges must be the same"); - - typedef typename PSP::GetK::Kernel Kernel; - - PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); - NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); - PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); - NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); - - Options options = choose_param(get_param(np1, internal_np::opengr_options), Options()); - - return internal::align(point_set_1, point_set_2, - point_map1, point_map2, - normal_map1, normal_map2, - options); -} - /*! * TODO: document me */ @@ -200,8 +129,8 @@ template std::pair ::Kernel::Aff_transformation_3, double> -compute_transformation(const PointRange1& point_set_1, const PointRange2& point_set_2, - const NamedParameters1& np1, const NamedParameters2& np2) +compute_registration_transformation (const PointRange1& point_set_1, const PointRange2& point_set_2, + const NamedParameters1& np1, const NamedParameters2& np2) { namespace PSP = CGAL::Point_set_processing_3; namespace GR = gr; @@ -230,56 +159,36 @@ compute_transformation(const PointRange1& point_set_1, const PointRange2& point_ Options options = choose_param(get_param(np1, internal_np::opengr_options), Options()); - return internal::compute_transformation(point_set_1, point_set_2, - point_map1, point_map2, - normal_map1, normal_map2, - options); + return internal::compute_registration_transformation(point_set_1, point_set_2, + point_map1, point_map2, + normal_map1, normal_map2, + options); } // convenience overloads -template -double -align(const PointRange1& point_set_1, PointRange2& point_set_2, - const NamedParameters1& np1) -{ - namespace params = CGAL::Point_set_processing_3::parameters; - return align(point_set_1, point_set_2, np1, params::all_default(point_set_1)); -} - -template -double -align(const PointRange1& point_set_1, PointRange2& point_set_2) -{ - namespace params = CGAL::Point_set_processing_3::parameters; - return align(point_set_1, point_set_2, - params::all_default(point_set_1), - params::all_default(point_set_2)); -} - template std::pair ::Kernel::Aff_transformation_3, double> -compute_transformation(const PointRange1& point_set_1, PointRange2& point_set_2, +compute_registration_transformation(const PointRange1& point_set_1, PointRange2& point_set_2, const NamedParameters1& np1) { namespace params = CGAL::Point_set_processing_3::parameters; - return compute_transformation(point_set_1, point_set_2, np1, params::all_default(point_set_1)); + return compute_registration_transformation(point_set_1, point_set_2, np1, params::all_default(point_set_1)); } template std::pair > ::Kernel::Aff_transformation_3, double> -compute_transformation(const PointRange1& point_set_1, PointRange2& point_set_2) +compute_registration_transformation(const PointRange1& point_set_1, PointRange2& point_set_2) { namespace params = CGAL::Point_set_processing_3::parameters; - return compute_transformation(point_set_1, point_set_2, - params::all_default(point_set_1), - params::all_default(point_set_2)); + return compute_registration_transformation(point_set_1, point_set_2, + params::all_default(point_set_1), + params::all_default(point_set_2)); } } } // end of namespace CGAL::OpenGR -#endif // CGAL_OPENGR_REGISTRATION_H +#endif // CGAL_OPENGR_COMPUTE_REGISTRATION_TRANSFORMATION_H diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h new file mode 100644 index 00000000000..043c23a57e6 --- /dev/null +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -0,0 +1,139 @@ +// Copyright (c) 2018 GeometryFactory(France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// You can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0+ +// +// Author(s) : Sebastien Loriot + +#ifndef CGAL_OPENGR_REGISTER_POINT_SETS_H +#define CGAL_OPENGR_REGISTER_POINT_SETS_H + +#include + +#include +#include +#include +#include + +#include + +#include + +#include + +namespace CGAL { + +namespace OpenGR { + +namespace internal { + +template +double +register_point_sets(const PointRange1& range1, PointRange2& range2, + PointMap1 point_map1, PointMap2 point_map2, + VectorMap1 vector_map1, VectorMap2 vector_map2, + Options& options) +{ + std::pair res = + compute_registration_transformation(range1, range2, + point_map1, point_map2, + vector_map1, vector_map2, + options); + + // update CGAL points + for (typename PointRange2::iterator it=range2.begin(), + end=range2.end(); it!=end; ++it) + { + put(point_map2, *it, get(point_map2, *it).transform(res.first)); + } + + return res.second; +} + +} // end of namespace internal + +/*! + * TODO: document me + */ +template +double +register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, + const NamedParameters1& np1, const NamedParameters2& np2) +{ + namespace PSP = CGAL::Point_set_processing_3; + namespace GR = gr; + using boost::choose_param; + using boost::get_param; + + // property map types + typedef typename PSP::GetPointMap::type PointMap1; + typedef typename PSP::GetPointMap::type PointMap2; + CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, + typename boost::property_traits::value_type> ::value), + "The point type of input ranges must be the same"); + + typedef typename PSP::GetNormalMap::type NormalMap1; + typedef typename PSP::GetNormalMap::type NormalMap2; + CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, + typename boost::property_traits::value_type> ::value), + "The vector type of input ranges must be the same"); + + typedef typename PSP::GetK::Kernel Kernel; + + PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); + NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); + PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); + NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); + + Options options = choose_param(get_param(np1, internal_np::opengr_options), Options()); + + return internal::register_point_sets(point_set_1, point_set_2, + point_map1, point_map2, + normal_map1, normal_map2, + options); +} + +// convenience overloads +template +double +register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2, + const NamedParameters1& np1) +{ + namespace params = CGAL::Point_set_processing_3::parameters; + return register_point_sets(point_set_1, point_set_2, np1, params::all_default(point_set_1)); +} + +template +double +register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2) +{ + namespace params = CGAL::Point_set_processing_3::parameters; + return register_point_sets(point_set_1, point_set_2, + params::all_default(point_set_1), + params::all_default(point_set_2)); +} + +} } // end of namespace CGAL::OpenGR + +#endif // CGAL_OPENGR_REGISTER_POINT_SETS_H From 927474eecd7425ba4b6c1843a75a0f3b969bec86 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 7 Jan 2019 14:47:24 +0100 Subject: [PATCH 09/53] Modify named parameters and begin ref manual --- .../CGAL/boost/graph/parameters_interface.h | 6 +- .../NamedParameters.txt | 24 +++++++ .../PackageDescription.txt | 4 +- .../registration_with_OpenGR.cpp | 23 ++----- .../compute_registration_transformation.h | 68 +++++++++++++++++-- .../include/CGAL/OpenGR/register_point_sets.h | 61 +++++++++++++++-- 6 files changed, 160 insertions(+), 26 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/parameters_interface.h b/BGL/include/CGAL/boost/graph/parameters_interface.h index d458a28474b..47c5539d305 100644 --- a/BGL/include/CGAL/boost/graph/parameters_interface.h +++ b/BGL/include/CGAL/boost/graph/parameters_interface.h @@ -93,7 +93,6 @@ CGAL_add_named_parameter(face_normal_t, face_normal, face_normal_map) CGAL_add_named_parameter(random_seed_t, random_seed, random_seed) CGAL_add_named_parameter(do_project_t, do_project, do_project) CGAL_add_named_parameter(tolerance_map_t, tolerance_map, tolerance_map) -CGAL_add_named_parameter(opengr_options_t, opengr_options, opengr_options) //internal CGAL_add_named_parameter(weight_calculator_t, weight_calculator, weight_calculator) @@ -143,3 +142,8 @@ CGAL_add_named_parameter(proxies_t, proxies, proxies) CGAL_add_named_parameter(anchors_t, anchors, anchors) CGAL_add_named_parameter(triangles_t, triangles, triangles) +CGAL_add_named_parameter(number_of_samples_t, number_of_samples, number_of_samples) +CGAL_add_named_parameter(accuracy_t, accuracy, accuracy) +CGAL_add_named_parameter(maximum_running_time_t, maximum_running_time, maximum_running_time) +CGAL_add_named_parameter(overlap_t, overlap, overlap) + diff --git a/Point_set_processing_3/doc/Point_set_processing_3/NamedParameters.txt b/Point_set_processing_3/doc/Point_set_processing_3/NamedParameters.txt index e2c64e40efb..f8060cb91b8 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/NamedParameters.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/NamedParameters.txt @@ -191,6 +191,30 @@ Constrained points are left unaltered and are used as seeds in `mst_orient_norma Default value: a property map with only the highest point constrained. \cgalNPEnd +\cgalNPBegin{number_of_samples} \anchor PSP_number_of_samples +is the number of input points used for computation.\n +\b Type: \c unsigned \c int \n +Default value: `200` +\cgalNPEnd + +\cgalNPBegin{accuracy} \anchor PSP_accuracy +is the wanted output accuracy, expressed in scene units.\n +\b Type: floating scalar value\n +Default value: `5.00` +\cgalNPEnd + +\cgalNPBegin{overlap} \anchor PSP_overlap +is the expected overlap ratio (between 0 and 1) between two points sets to register.\n +\b Type: floating scalar value\n +Default value: `0.20` +\cgalNPEnd + +\cgalNPBegin{maximum_running_time} \anchor PSP_maximum_running_time +is the maximum time (in seconds) allowed to the function before ending and returning the best solution found so far.\n +\b Type: floating scalar value\n +Default value: `1000` +\cgalNPEnd + \cgalNPTableEnd */ diff --git a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt index dc3bf7ab968..8e274d01a05 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt @@ -51,10 +51,12 @@ format. - `CGAL::estimate_global_range_scale()` - `CGAL::estimate_local_k_neighbor_scales()` - `CGAL::estimate_local_range_scales()` +- `CGAL::OpenGR::compute_registration_transformation()` +- `CGAL::OpenGR::register_point_sets()` - `CGAL::remove_outliers()` - `CGAL::grid_simplify_point_set()` - `CGAL::random_simplify_point_set()` -- `CGAL::hierarchy_simplify_point_set()` +- `CGAL::hierarchy_simplify_point_set()` - `CGAL::wlop_simplify_and_regularize_point_set()` - `CGAL::jet_smooth_point_set()` - `CGAL::bilateral_smooth_point_set()` diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp index 73bf607cc09..c418d78523e 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp @@ -46,26 +46,15 @@ int main(int argc, const char** argv) return EXIT_FAILURE; } input.close(); - - // OpenGR options - CGAL::OpenGR::Options options; - - bool overlap_OK = options.configureOverlap(0.8); - if(!overlap_OK) - { - std::cerr << "Invalid overlap configuration.\n"; - return EXIT_FAILURE; - } - options.sample_size = 200; - options.max_time_seconds = 1000; - options.delta = 0.01; - + // EITHER call the registration method Super4PCS from OpenGR to get the transformation to apply to pwns2 // std::pair res = CGAL::OpenGR::compute_registration_transformation(pwns1, pwns2, params::point_map(Point_map()) .normal_map(Normal_map()) - .opengr_options(options), + .number_of_samples(200) + .maximum_running_time(60) + .accuracy(0.01), params::point_map(Point_map()) .normal_map(Normal_map())); @@ -74,7 +63,9 @@ int main(int argc, const char** argv) CGAL::OpenGR::register_point_sets(pwns1, pwns2, params::point_map(Point_map()) .normal_map(Normal_map()) - .opengr_options(options), + .number_of_samples(200) + .maximum_running_time(60) + .accuracy(0.01), params::point_map(Point_map()) .normal_map(Normal_map())); diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index 017a78bf438..7bfd9c0f7d1 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -122,13 +122,67 @@ compute_registration_transformation(const PointRange1& range1, const PointRan } // end of namespace internal -/*! - * TODO: document me - */ +/** + \ingroup PkgPointSetProcessing3Algorithms + + Computes the registration of `point_set_2` with respect to `point_set_1` and + returns the corresponding affine transformation along with the registration + score. + + \tparam PointRange1 is a model of `Range`. The value type of its iterator is + the key type of the named parameter `point_map` in `NamedParameters1`. + \tparam PointRange2 is a model of `Range`. The value type of its iterator is + the key type of the named parameter `point_map` in `NamedParameters2`. + + \param point_set_1 input point range used as reference. + \param point_set_2 input point range whose registration w.r.t. `point_set_1` will be computed. + \param np1 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + + \cgalNamedParamsBegin + \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type + is the value type of the iterator of `PointRange1` and whose value type is + `geom_traits::Point_3`. If this parameter is omitted, + `CGAL::Identity_property_map` is used.\cgalParamEnd + \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key + type is the value type of the iterator of `PointRange1` and whose value + type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamBegin{number_of_samples} size of the subset of input points used + to compute registration.\cgalParamEnd + \cgalParamBegin{accuracy} registration accuracy expressed in scene + units.\cgalParamEnd + \cgalParamBegin{overlap} ratio of expected overlap between the two point + sets (between 0 for no overlap to 1 for a full overlap).\cgalParamEnd + \cgalParamBegin{maximum_running_time} number of seconds after which the + algorithm is forced to stop and returns the best solution found so + far.\cgalParamEnd + \cgalParamBegin{geom_traits} an instance of a geometric traits class, + model of `Kernel`\cgalParamEnd + \cgalNamedParamsEnd + + \param np2 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + + \cgalNamedParamsBegin + \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type + is the value type of the iterator of `PointRange2` and whose value type is + `geom_traits::Point_3`. If this parameter is omitted, + `CGAL::Identity_property_map` is used.\cgalParamEnd + \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key + type is the value type of the iterator of `PointRange2` and whose value + type `geom_traits::Vector_3`.\cgalParamEnd + \cgalNamedParamsEnd + + \return a pair containing the affine transformation that should be applied + to `point_set_2` to make it registered w.r.t. `point_set_1` and the + registration score. +*/ template +#ifdef DOXYGEN_RUNNING +std::pair +#else std::pair ::Kernel::Aff_transformation_3, double> +#endif compute_registration_transformation (const PointRange1& point_set_1, const PointRange2& point_set_2, const NamedParameters1& np1, const NamedParameters2& np2) { @@ -157,7 +211,13 @@ compute_registration_transformation (const PointRange1& point_set_1, const Point PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); - Options options = choose_param(get_param(np1, internal_np::opengr_options), Options()); + Options options; + options.sample_size = choose_param(get_param(np1, internal_np::number_of_samples), 200); + options.delta = choose_param(get_param(np1, internal_np::accuracy), 5.00); + options.max_time_seconds = choose_param(get_param(np1, internal_np::maximum_running_time), 1000); + bool overlap_ok = options.configureOverlap (choose_param(get_param(np1, internal_np::overlap), 0.20)); + CGAL_USE (overlap_ok); + CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); return internal::compute_registration_transformation(point_set_1, point_set_2, point_map1, point_map2, diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index 043c23a57e6..52ae3c41a22 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -71,9 +71,56 @@ register_point_sets(const PointRange1& range1, PointRange2& range2, } // end of namespace internal -/*! - * TODO: document me - */ +/** + \ingroup PkgPointSetProcessing3Algorithms + + Computes the registration of `point_set_2` with respect to `point_set_1` and + applies it. + + \tparam PointRange1 is a model of `Range`. The value type of its iterator is + the key type of the named parameter `point_map` in `NamedParameters1`. + \tparam PointRange2 is a model of `Range`. The value type of its iterator is + the key type of the named parameter `point_map` in `NamedParameters2`. + + \param point_set_1 input point range used as reference. + \param point_set_2 input point range whose registration w.r.t. `point_set_1` will be computed. + \param np1 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + + \cgalNamedParamsBegin + \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type + is the value type of the iterator of `PointRange1` and whose value type is + `geom_traits::Point_3`. If this parameter is omitted, + `CGAL::Identity_property_map` is used.\cgalParamEnd + \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key + type is the value type of the iterator of `PointRange1` and whose value + type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamBegin{number_of_samples} size of the subset of input points used + to compute registration.\cgalParamEnd + \cgalParamBegin{accuracy} registration accuracy expressed in scene + units.\cgalParamEnd + \cgalParamBegin{overlap} ratio of expected overlap between the two point + sets (between 0 for no overlap to 1 for a full overlap).\cgalParamEnd + \cgalParamBegin{maximum_running_time} number of seconds after which the + algorithm is forced to stop and returns the best solution found so + far.\cgalParamEnd + \cgalParamBegin{geom_traits} an instance of a geometric traits class, + model of `Kernel`\cgalParamEnd + \cgalNamedParamsEnd + + \param np2 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + + \cgalNamedParamsBegin + \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type + is the value type of the iterator of `PointRange2` and whose value type is + `geom_traits::Point_3`. If this parameter is omitted, + `CGAL::Identity_property_map` is used.\cgalParamEnd + \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key + type is the value type of the iterator of `PointRange2` and whose value + type `geom_traits::Vector_3`.\cgalParamEnd + \cgalNamedParamsEnd + + \return the registration score. +*/ template double @@ -105,7 +152,13 @@ register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); - Options options = choose_param(get_param(np1, internal_np::opengr_options), Options()); + Options options; + options.sample_size = choose_param(get_param(np1, internal_np::number_of_samples), 200); + options.delta = choose_param(get_param(np1, internal_np::accuracy), 5.00); + options.max_time_seconds = choose_param(get_param(np1, internal_np::maximum_running_time), 1000); + bool overlap_ok = options.configureOverlap (choose_param(get_param(np1, internal_np::overlap), 0.20)); + CGAL_USE (overlap_ok); + CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); return internal::register_point_sets(point_set_1, point_set_2, point_map1, point_map2, From 6a43faceff229944e7201f7178da11c7e85d397e Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 7 Jan 2019 16:31:52 +0100 Subject: [PATCH 10/53] Documentation of registration functions (user + ref + biblio) --- .../doc/Documentation/Installation.txt | 8 ++++++++ Documentation/doc/biblio/cgal_manual.bib | 20 +++++++++++++++++++ .../Point_set_processing_3.txt | 17 ++++++++++++++++ .../doc/Point_set_processing_3/examples.txt | 1 + .../compute_registration_transformation.h | 4 ++++ .../include/CGAL/OpenGR/register_point_sets.h | 5 +++++ 6 files changed, 55 insertions(+) diff --git a/Documentation/doc/Documentation/Installation.txt b/Documentation/doc/Documentation/Installation.txt index e4615d684fb..bc33dcab366 100644 --- a/Documentation/doc/Documentation/Installation.txt +++ b/Documentation/doc/Documentation/Installation.txt @@ -535,6 +535,14 @@ and the \ref PkgRidges3Ref packages. The \sc{Eigen} web site is `http://eigen.tuxfamily.org`. +\subsection thirdpartyOpenGR OpenGR + +\sc{OpenGR} is a is a set C++ libraries for 3D Global Registration released under the terms of the APACHE V2 licence. + +\cgal provides wrappers for the Super4PCS algorithm of \sc{OpenGR} in the \ref PkgPointSetProcessing3Ref packages. + +The \sc{OpenGR} web site is `https://github.com/STORM-IRIT/OpenGR`. + \subsection thirdpartyESBTL ESBTL The \sc{Esbtl} (Easy Structural Biology Template Library) is a library that allows diff --git a/Documentation/doc/biblio/cgal_manual.bib b/Documentation/doc/biblio/cgal_manual.bib index 01465711f25..d4dd50034e8 100644 --- a/Documentation/doc/biblio/cgal_manual.bib +++ b/Documentation/doc/biblio/cgal_manual.bib @@ -1543,6 +1543,13 @@ ABSTRACT = {We present the first complete, exact and efficient C++ implementatio ,update = "97.04 schoenherr" } +@misc{ cgal:m-ogr-17, + author = {Nicolas Mellado and others}, + title = {OpenGR: A C++ library for 3D Global Registration}, + howpublished = {https://storm-irit.github.io/OpenGR/}, + year = {2017} +} + @inproceedings{ cgal:m-pppd-96 ,author = "Kurt Mehlhorn" ,title = "Position Paper for Panel Discussion" @@ -1583,6 +1590,19 @@ ABSTRACT = {We present the first complete, exact and efficient C++ implementatio , booktitle = "Proceeding of IEEE Visualization" } +@article {cgal:mam-sffgp-14, + author = {Mellado, Nicolas and Aiger, Dror and Mitra, Niloy J.}, + title = {Super 4PCS Fast Global Pointcloud Registration via Smart Indexing}, + journal = {Computer Graphics Forum}, + volume = {33}, + number = {5}, + issn = {1467-8659}, + url = {http://dx.doi.org/10.1111/cgf.12446}, + doi = {10.1111/cgf.12446}, + pages = {205--215}, + year = {2014} +} + @inproceedings{ cgal:mdsb-ddgot-02, author="M. Meyer and M. Desbrun and P. Schr{\"o}der and A. H. Barr", title="Discrete Differential-Geometry Operators for Triangulated 2-Manifolds", diff --git a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt index 275ecf450fb..9cf6393257b 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt @@ -314,7 +314,24 @@ points in the domain. \cgalExample{Point_set_processing_3/scale_estimation_2d_example.cpp} +\section Point_set_processing_3Registration Registration +\cgal provides two wrappers for the \ref thirdpartyOpenGR library +\cgalCite{cgal:m-ogr-17} : + +- `CGAL::OpenGR::compute_registration_transformation()` computes the +registration of one point set w.r.t. another in the form of a +`CGAL::Aff_transformation_3` object, using the Super4PCS algorithm +\cgalCite{cgal:mam-sffgp-14}; + +- `CGAL::OpenGR::register_point_sets()` computes the registration of +one point set w.r.t. another and directly aligns it to it. + +\subsection Point_set_processing_3Example_registration Example + +The following example reads two point sets and aligns them using the +\ref thirdpartyOpenGR library: +\cgalExample{Point_set_processing_3/registration_with_OpenGR.cpp} \section Point_set_processing_3OutlierRemoval Outlier Removal diff --git a/Point_set_processing_3/doc/Point_set_processing_3/examples.txt b/Point_set_processing_3/doc/Point_set_processing_3/examples.txt index 43849ae022c..e535bba787b 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/examples.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/examples.txt @@ -6,6 +6,7 @@ \example Point_set_processing_3/average_spacing_example.cpp \example Point_set_processing_3/scale_estimation_example.cpp \example Point_set_processing_3/scale_estimation_2d_example.cpp +\example Point_set_processing_3/registration_with_OpenGR.cpp \example Point_set_processing_3/remove_outliers_example.cpp \example Point_set_processing_3/grid_simplification_example.cpp \example Point_set_processing_3/grid_simplify_indices.cpp diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index 7bfd9c0f7d1..b703186eba4 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -129,6 +129,10 @@ compute_registration_transformation(const PointRange1& range1, const PointRan returns the corresponding affine transformation along with the registration score. + Registration is computed using the Super4PCS algorithm \cgalCite{cgal:mam-sffgp-14}. + + \note This function requires the \ref thirdpartyOpenGR library. + \tparam PointRange1 is a model of `Range`. The value type of its iterator is the key type of the named parameter `point_map` in `NamedParameters1`. \tparam PointRange2 is a model of `Range`. The value type of its iterator is diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index 52ae3c41a22..5ca66d9f24e 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -77,6 +77,11 @@ register_point_sets(const PointRange1& range1, PointRange2& range2, Computes the registration of `point_set_2` with respect to `point_set_1` and applies it. + Registration is computed using the Super4PCS algorithm + \cgalCite{cgal:mam-sffgp-14}. + + \note This function requires the \ref thirdpartyOpenGR library. + \tparam PointRange1 is a model of `Range`. The value type of its iterator is the key type of the named parameter `point_map` in `NamedParameters1`. \tparam PointRange2 is a model of `Range`. The value type of its iterator is From 7ae6f182dd4da2b5bae764afe205f8860dc2d2ff Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 7 Jan 2019 16:53:03 +0100 Subject: [PATCH 11/53] Copy-paste official doc --- .../compute_registration_transformation.h | 53 +++++++++++++++--- .../include/CGAL/OpenGR/register_point_sets.h | 55 ++++++++++++++++--- 2 files changed, 93 insertions(+), 15 deletions(-) diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index b703186eba4..f0bd94e9df4 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -150,15 +150,54 @@ compute_registration_transformation(const PointRange1& range1, const PointRan \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key type is the value type of the iterator of `PointRange1` and whose value type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamBegin{number_of_samples} size of the subset of input points used - to compute registration.\cgalParamEnd - \cgalParamBegin{accuracy} registration accuracy expressed in scene - units.\cgalParamEnd + to compute registration. Input clouds are sub-sampled prior exploration, + to ensure fast computations. Super4PCS has a linear complexity w.r.t. the + number of input samples, allowing to use larger values than 4PCS. Simple + geometry with large overlap can be matched with only 200 samples. However, + with Super4PCS, smaller details can be used during the process by using up + to thousands of points. There is no theoretical limit to this parameter, + however using too large values leads to very a large congruent set, which + requires more time and memory to be explored. Using a large number of + samples is recommended when: geometrical details are required to perform + the matching, for instance to disambiguate between several similar + configurations; the clouds have a very low overlap: using a too sparse + sampling can prevent to have samples in the overlapping area, causing the + algorithm to fail; the clouds are very noisy, and require a dense + sampling. Note that Super4PCS is a global registration algorithm, which + finds a good approximate of the rigid transformation aligning too + clouds. Increasing the number of samples in order to get a fine + registration is not optimal: it is usually faster to use less samples, and + refine the transformation using a local algorithm, like the ICP, or its + variant SparseICP.\cgalParamEnd + + \cgalParamBegin{accuracy} registration accuracy (delta in the + paper). Setting a small value means that the two clouds needs to be very + close to be considered as well aligned. It is expressed in scene units. A + simple way to understand its impact is to consider the computation of the + Largest Common Pointset (LCP), the metric used to verify how much the + clouds are aligned. For each transformation matrix produced by Super4PCS, + we compute the LCP measure by considering a shell around the reference + cloud, and count the % of points of the target cloud lying in the + shell. The thickness of the shell is defined by the parameter + delta.\cgalParamEnd + \cgalParamBegin{overlap} ratio of expected overlap between the two point - sets (between 0 for no overlap to 1 for a full overlap).\cgalParamEnd - \cgalParamBegin{maximum_running_time} number of seconds after which the - algorithm is forced to stop and returns the best solution found so - far.\cgalParamEnd + sets: it is ranging between 0 (no overlap) to 1 (100% overlap). The + overlap parameter controls the size of the basis used for + registration. Usually, the larger the overlap, the faster the + algorithm. When the overlap is unknown, a simple way to set this parameter + is to start from 100% overlap, and decrease the value until obtaining a + good result. Using too small values will slow down the algorithm, and + reduce the accuracy of the result.\cgalParamEnd + + \cgalParamBegin{maximum_running_time} maximum number of seconds after + which the algorithm stops. Super4PCS explores the transformation space to + align the two input clouds. Since the exploration is performed randomly, + it is recommended to use a large time value to explore the whole space + (e.g., 1000).\cgalParamEnd + \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd \cgalNamedParamsEnd diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index 5ca66d9f24e..56551341bc4 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -78,7 +78,7 @@ register_point_sets(const PointRange1& range1, PointRange2& range2, applies it. Registration is computed using the Super4PCS algorithm - \cgalCite{cgal:mam-sffgp-14}. + \cgalCite{cgal:mam-sffgp-14}. Parameters documentation is copy-pasted from [the official documentation of OpenCR](https://storm-irit.github.io/OpenGR/a00012.html). For more details on this method, please refer to it. \note This function requires the \ref thirdpartyOpenGR library. @@ -99,15 +99,54 @@ register_point_sets(const PointRange1& range1, PointRange2& range2, \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key type is the value type of the iterator of `PointRange1` and whose value type `geom_traits::Vector_3`.\cgalParamEnd + \cgalParamBegin{number_of_samples} size of the subset of input points used - to compute registration.\cgalParamEnd - \cgalParamBegin{accuracy} registration accuracy expressed in scene - units.\cgalParamEnd + to compute registration. Input clouds are sub-sampled prior exploration, + to ensure fast computations. Super4PCS has a linear complexity w.r.t. the + number of input samples, allowing to use larger values than 4PCS. Simple + geometry with large overlap can be matched with only 200 samples. However, + with Super4PCS, smaller details can be used during the process by using up + to thousands of points. There is no theoretical limit to this parameter, + however using too large values leads to very a large congruent set, which + requires more time and memory to be explored. Using a large number of + samples is recommended when: geometrical details are required to perform + the matching, for instance to disambiguate between several similar + configurations; the clouds have a very low overlap: using a too sparse + sampling can prevent to have samples in the overlapping area, causing the + algorithm to fail; the clouds are very noisy, and require a dense + sampling. Note that Super4PCS is a global registration algorithm, which + finds a good approximate of the rigid transformation aligning too + clouds. Increasing the number of samples in order to get a fine + registration is not optimal: it is usually faster to use less samples, and + refine the transformation using a local algorithm, like the ICP, or its + variant SparseICP.\cgalParamEnd + + \cgalParamBegin{accuracy} registration accuracy (delta in the + paper). Setting a small value means that the two clouds needs to be very + close to be considered as well aligned. It is expressed in scene units. A + simple way to understand its impact is to consider the computation of the + Largest Common Pointset (LCP), the metric used to verify how much the + clouds are aligned. For each transformation matrix produced by Super4PCS, + we compute the LCP measure by considering a shell around the reference + cloud, and count the % of points of the target cloud lying in the + shell. The thickness of the shell is defined by the parameter + delta.\cgalParamEnd + \cgalParamBegin{overlap} ratio of expected overlap between the two point - sets (between 0 for no overlap to 1 for a full overlap).\cgalParamEnd - \cgalParamBegin{maximum_running_time} number of seconds after which the - algorithm is forced to stop and returns the best solution found so - far.\cgalParamEnd + sets: it is ranging between 0 (no overlap) to 1 (100% overlap). The + overlap parameter controls the size of the basis used for + registration. Usually, the larger the overlap, the faster the + algorithm. When the overlap is unknown, a simple way to set this parameter + is to start from 100% overlap, and decrease the value until obtaining a + good result. Using too small values will slow down the algorithm, and + reduce the accuracy of the result.\cgalParamEnd + + \cgalParamBegin{maximum_running_time} maximum number of seconds after + which the algorithm stops. Super4PCS explores the transformation space to + align the two input clouds. Since the exploration is performed randomly, + it is recommended to use a large time value to explore the whole space + (e.g., 1000).\cgalParamEnd + \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd \cgalNamedParamsEnd From a135688851e3ee2ccb089e886ba322563c7dee0d Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 8 Jan 2019 14:57:05 +0100 Subject: [PATCH 12/53] Add plugin for registration --- .../Plugins/Point_set/CMakeLists.txt | 10 ++ .../Point_set/Register_point_sets_plugin.cpp | 164 ++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.cpp diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt index df97b278ef6..888168aba6b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt @@ -22,6 +22,16 @@ if(EIGEN3_FOUND) polyhedron_demo_plugin(point_set_shape_detection_plugin Point_set_shape_detection_plugin ${point_set_shape_detectionUI_FILES} KEYWORDS PointSetProcessing Classification) target_link_libraries(point_set_shape_detection_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item scene_polygon_soup_item scene_callback_signaler) + find_package(OpenGR) + if (OpenGR_FOUND) + include_directories(SYSTEM ${OpenGR_INCLUDE_DIR}) + polyhedron_demo_plugin(register_point_sets_plugin Register_point_sets_plugin) + target_link_libraries(register_point_sets_plugin PUBLIC scene_points_with_normal_item) + else() + message(STATUS "NOTICE: registration plugin requires OpenGR, and will not be compiled.") + endif() + + else(EIGEN3_FOUND) message(STATUS "NOTICE: Eigen 3.1 (or greater) was not found. Surface reconstruction plugin will not be available.") message(STATUS "NOTICE: Eigen 3.1 (or greater) was not found. Normal estimation plugins will not be available.") diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.cpp new file mode 100644 index 00000000000..a728ddba123 --- /dev/null +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.cpp @@ -0,0 +1,164 @@ +#include "config.h" +#include "Scene_points_with_normal_item.h" +#include +#include + +#define CGAL_OPENGR_VERBOSE +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + + +using namespace CGAL::Three; +class Polyhedron_demo_register_point_sets_plugin : + public QObject, + public Polyhedron_demo_plugin_helper +{ + Q_OBJECT + Q_INTERFACES(CGAL::Three::Polyhedron_demo_plugin_interface) + Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.PluginInterface/1.0") + +private: + QAction* actionRegisterPointSets; + +public: + void init(QMainWindow* mainWindow, CGAL::Three::Scene_interface* scene_interface, Messages_interface*) { + scene = scene_interface; + mw = mainWindow; + actionRegisterPointSets = new QAction(tr("Register point sets"), mainWindow); + actionRegisterPointSets->setObjectName("actionRegisterPointSets"); + connect(actionRegisterPointSets, SIGNAL(triggered()), this, SLOT(on_actionRegisterPointSets_triggered())); + } + + QList actions() const { + return QList() << actionRegisterPointSets; + } + + bool applicable(QAction*) const { + return get_point_set_items().size() >= 2; + } + + std::vector get_point_set_items() const + { + std::vector items; + + Q_FOREACH(int index, scene->selectionIndices()) + { + Scene_points_with_normal_item* item = + qobject_cast(scene->item(index)); + if(item && item->point_set()->has_normal_map()) + items.push_back (item); + } + + return items; + } + +public Q_SLOTS: + void on_actionRegisterPointSets_triggered(); +private : + Scene_interface *scene; +}; // end Polyhedron_demo_register_point_sets_plugin + +void Polyhedron_demo_register_point_sets_plugin::on_actionRegisterPointSets_triggered() +{ + std::vector items = get_point_set_items(); + + QMultipleInputDialog dialog ("Register point sets", mw); + + QSpinBox* nb_samples = dialog.add("Number of samples:"); + nb_samples->setRange (3, 100000000); + nb_samples->setValue (200); + + QDoubleSpinBox* accuracy = dialog.add("Accuracy:"); + accuracy->setDecimals (5); + accuracy->setRange (0.00001, 100000.0); + accuracy->setValue (0.05); + accuracy->setSingleStep (0.1); + + QDoubleSpinBox* overlap = dialog.add("Overlap:"); + overlap->setDecimals (2); + overlap->setRange (0.01, 1.0); + overlap->setValue (0.2); + overlap->setSingleStep (0.1); + + QSpinBox* max_time = dialog.add("Maximum running time:"); + max_time->setRange (1, 36000); + max_time->setValue (60); + max_time->setSuffix (QString(" s")); + + dialog.add("Which point set is the reference? (others will be altered)"); + std::vector buttons; + for (std::size_t i = 0; i < items.size(); ++ i) + { + buttons.push_back (dialog.add (items[i]->name().toStdString().c_str())); + if (i == 0) + buttons.back()->setChecked(true); + } + + if (!dialog.exec()) + return; + + QApplication::setOverrideCursor(Qt::WaitCursor); + + std::size_t ref = 0; + for (std::size_t i = 0; i < items.size(); ++ i) + if (buttons[i]->isChecked()) + { + ref = i; + break; + } + + for (std::size_t i = 0; i < items.size(); ++ i) + { + if (i == ref) + continue; + + CGAL::Timer task_timer; task_timer.start(); + std::cerr << "Registering " << items[i]->name().toStdString() << " with " << items[ref]->name().toStdString() << std::endl; + + Point_set& ps1 = *(items[ref]->point_set()); + Point_set& ps2 = *(items[i]->point_set()); + + double score = + CGAL::OpenGR::register_point_sets(ps1, ps2, + CGAL::parameters::point_map(ps1.point_map()) + .normal_map(ps1.normal_map()) + .number_of_samples(nb_samples->value()) + .maximum_running_time(max_time->value()) + .accuracy(accuracy->value()) + .overlap(overlap->value()), + CGAL::parameters::point_map(ps2.point_map()) + .normal_map(ps2.normal_map())); + + std::size_t memory = CGAL::Memory_sizer().virtual_size(); + std::cerr << "Registration score: " << score << " (" + << task_timer.time() << " seconds, " + << (memory>>20) << " Mb allocated)" + << std::endl; + } + + for (std::size_t i = 0; i < items.size(); ++ i) + { + items[i]->invalidateOpenGLBuffers(); + scene->itemChanged(items[i]); + } + + QApplication::restoreOverrideCursor(); +} + + +#include "Register_point_sets_plugin.moc" From e32d1022707da2e3756772a79367e9c5c85a77f4 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 8 Jan 2019 14:57:16 +0100 Subject: [PATCH 13/53] Add verbose display of matrix --- .../CGAL/OpenGR/compute_registration_transformation.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index f0bd94e9df4..b68e1dbb842 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -112,6 +112,16 @@ compute_registration_transformation(const PointRange1& range1, const PointRan double score = matcher.ComputeTransformation(set1, set2, mat, sampler, visitor); +#ifdef CGAL_OPENGR_VERBOSE + std::cerr << "Transformation matrix: " << std::endl; + for (std::size_t i = 0; i < 4; ++ i) + { + for (std::size_t j = 0; j < 4; ++ j) + std::cerr << mat.coeff(i,j) << " "; + std::cerr << std::endl; + } +#endif + typename Kernel::Aff_transformation_3 cgal_trsf( mat.coeff(0,0), mat.coeff(0,1), mat.coeff(0,2), mat.coeff(0,3), mat.coeff(1,0), mat.coeff(1,1), mat.coeff(1,2), mat.coeff(1,3), From 1fa9a95b7e9b8eff35999ee1d6da1f9058c275f9 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Thu, 10 Jan 2019 11:42:21 +0100 Subject: [PATCH 14/53] Add tests for all Point Set Processing named parameters in BGL test --- BGL/test/BGL/test_cgal_bgl_named_params.cpp | 57 +++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/BGL/test/BGL/test_cgal_bgl_named_params.cpp b/BGL/test/BGL/test_cgal_bgl_named_params.cpp index 9f118062e4b..ad03d158b0f 100644 --- a/BGL/test/BGL/test_cgal_bgl_named_params.cpp +++ b/BGL/test/BGL/test_cgal_bgl_named_params.cpp @@ -97,7 +97,6 @@ void test(const NamedParameters& np) assert(get_param(np, CGAL::internal_np::face_normal).v == 36); assert(get_param(np, CGAL::internal_np::random_seed).v == 37); assert(get_param(np, CGAL::internal_np::do_project).v == 38); - assert(get_param(np, CGAL::internal_np::opengr_options).v == 9001); // Internal named parameters assert(get_param(np, CGAL::internal_np::weight_calculator).v == 39); @@ -179,7 +178,6 @@ void test(const NamedParameters& np) check_same_type<36>(get_param(np, CGAL::internal_np::face_normal)); check_same_type<37>(get_param(np, CGAL::internal_np::random_seed)); check_same_type<38>(get_param(np, CGAL::internal_np::do_project)); - check_same_type<9001>(get_param(np, CGAL::internal_np::opengr_options)); // Internal named parameters check_same_type<39>(get_param(np, CGAL::internal_np::weight_calculator)); @@ -189,6 +187,34 @@ void test(const NamedParameters& np) check_same_type<42>(get_param(np, CGAL::internal_np::projection_functor)); check_same_type<46>(get_param(np, CGAL::internal_np::apply_per_connected_component)); check_same_type<47>(get_param(np, CGAL::internal_np::output_iterator)); + + // Named parameters used in the package 'Point Set Processing' + check_same_type<9000>(get_param(np, CGAL::internal_np::point_map)); + check_same_type<9001>(get_param(np, CGAL::internal_np::query_point_map)); + check_same_type<9002>(get_param(np, CGAL::internal_np::normal_map)); + check_same_type<9003>(get_param(np, CGAL::internal_np::diagonalize_traits)); + check_same_type<9004>(get_param(np, CGAL::internal_np::svd_traits)); + check_same_type<9005>(get_param(np, CGAL::internal_np::callback)); + check_same_type<9006>(get_param(np, CGAL::internal_np::sharpness_angle)); + check_same_type<9007>(get_param(np, CGAL::internal_np::edge_sensitivity)); + check_same_type<9008>(get_param(np, CGAL::internal_np::neighbor_radius)); + check_same_type<9009>(get_param(np, CGAL::internal_np::number_of_output_points)); + check_same_type<9010>(get_param(np, CGAL::internal_np::size)); + check_same_type<9011>(get_param(np, CGAL::internal_np::maximum_variation)); + check_same_type<9012>(get_param(np, CGAL::internal_np::degree_fitting)); + check_same_type<9013>(get_param(np, CGAL::internal_np::degree_monge)); + check_same_type<9014>(get_param(np, CGAL::internal_np::threshold_percent)); + check_same_type<9015>(get_param(np, CGAL::internal_np::threshold_distance)); + check_same_type<9016>(get_param(np, CGAL::internal_np::attraction_factor)); + check_same_type<9017>(get_param(np, CGAL::internal_np::plane_map)); + check_same_type<9018>(get_param(np, CGAL::internal_np::plane_index_map)); + check_same_type<9019>(get_param(np, CGAL::internal_np::select_percentage)); + check_same_type<9020>(get_param(np, CGAL::internal_np::require_uniform_sampling)); + check_same_type<9021>(get_param(np, CGAL::internal_np::point_is_constrained)); + check_same_type<9022>(get_param(np, CGAL::internal_np::number_of_samples)); + check_same_type<9023>(get_param(np, CGAL::internal_np::accuracy)); + check_same_type<9024>(get_param(np, CGAL::internal_np::maximum_running_time)); + check_same_type<9025>(get_param(np, CGAL::internal_np::overlap)); } int main() @@ -242,7 +268,6 @@ int main() .face_normal_map(A<36>(36)) .random_seed(A<37>(37)) .do_project(A<38>(38)) - .opengr_options(A<>(9001)) .weight_calculator(A<39>(39)) .preserve_genus(A<40>(40)) .verbosity_level(A<41>(41)) @@ -257,6 +282,32 @@ int main() .erase_all_duplicates(A<48>(48)) .require_same_orientation(A<49>(49)) .face_size_map(A<52>(52)) + .point_map(A<9000>(9000)) + .query_point_map(A<9001>(9001)) + .normal_map(A<9002>(9002)) + .diagonalize_traits(A<9003>(9003)) + .svd_traits(A<9004>(9004)) + .callback(A<9005>(9005)) + .sharpness_angle(A<9006>(9006)) + .edge_sensitivity(A<9007>(9007)) + .neighbor_radius(A<9008>(9008)) + .number_of_output_points(A<9009>(9009)) + .size(A<9010>(9010)) + .maximum_variation(A<9011>(9011)) + .degree_fitting(A<9012>(9012)) + .degree_monge(A<9013>(9013)) + .threshold_percent(A<9014>(9014)) + .threshold_distance(A<9015>(9015)) + .attraction_factor(A<9016>(9016)) + .plane_map(A<9017>(9017)) + .plane_index_map(A<9018>(9018)) + .select_percentage(A<9019>(9019)) + .require_uniform_sampling(A<9020>(9020)) + .point_is_constrained_map(A<9021>(9021)) + .number_of_samples(A<9022>(9022)) + .accuracy(A<9023>(9023)) + .maximum_running_time(A<9024>(9024)) + .overlap(A<9025>(9025)) ); return EXIT_SUCCESS; From c5bc7239b64c0c41dd987f6fccb8018789ee63bd Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Mon, 1 Jul 2019 12:20:19 +0300 Subject: [PATCH 15/53] init pointadapter for opengr registration --- .../compute_registration_transformation.h | 81 ++++++++++++++--- .../include/CGAL/OpenGR/point_adapters.h | 87 +++++++++++++++++++ .../include/CGAL/OpenGR/register_point_sets.h | 29 +++++-- 3 files changed, 175 insertions(+), 22 deletions(-) create mode 100644 Point_set_processing_3/include/CGAL/OpenGR/point_adapters.h diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index b68e1dbb842..bb7e97a5f39 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -29,24 +29,36 @@ #include #include +#include #include #include +#include "point_adapters.h" + #include namespace CGAL { namespace OpenGR { -typedef gr::Match4pcsBase +using Options = typename gr::Match4pcsBase::OptionsType; + +/*typedef gr::Match4pcsBase::OptionsType Options; - +*/ namespace internal { template std::pair compute_registration_transformation(const PointRange1& range1, const PointRange2& range2, - PointMap1 point_map1, PointMap2 point_map2, - VectorMap1 vector_map1, VectorMap2 vector_map2, - Options& options) + const PointMap1& point_map1, const PointMap2& point_map2, + const VectorMap1& vector_map1, const VectorMap2& vector_map2, + Options& options) { typedef typename Kernel::Point_3 Point_3; typedef typename Kernel::Vector_3 Vector_3; + + typedef PointAdapter PointAdapterType; + +//template +//struct PointAdapter { + namespace GR=gr; - std::vector set1, set2; - std::vector normals1, normals2; +// std::vector set1, set2; +// std::vector normals1, normals2; // TODO: see if should allow user to change those types - typedef Eigen::Matrix MatrixType; + typedef Eigen::Matrix MatrixType; typedef gr::UniformDistSampler SamplerType; typedef gr::DummyTransformVisitor TrVisitorType; typedef gr::Match4pcsBase MatcherType; @@ -79,8 +104,19 @@ compute_registration_transformation(const PointRange1& range1, const PointRan SamplerType sampler; TrVisitorType visitor; + // Do not copy the points but pass the ranges zipped with point and vector maps + // to be resolved at point adapter + std::vector pmap1_ptrs(range1.size(), &point_map1); + std::vector vmap1_ptrs(range1.size(), &vector_map1); + + std::vector pmap2_ptrs(range2.size(), &point_map2); + std::vector vmap2_ptrs(range1.size(), &vector_map2); + + auto range_pmap_vmap_1 = boost::combine(range1, pmap1_ptrs, vmap1_ptrs); + auto range_pmap_vmap_2 = boost::combine(range2, pmap2_ptrs, vmap2_ptrs); + // copy points and normal - const std::size_t nbpt1 = range1.size(); + /*const std::size_t nbpt1 = range1.size(); set1.reserve(nbpt1); normals1.reserve(nbpt1); for (typename PointRange1::const_iterator it=range1.begin(), @@ -103,14 +139,15 @@ compute_registration_transformation(const PointRange1& range1, const PointRan set2.push_back(GR::Point3D(p.x(), p.y(), p.z())); normals2.push_back(GR::Point3D::VectorType(v.x(), v.y(), v.z())); } - +*/ // logger GR::Utils::Logger logger(GR::Utils::NoLog); // matcher MatcherType matcher(options, logger); double score = - matcher.ComputeTransformation(set1, set2, mat, sampler, visitor); + matcher.ComputeTransformation(range_pmap_vmap_1, range_pmap_vmap_2, mat, sampler, visitor); + //matcher.ComputeTransformation(set1, set2, mat, sampler, visitor); #ifdef CGAL_OPENGR_VERBOSE std::cerr << "Transformation matrix: " << std::endl; @@ -261,21 +298,37 @@ compute_registration_transformation (const PointRange1& point_set_1, const Point PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); - PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); + PointMap2 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); // bugfix here NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); - Options options; + typedef typename internal::PointAdapter PointType; + + Options options; options.sample_size = choose_param(get_param(np1, internal_np::number_of_samples), 200); options.delta = choose_param(get_param(np1, internal_np::accuracy), 5.00); options.max_time_seconds = choose_param(get_param(np1, internal_np::maximum_running_time), 1000); bool overlap_ok = options.configureOverlap (choose_param(get_param(np1, internal_np::overlap), 0.20)); CGAL_USE (overlap_ok); - CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); + // TODO: + //CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); +/* return internal::compute_registration_transformation(point_set_1, point_set_2, point_map1, point_map2, normal_map1, normal_map2, options); +*/ + return internal::compute_registration_transformation(point_set_1, point_set_2, + point_map1, point_map2, + normal_map1, normal_map2, + options); + } // convenience overloads diff --git a/Point_set_processing_3/include/CGAL/OpenGR/point_adapters.h b/Point_set_processing_3/include/CGAL/OpenGR/point_adapters.h new file mode 100644 index 00000000000..cb7dd7e6d67 --- /dev/null +++ b/Point_set_processing_3/include/CGAL/OpenGR/point_adapters.h @@ -0,0 +1,87 @@ +// Copyright (c) 2018 GeometryFactory(France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// You can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0+ +// +// Author(s) : Necip Fazil Yildiran + +#ifndef CGAL_OPENGR_POINT_ADAPTERS_H +#define CGAL_OPENGR_POINT_ADAPTERS_H + +#include + +#include +//typedef CGAL::Simple_cartesian K; + +namespace CGAL { + +namespace OpenGR { + +namespace internal { + +// typedef CGAL::Simple_cartesian K; +template +struct PointAdapter { + public: + enum {Dim = 3}; + typedef typename Kernel::FT Scalar; + typedef Eigen::Matrix VectorType; + + private: +// TODO Eigen::Map m_pos, m_normal, m_color; + VectorType col; // TODO =0 + + public: + PointAdapter(const boost::tuple &t) +// TODO : m_pos (Eigen::Map( get( *t.get<1>()/*pmap*/, t.get<0>()/*it*/ ).cartesian_begin() )), +// TODO m_normal (Eigen::Map( get( *t.get<2>()/*vmap*/, t.get<0>()/*it*/ ).cartesian_begin() )) + { + col[0] = rand(); + col[1] = rand(); + col[2] = rand(); + } + +// TODO: What if they are of different types? +// PointAdapter(const boost::tuple &t) +// : m_pos (Eigen::Map( get( t.get<1>()/*pmap*/, t.get<0>()/*it*/ ).cartesian_begin() )), +// m_normal (Eigen::Map( get( t.get<2>()/*vmap*/, t.get<0>()/*it*/ ).cartesian_begin() )) +// { } + +// inline PointAdapter(const extlib1::PointType1& p) +// : m_pos (Eigen::Map( p.pos )), +// m_normal(Eigen::Map( p.n )) +// /*, m_color (Eigen::Map( p.color ))*/ +// { } +// /* get(point_map1, *it); */ +// // An instance of point_map1 is needed? +// inline PointAdapter(const extlib1::PointType1& p) +// : m_pos (Eigen::Map( p.pos )), +// m_normal(Eigen::Map( p.n )) +// /*, m_color (Eigen::Map( p.color ))*/ +// { } + + inline /*const Eigen::Map<*/ const VectorType /*>*/& pos() const { return col; /* TODO return m_pos;*/ } + inline /*const Eigen::Map<*/ const VectorType /*>*/& normal() const { return col; /* TODO return m_normal;*/ } + inline /*const Eigen::Map<*/ const VectorType /*>*/& color() const { return col; /* m_color;*/ } + inline /*const Eigen::Map<*/ const VectorType /*>*/& rgb() const { return color(); /*m_color; */} + +}; + +} + +} } // end of namespace CGAL::OpenGR + +#endif // CGAL_OPENGR_POINT_ADAPTERS_H \ No newline at end of file diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index 56551341bc4..9eeaf5ae372 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -34,6 +34,8 @@ #include +#include "point_adapters.h" + namespace CGAL { namespace OpenGR { @@ -41,6 +43,7 @@ namespace OpenGR { namespace internal { template & options) { std::pair res = - compute_registration_transformation(range1, range2, - point_map1, point_map2, - vector_map1, vector_map2, - options); + compute_registration_transformation(range1, range2, + point_map1, point_map2, + vector_map1, vector_map2, + options); // update CGAL points for (typename PointRange2::iterator it=range2.begin(), @@ -196,15 +199,25 @@ register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); - Options options; + + typedef internal::PointAdapter PointType; + + Options options; options.sample_size = choose_param(get_param(np1, internal_np::number_of_samples), 200); options.delta = choose_param(get_param(np1, internal_np::accuracy), 5.00); options.max_time_seconds = choose_param(get_param(np1, internal_np::maximum_running_time), 1000); bool overlap_ok = options.configureOverlap (choose_param(get_param(np1, internal_np::overlap), 0.20)); CGAL_USE (overlap_ok); - CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); + // TODO: + //CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); - return internal::register_point_sets(point_set_1, point_set_2, + return internal::register_point_sets(point_set_1, point_set_2, point_map1, point_map2, normal_map1, normal_map2, options); From 090b88437cc523ad87295791c5d183c6a07f8b06 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Mon, 8 Jul 2019 13:23:12 +0300 Subject: [PATCH 16/53] use vec3 interface to copy point on-the-fly --- .../compute_registration_transformation.h | 102 ++++-------------- .../include/CGAL/OpenGR/point_adapter.h | 78 ++++++++++++++ .../include/CGAL/OpenGR/point_adapters.h | 87 --------------- .../include/CGAL/OpenGR/register_point_sets.h | 32 ++---- 4 files changed, 110 insertions(+), 189 deletions(-) create mode 100644 Point_set_processing_3/include/CGAL/OpenGR/point_adapter.h delete mode 100644 Point_set_processing_3/include/CGAL/OpenGR/point_adapters.h diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index bb7e97a5f39..85c3b2b3a2d 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -34,7 +34,7 @@ #include #include -#include "point_adapters.h" +#include "point_adapter.h" #include @@ -42,23 +42,16 @@ namespace CGAL { namespace OpenGR { -template +template using Options = typename gr::Match4pcsBase, gr::DummyTransformVisitor, gr::AdaptivePointFilter, gr::AdaptivePointFilter::Options>::OptionsType; -/*typedef gr::Match4pcsBase::OptionsType Options; -*/ namespace internal { template std::pair compute_registration_transformation(const PointRange1& range1, const PointRange2& range2, - const PointMap1& point_map1, const PointMap2& point_map2, - const VectorMap1& vector_map1, const VectorMap2& vector_map2, - Options& options) + PointMap1 point_map1, PointMap2 point_map2, + VectorMap1 vector_map1, VectorMap2 vector_map2, + Options& options) { typedef typename Kernel::Point_3 Point_3; typedef typename Kernel::Vector_3 Vector_3; - typedef PointAdapter PointAdapterType; - -//template -//struct PointAdapter { + typedef PointAdapter PointAdapterType; namespace GR=gr; -// std::vector set1, set2; -// std::vector normals1, normals2; - // TODO: see if should allow user to change those types - typedef Eigen::Matrix MatrixType; + typedef Eigen::Matrix MatrixType; // TODO: double -> Kernel::Scalar? typedef gr::UniformDistSampler SamplerType; typedef gr::DummyTransformVisitor TrVisitorType; typedef gr::Match4pcsBase MatcherType; @@ -105,41 +86,17 @@ compute_registration_transformation(const PointRange1& range1, const PointRan TrVisitorType visitor; // Do not copy the points but pass the ranges zipped with point and vector maps - // to be resolved at point adapter - std::vector pmap1_ptrs(range1.size(), &point_map1); - std::vector vmap1_ptrs(range1.size(), &vector_map1); + // to be resolved at point adapter. Pass copies of point and vector maps as they are + // lightweight objects + std::vector pmap1(range1.size(), point_map1); + std::vector vmap1(range1.size(), vector_map1); - std::vector pmap2_ptrs(range2.size(), &point_map2); - std::vector vmap2_ptrs(range1.size(), &vector_map2); + std::vector pmap2(range2.size(), point_map2); + std::vector vmap2(range2.size(), vector_map2); - auto range_pmap_vmap_1 = boost::combine(range1, pmap1_ptrs, vmap1_ptrs); - auto range_pmap_vmap_2 = boost::combine(range2, pmap2_ptrs, vmap2_ptrs); - - // copy points and normal - /*const std::size_t nbpt1 = range1.size(); - set1.reserve(nbpt1); - normals1.reserve(nbpt1); - for (typename PointRange1::const_iterator it=range1.begin(), - end=range1.end(); it!=end; ++it) - { - const Point_3& p = get(point_map1, *it); - const Vector_3& v = get(vector_map1, *it); - set1.push_back(GR::Point3D(p.x(), p.y(), p.z())); - normals1.push_back(GR::Point3D::VectorType(v.x(), v.y(), v.z())); - } - - const std::size_t nbpt2 = range2.size(); - set2.reserve(nbpt2); - normals2.reserve(nbpt2); - for (typename PointRange1::const_iterator it=range2.begin(), - end=range2.end(); it!=end; ++it) - { - const Point_3& p = get(point_map2, *it); - const Vector_3& v = get(vector_map2, *it); - set2.push_back(GR::Point3D(p.x(), p.y(), p.z())); - normals2.push_back(GR::Point3D::VectorType(v.x(), v.y(), v.z())); - } -*/ + auto range_pmap_vmap_1 = boost::combine(range1, pmap1, vmap1); + auto range_pmap_vmap_2 = boost::combine(range2, pmap2, vmap2); + // logger GR::Utils::Logger logger(GR::Utils::NoLog); @@ -147,7 +104,6 @@ compute_registration_transformation(const PointRange1& range1, const PointRan MatcherType matcher(options, logger); double score = matcher.ComputeTransformation(range_pmap_vmap_1, range_pmap_vmap_2, mat, sampler, visitor); - //matcher.ComputeTransformation(set1, set2, mat, sampler, visitor); #ifdef CGAL_OPENGR_VERBOSE std::cerr << "Transformation matrix: " << std::endl; @@ -298,36 +254,22 @@ compute_registration_transformation (const PointRange1& point_set_1, const Point PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); - PointMap2 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); // bugfix here + PointMap2 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); - typedef typename internal::PointAdapter PointType; - - Options options; + Options options; options.sample_size = choose_param(get_param(np1, internal_np::number_of_samples), 200); options.delta = choose_param(get_param(np1, internal_np::accuracy), 5.00); options.max_time_seconds = choose_param(get_param(np1, internal_np::maximum_running_time), 1000); bool overlap_ok = options.configureOverlap (choose_param(get_param(np1, internal_np::overlap), 0.20)); CGAL_USE (overlap_ok); - // TODO: - //CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); + // TODO: non-constant condition for static assertion, the value of ‘overlap_ok’ is not usable in a constant expression + // CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); -/* return internal::compute_registration_transformation(point_set_1, point_set_2, point_map1, point_map2, normal_map1, normal_map2, options); -*/ - return internal::compute_registration_transformation(point_set_1, point_set_2, - point_map1, point_map2, - normal_map1, normal_map2, - options); } diff --git a/Point_set_processing_3/include/CGAL/OpenGR/point_adapter.h b/Point_set_processing_3/include/CGAL/OpenGR/point_adapter.h new file mode 100644 index 00000000000..6d1d3ab9ba5 --- /dev/null +++ b/Point_set_processing_3/include/CGAL/OpenGR/point_adapter.h @@ -0,0 +1,78 @@ +// Copyright (c) 2018 GeometryFactory(France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// You can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0+ +// +// Author(s) : Necip Fazil Yildiran + +#ifndef CGAL_OPENGR_POINT_ADAPTER_H +#define CGAL_OPENGR_POINT_ADAPTER_H + +#include + +#include +#include + +namespace CGAL { + +namespace OpenGR { + +namespace internal { + +template +struct PointAdapter { + public: + enum {Dim = 3}; + typedef typename Kernel::FT Scalar; + typedef Eigen::Matrix VectorType; + + private: + gr::Point3D base; // TODO: Scalar of Point3D could be templated + + public: + PointAdapter(const PointAdapter&) = default; + + //template + //PointAdapter(const boost::tuple &t) + template + inline PointAdapter(const RangePointVectorTuple &t) + : base( + static_cast(get(t.get<1>(), t.get<0>()).x()), + static_cast(get(t.get<1>(), t.get<0>()).y()), + static_cast(get(t.get<1>(), t.get<0>()).z()) + ) // pos + { + + // normal + base.set_normal( + gr::Point3D::VectorType( + static_cast(get(t.get<2>(), t.get<0>()).x()), + static_cast(get(t.get<2>(), t.get<0>()).y()), + static_cast(get(t.get<2>(), t.get<0>()).z()) + ) ); + } + + inline const VectorType pos() const { return base.pos().cast(); } + inline const VectorType normal() const { return base.normal().cast(); } + inline const VectorType rgb() const { return base.rgb().cast(); } + +}; + +} + +} } + +#endif // CGAL_OPENGR_POINT_ADAPTER_H \ No newline at end of file diff --git a/Point_set_processing_3/include/CGAL/OpenGR/point_adapters.h b/Point_set_processing_3/include/CGAL/OpenGR/point_adapters.h deleted file mode 100644 index cb7dd7e6d67..00000000000 --- a/Point_set_processing_3/include/CGAL/OpenGR/point_adapters.h +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2018 GeometryFactory(France). -// All rights reserved. -// -// This file is part of CGAL (www.cgal.org). -// You can redistribute it and/or modify it under the terms of the GNU -// General Public License as published by the Free Software Foundation, -// either version 3 of the License, or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// $URL$ -// $Id$ -// SPDX-License-Identifier: GPL-3.0+ -// -// Author(s) : Necip Fazil Yildiran - -#ifndef CGAL_OPENGR_POINT_ADAPTERS_H -#define CGAL_OPENGR_POINT_ADAPTERS_H - -#include - -#include -//typedef CGAL::Simple_cartesian K; - -namespace CGAL { - -namespace OpenGR { - -namespace internal { - -// typedef CGAL::Simple_cartesian K; -template -struct PointAdapter { - public: - enum {Dim = 3}; - typedef typename Kernel::FT Scalar; - typedef Eigen::Matrix VectorType; - - private: -// TODO Eigen::Map m_pos, m_normal, m_color; - VectorType col; // TODO =0 - - public: - PointAdapter(const boost::tuple &t) -// TODO : m_pos (Eigen::Map( get( *t.get<1>()/*pmap*/, t.get<0>()/*it*/ ).cartesian_begin() )), -// TODO m_normal (Eigen::Map( get( *t.get<2>()/*vmap*/, t.get<0>()/*it*/ ).cartesian_begin() )) - { - col[0] = rand(); - col[1] = rand(); - col[2] = rand(); - } - -// TODO: What if they are of different types? -// PointAdapter(const boost::tuple &t) -// : m_pos (Eigen::Map( get( t.get<1>()/*pmap*/, t.get<0>()/*it*/ ).cartesian_begin() )), -// m_normal (Eigen::Map( get( t.get<2>()/*vmap*/, t.get<0>()/*it*/ ).cartesian_begin() )) -// { } - -// inline PointAdapter(const extlib1::PointType1& p) -// : m_pos (Eigen::Map( p.pos )), -// m_normal(Eigen::Map( p.n )) -// /*, m_color (Eigen::Map( p.color ))*/ -// { } -// /* get(point_map1, *it); */ -// // An instance of point_map1 is needed? -// inline PointAdapter(const extlib1::PointType1& p) -// : m_pos (Eigen::Map( p.pos )), -// m_normal(Eigen::Map( p.n )) -// /*, m_color (Eigen::Map( p.color ))*/ -// { } - - inline /*const Eigen::Map<*/ const VectorType /*>*/& pos() const { return col; /* TODO return m_pos;*/ } - inline /*const Eigen::Map<*/ const VectorType /*>*/& normal() const { return col; /* TODO return m_normal;*/ } - inline /*const Eigen::Map<*/ const VectorType /*>*/& color() const { return col; /* m_color;*/ } - inline /*const Eigen::Map<*/ const VectorType /*>*/& rgb() const { return color(); /*m_color; */} - -}; - -} - -} } // end of namespace CGAL::OpenGR - -#endif // CGAL_OPENGR_POINT_ADAPTERS_H \ No newline at end of file diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index 9eeaf5ae372..12e065cba6b 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -34,8 +34,6 @@ #include -#include "point_adapters.h" - namespace CGAL { namespace OpenGR { @@ -43,7 +41,6 @@ namespace OpenGR { namespace internal { template & options) + Options& options) { std::pair res = - compute_registration_transformation(range1, range2, - point_map1, point_map2, - vector_map1, vector_map2, - options); + compute_registration_transformation(range1, range2, + point_map1, point_map2, + vector_map1, vector_map2, + options); // update CGAL points for (typename PointRange2::iterator it=range2.begin(), @@ -199,25 +196,16 @@ register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); - - typedef internal::PointAdapter PointType; - - Options options; + Options options; options.sample_size = choose_param(get_param(np1, internal_np::number_of_samples), 200); options.delta = choose_param(get_param(np1, internal_np::accuracy), 5.00); options.max_time_seconds = choose_param(get_param(np1, internal_np::maximum_running_time), 1000); bool overlap_ok = options.configureOverlap (choose_param(get_param(np1, internal_np::overlap), 0.20)); CGAL_USE (overlap_ok); - // TODO: - //CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); + // TODO: non-constant condition for static assertion, the value of ‘overlap_ok’ is not usable in a constant expression + // CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); - return internal::register_point_sets(point_set_1, point_set_2, + return internal::register_point_sets(point_set_1, point_set_2, point_map1, point_map2, normal_map1, normal_map2, options); @@ -246,4 +234,4 @@ register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2) } } // end of namespace CGAL::OpenGR -#endif // CGAL_OPENGR_REGISTER_POINT_SETS_H +#endif // CGAL_OPENGR_REGISTER_POINT_SETS_H \ No newline at end of file From 13ce95a98af0524e0ae9049386eb4ddd516d07c4 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Mon, 8 Jul 2019 21:57:54 +0300 Subject: [PATCH 17/53] Use Kernel::FT as Scalar type for PointAdapter base point type Helps to avoid having unnecessary casts resulting loss of precision --- .../compute_registration_transformation.h | 2 +- .../include/CGAL/OpenGR/point_adapter.h | 33 +++++++++---------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index 85c3b2b3a2d..f2a99510596 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -72,7 +72,7 @@ compute_registration_transformation(const PointRange1& range1, const PointRan namespace GR=gr; // TODO: see if should allow user to change those types - typedef Eigen::Matrix MatrixType; // TODO: double -> Kernel::Scalar? + typedef Eigen::Matrix MatrixType; typedef gr::UniformDistSampler SamplerType; typedef gr::DummyTransformVisitor TrVisitorType; typedef gr::Match4pcsBase struct PointAdapter { public: enum {Dim = 3}; - typedef typename Kernel::FT Scalar; - typedef Eigen::Matrix VectorType; + using Scalar = typename Kernel::FT; + using VectorType = typename Eigen::Matrix; private: - gr::Point3D base; // TODO: Scalar of Point3D could be templated + using Base = typename gr::Point3D; + Base base; public: PointAdapter(const PointAdapter&) = default; @@ -49,25 +50,23 @@ struct PointAdapter { //PointAdapter(const boost::tuple &t) template inline PointAdapter(const RangePointVectorTuple &t) - : base( - static_cast(get(t.get<1>(), t.get<0>()).x()), - static_cast(get(t.get<1>(), t.get<0>()).y()), - static_cast(get(t.get<1>(), t.get<0>()).z()) - ) // pos + : base( get(t.get<1>(), t.get<0>()).x(), + get(t.get<1>(), t.get<0>()).y(), + get(t.get<1>(), t.get<0>()).z() ) // pos { - + using BaseVectorType = typename Base::VectorType; + // normal base.set_normal( - gr::Point3D::VectorType( - static_cast(get(t.get<2>(), t.get<0>()).x()), - static_cast(get(t.get<2>(), t.get<0>()).y()), - static_cast(get(t.get<2>(), t.get<0>()).z()) - ) ); + BaseVectorType( get(t.get<2>(), t.get<0>()).x(), + get(t.get<2>(), t.get<0>()).y(), + get(t.get<2>(), t.get<0>()).z() ) + ); } - inline const VectorType pos() const { return base.pos().cast(); } - inline const VectorType normal() const { return base.normal().cast(); } - inline const VectorType rgb() const { return base.rgb().cast(); } + inline const VectorType pos() const { return base.pos(); } + inline const VectorType normal() const { return base.normal(); } + inline const VectorType rgb() const { return base.rgb(); } }; From 7029fe4dcb9155be8d225c6b18f878b2192aeb8e Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Tue, 9 Jul 2019 13:07:56 +0300 Subject: [PATCH 18/53] Use transform iterator to transform cgal range+pmaps to gr points on-the-fly Usage of a point adapter is no longer needed: transform iterator adapts the cgal points to opengr points on-the-fly --- .../compute_registration_transformation.h | 64 ++++++++++----- .../include/CGAL/OpenGR/point_adapter.h | 77 ------------------- 2 files changed, 46 insertions(+), 95 deletions(-) delete mode 100644 Point_set_processing_3/include/CGAL/OpenGR/point_adapter.h diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index f2a99510596..7defea458bf 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -27,15 +27,14 @@ #include #include #include +#include #include -#include +#include #include #include -#include "point_adapter.h" - #include namespace CGAL { @@ -44,13 +43,39 @@ namespace OpenGR { template using Options = typename gr::Match4pcsBase, + gr::Point3D, gr::DummyTransformVisitor, gr::AdaptivePointFilter, gr::AdaptivePointFilter::Options>::OptionsType; namespace internal { +template +struct CGAL_range_and_pmaps_to_opengr_point3d_range +{ + typedef typename InputRange::const_iterator::value_type argument_type; + typedef gr::Point3D result_type; + typedef typename result_type::VectorType vector_type; + + PointMap point_map; + VectorMap normal_map; + + CGAL_range_and_pmaps_to_opengr_point3d_range (PointMap point_map, VectorMap normal_map) + : point_map (point_map), normal_map (normal_map) + { } + + result_type operator() (const argument_type& arg) const + { + const auto& p = get (point_map, arg); + const auto& n = get (normal_map, arg); + + result_type out (p.x(), p.y(), p.z()); + out.set_normal ( vector_type(n.x(), n.y(), n.z()) ); + + return out; + } +}; + template PointAdapterType; + typedef gr::Point3D PointType; namespace GR=gr; // TODO: see if should allow user to change those types - typedef Eigen::Matrix MatrixType; + typedef Eigen::Matrix MatrixType; typedef gr::UniformDistSampler SamplerType; typedef gr::DummyTransformVisitor TrVisitorType; typedef gr::Match4pcsBase MatcherType; @@ -85,25 +110,28 @@ compute_registration_transformation(const PointRange1& range1, const PointRan SamplerType sampler; TrVisitorType visitor; - // Do not copy the points but pass the ranges zipped with point and vector maps - // to be resolved at point adapter. Pass copies of point and vector maps as they are - // lightweight objects - std::vector pmap1(range1.size(), point_map1); - std::vector vmap1(range1.size(), vector_map1); + // Unary functions that convert value_type of point ranges to gr::Point3D + CGAL_range_and_pmaps_to_opengr_point3d_range // TODO: remove deductible ones + unary_function_1 (point_map1, vector_map1); - std::vector pmap2(range2.size(), point_map2); - std::vector vmap2(range2.size(), vector_map2); + CGAL_range_and_pmaps_to_opengr_point3d_range // TODO: remove deductible ones + unary_function_2 (point_map2, vector_map2); + + auto gr_point_range_1 = boost::make_iterator_range( + boost::make_transform_iterator (range1.begin(), unary_function_1), + boost::make_transform_iterator (range1.end(), unary_function_1)); + + auto gr_point_range_2 = boost::make_iterator_range( + boost::make_transform_iterator (range2.begin(), unary_function_2), + boost::make_transform_iterator (range2.end(), unary_function_2)); - auto range_pmap_vmap_1 = boost::combine(range1, pmap1, vmap1); - auto range_pmap_vmap_2 = boost::combine(range2, pmap2, vmap2); - // logger GR::Utils::Logger logger(GR::Utils::NoLog); // matcher MatcherType matcher(options, logger); double score = - matcher.ComputeTransformation(range_pmap_vmap_1, range_pmap_vmap_2, mat, sampler, visitor); + matcher.ComputeTransformation(gr_point_range_1, gr_point_range_2, mat, sampler, visitor); #ifdef CGAL_OPENGR_VERBOSE std::cerr << "Transformation matrix: " << std::endl; diff --git a/Point_set_processing_3/include/CGAL/OpenGR/point_adapter.h b/Point_set_processing_3/include/CGAL/OpenGR/point_adapter.h deleted file mode 100644 index 6050c6ae24f..00000000000 --- a/Point_set_processing_3/include/CGAL/OpenGR/point_adapter.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2018 GeometryFactory(France). -// All rights reserved. -// -// This file is part of CGAL (www.cgal.org). -// You can redistribute it and/or modify it under the terms of the GNU -// General Public License as published by the Free Software Foundation, -// either version 3 of the License, or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// $URL$ -// $Id$ -// SPDX-License-Identifier: GPL-3.0+ -// -// Author(s) : Necip Fazil Yildiran - -#ifndef CGAL_OPENGR_POINT_ADAPTER_H -#define CGAL_OPENGR_POINT_ADAPTER_H - -#include - -#include -#include - -namespace CGAL { - -namespace OpenGR { - -namespace internal { - -template -struct PointAdapter { - public: - enum {Dim = 3}; - using Scalar = typename Kernel::FT; - using VectorType = typename Eigen::Matrix; - - private: - using Base = typename gr::Point3D; - Base base; - - public: - PointAdapter(const PointAdapter&) = default; - - //template - //PointAdapter(const boost::tuple &t) - template - inline PointAdapter(const RangePointVectorTuple &t) - : base( get(t.get<1>(), t.get<0>()).x(), - get(t.get<1>(), t.get<0>()).y(), - get(t.get<1>(), t.get<0>()).z() ) // pos - { - using BaseVectorType = typename Base::VectorType; - - // normal - base.set_normal( - BaseVectorType( get(t.get<2>(), t.get<0>()).x(), - get(t.get<2>(), t.get<0>()).y(), - get(t.get<2>(), t.get<0>()).z() ) - ); - } - - inline const VectorType pos() const { return base.pos(); } - inline const VectorType normal() const { return base.normal(); } - inline const VectorType rgb() const { return base.rgb(); } - -}; - -} - -} } - -#endif // CGAL_OPENGR_POINT_ADAPTER_H \ No newline at end of file From a9889a12e3e42577e803644cbd7516669aa345c3 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Mon, 15 Jul 2019 01:38:48 +0300 Subject: [PATCH 19/53] First draft version of pointmatcher icp wrapper --- .../Point_set_processing_3/data/hippo1.ply | Bin 0 -> 293208 bytes .../Point_set_processing_3/data/hippo2.ply | Bin 0 -> 210792 bytes .../registration_with_pointmatcher.cpp | 69 +++++++++ .../compute_registration_transformation.h | 144 ++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 Point_set_processing_3/examples/Point_set_processing_3/data/hippo1.ply create mode 100644 Point_set_processing_3/examples/Point_set_processing_3/data/hippo2.ply create mode 100644 Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp create mode 100644 Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h diff --git a/Point_set_processing_3/examples/Point_set_processing_3/data/hippo1.ply b/Point_set_processing_3/examples/Point_set_processing_3/data/hippo1.ply new file mode 100644 index 0000000000000000000000000000000000000000..3dd54ca58d9cad1df71847a681515a5aa14975dd GIT binary patch literal 293208 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

Vco;-Q6GsP)6 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

1P`O02@Y?p1>xeK51;8YLQ)amOU9}Z!td+= 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�UNE*j^3k`c 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 literal 0 HcmV?d00001 diff --git a/Point_set_processing_3/examples/Point_set_processing_3/data/hippo2.ply b/Point_set_processing_3/examples/Point_set_processing_3/data/hippo2.ply new file mode 100644 index 0000000000000000000000000000000000000000..4fb9e674be3918315c12c4df1fe8f985329c2c10 GIT binary patch literal 210792 zcmZUbcRbba`^Sw?BqOPeNPAI|c9#g15fKfALM5Rh(LhGX%Ff8%dvBM$_uhMtBT-4= z_x7QFe|-JtJkB}Z&bjaFeqFEE^Lp!Q8PaO#Jb$XH$9?~?w(4_3Wv$10dRpqr>e_0L zRkgW~@gAjpp!4*py0#v-xVpCbb5%WcHSYU{+E z@*!CIR%X*To(mqoHofa7%g3x;50ZZwTYz!2$2Zz*WhkrpjrzN5CvMl5H#t2y0aB)w z)d2>z$h(xX@3Iy`PUk*x@_>;``<64fA(g({D3npy>qq|C*!luNv)%p8#U$;<(=;zrQ8{QUHD z_8RDnK(?2(BPesN+P|`L5QK$Y_#W-dh7*%N3(wrJU;BIE@JxK$#Jiq)n6|7SFfM%JFL1qiPo|PJ3}^<^Q~20A@nPogiLvBKhz>SM zS|%?>&%_Hu9)~mF1ij5L`Qa7_c++z7xkVwo-R9-@mb@8m6>)5F@|uF~k~)rCztUku zM|da2CVvQiEF-|65)MxcKQ1QcdfHNk|rhUC5C~Tz@8j%}V|FhoBfVHy!CN*i(gOQa<8E z%Xg8l`smE253NYW8X6wklLoS}1A*3RQ(!T*@4*|78c^JoS{QL9v| z&&a9)=p$cx@i7je&QQ;7JE~z&ye&3<-n9noL>76qs`9}>PH(sSvM!o*wkTV(bi!-? z{#z}F{eeSlVp=$B5~Pz^i6umQk1NaIU;>Wqr%Bv!GzhJ)_;86^^uyEZ9NktK?a1%# zd4KltFvwAFdNf8`3KiM8Q8Gb!ur-6(bezitsJPig!!tl#laLjN6}DElAQ*6 z&a+{K`o*BQ_s@0E$%pCEn@^XNUE%DRZ!>luOTc|skI#m zGQ@a}SiN!2fw=J5uz3uGGKu*U7jM@=;+R-fsfab6+PLr8yGj!5Kcb|ddOQiQ9C4A9 zo+`v6quIySk-1~M?6mMgQxSTkOIffrX2Oxg^Y+0C)8NC*=&ZZ50?&J}aQQkGKwko_ z7ddYeM9OTLs$Qmue-xk!;FV%c@~yrq}fq_O+W!D zE4UxohwNm!2ku|%N9n*zqLvQ_K&|qwL@7-(*wN7lCzuqhU4JUhmU!IS!7~B%V_Hh+NJ;q{(%?>oUIxcRr;%VIEK83_vPfJ5lerrC<|JHL|EF&R-GNQD<-u@kJN}ti{1hM1hBuNTWJQ?9Axz-DhHr@n zd{1w;SycZ3&qMX%mTLS#q~aXs!bm5Ma{}$8Z!xw$ZdUpJdjeLzUE4z$NOBG&lRa7i z25M1)%dv$}Kt?Tow7wB{Oo&Rf9Igd2OlW?>cy$lajQmj>X83Yk)L?UmdkUw_WZ#ouzTU&= zn@|IYrrv8Xd!K=~Yz7aRx}<^h%J$`KhElDcs(yRB;FQssIR15w(9>xvvo2~JI<|+T zG+u0j)H=>-`3?zH^SkJ@18qYvXDnxdJm;g2}<4d znX0m`hulXgM{ZZwz+`n+#dqf^sLxm5B1qW`%5Trjbwww^B40}Y)uTil*<&OkaC8EO z*ev)qz0OD3FGhSv&h`Rd&q7>xm^!SSM$5y=Fep8yvgjKKj%`kSo{p_(E%H8Drz`{3 z@6?K^y)y-ju@hS-Et7Hmd9NG3ktMKA>4o@mMFEghcG@ugSMAYGH0j!l)fX)pgygtJR@>&W?u>swM6sU2?v{g?Omy!{*q9(9SWk!PnM`}aV$ zrg|-ipE~lYPO%gggi8&Vx!jTbJTr^&)gJhI!1rafbuVykPQm^+!(d^wvf}IDWA4qK z+`&rBeML>bxVad`jz}ckq4$JI+dbYo<6{tEeOrhkuOFV3Qr8!S1fzG)(K>FbOnfC? ztU0?Jf%!)av}neMAVu?TZbL{dsQPXl-&Z;W9Y<;3m!u}*t^kiLa*Z!Qoqf`hthW)O zIpqvz9uI-~uh0|&%s?xR$UnbrMu3`cfwtb(6^zY(j1Tx1fQET0%}#D#puDy(c(Aq@ z4;y7xv?m1t959+)(w~MO`;{E>zh|LA>m?0dU2EL2J+f*!vJn>Zb{VX%=mC;Tsan>P zeoUwN{Vc9@5UO5W%8>}KMM+!rg+2Y*V9u=3zU0~nT@|X?S;l*`?Lz0{O%=zPosOVk7osl zX3`#j@C4Y(8yUB~*9o4ad7ip(wH}^|PJaoQEg;Uz3BBrzB(VGXgL~azJw$6>5kKvb zj;rT&F$zqQ>(Ktr0t(MYGwPHk3`&sUKixkCH#(%gN)gw;j&tP|{t!8t$ur-Rg1ffD z@GFrqxHrWjthUt?9@ehAAL=^*E*7z|`r#$;*2VdULwep!~RWvJwJ6~@bwkL`*!+$@Vt&$ke#s-who)m9qAu~ z)pIKsf@D~8a+=eD?yj}acZLA)!4HWIAq5cMk$vS^av~~J%)Sz}oCYh4+YMO*_0U~8 zDqe6P6+P=0?ofO!!p1#YtWq|$gPq$ZwiC?RfZ^uf1<0nLAXBN(;C>6tI&1pcmlUJC zeOdp~u6FEtA{k&l@E$HHyzjM)_req!!^F@((_rm6Ix8!dhCGpX&hN`k#J4*Kvz8qK zQF`v=PJcRo%Dh~e+sQm(zv;}4 z`tWAVxFX4-_n;F+lwZK-o8zDsFLjXZNi(Ps>TOeIEHrEtuKvB8gu6OEJu|*H0g-2} zaqX;af;5SSyA87;Q9hBEiF6E&@ zVPVSGuamIzT>Gi}N9^I@*PkEToGkFKJ{jN7<{e$oi=;U{in_xcNY6-mNAEuZA6fmL zo|ve{?!nYiweWc0lKQT;RM!L{kH7ftOzy`l&d1KA`&qcRZ1nSZ>KKH{?dV$nF#%mz zZj#ASm;crOn7>87rY5Wr-<=g-nzAm0`C_A!f^Ab^b9UvObD@V_giLp`0u1+W)<#!(7YOf^`#?QuAR@t6f>sZ>tuou{U~cF z_qTvdZ-cPOGgD05b5A0oaSDp9V_&k2qVCwAQZ_qMf@ovsrG=TEEZ?d#{AQ z%0E^K)rC%ZoNo2Nl5>YayK)K+az-t`@Ce22H!Po>w5kPt7qhl?+Y;a&&EavGXGwVG zJ2^$MQwgNpYB()?YZ^@N7|hClsK$ryPSC6$jsuNf85@_!nxOX6Z>F4vJ~RlpP*T;whhJf5W@*OZ z+39XgWk|ChT-fiIA5M*x-(AF;*fuoG;N^9dI zk#o3$F3uqz*4+qHq;$!JLx~}2=VmA2#Em!pzZ{C-@x|uMUb;4z<*L_Frb&TGU{*Q_?&?w-qem4C5~pfDUlFXH!vJz4MltzT zRd6@Xu1jFf134-p_PyYq28;3Gex28a@MM4T*1DIu(5*NmJf!RepWgkXr_c)lif`@J z6Lz^U(Mf$vC~+FPU#OfGrVhZ4&;g>-R$=QVvB}LsruhD&W#bp#5y;|INa-fdvyqfb zg0A-wl zpFUTCeU-g@&#xkQ&$&$Xp6oGZ^|(EA;BSZfG^$cRC0n5Tz_o#gMdOhAI{lhGMK!1w zQu)bdl*3=WJ$1)m$JUBC{1V=E{cvIxzSf(0cV*Kw*dF4wFPDmgs}njKav>X6>y;lm zzfixqjQv=3oia&w*9h{kdyYTQYysnd1XU^ZCSYAq+0LF}4c70TF3$NzV%~4{QVIc@ijX?Pb} zW}E724_Op-&ivtd5G<+rh%(L}^u>k^EHc`#aZKNQKVuo}`K4NZ&-btYkN_}DN#S!P z5&vGl-SdxeYU{c&R#^Y*kypJK6)d(BA{UQ1JSSO3c03{wYw`jaFofG=9e2QqiaZTUrJrJRkR40vu*FE2WKP4 zM86uf!P~EI~;nuLKqDNnlC5w{hrFB-%31Z8a+NgBwze`dlV1 zz%V?=V{@tnzqNw3wp^`5pfFrc+Ihuw8PH}o5#1^tgmdqL#_vF-wpPl_((-=J)xuj zo)@h1Hrm-Cd9e0;=ql9dzjd|+2Gm?NB#ZJOvg0B@)tf2UvO^$~6kUl#Q=;T}qyTP9 zkUw6gY=SM8sk6%hJs8ZkrKs+1KYV6C825;N2+9T9{KA56HuNfV!jr?+x=3yh0#=Pti|rl9vYz~)=FWY`4cWo1Qn2Xe9Z zmvU_ZOFQ;%?G)WKGYO8Y4>!Jep9?E0+n%Ee%<@hc%%LsL_!cSB@=ZP5 zXO*t|Qwv<*TMivgQ%0+_)29XRV|V>*f&@b_Y-kI$6}X#O)V@o^yu zg)Hqk<@-x0?ND#`?0ZdM?nKg?kQORrc0Q76&d?_vKS zyp7#?igzFc$-PT$B?Mv)ij$ zICFlw_uqBQr}(P z{u(%L#V|R~7YCBRcDSBDKa8gYDz_hE&Vrxxfhk(q!?4R&@!a>z^*~|rpyo?O7PdAT z%Kzyp!fRbiV{NQWV0ypOP)Va2IryxF3(il$OC8bs@7Z$U09Dt$`fWAf8?`NFlZhX? z2PSM(-dc?MdgFKG_m04v^V#?#YD540#tXN-k5z8Shd~z3vLSGR7$aLdUbP08mOp&! zl4T7PC%$P<)t>?fooTkY;1ZxPp8qwS7r3@QE#QJewH_(D0ouE4yQhZg@#xSC>C4|H z;q@<{y~n!~ARpJW9k;eY>UPfS8y&-d{(An%5wa#+2pf|t^{U0KWNdm-j8i}~gKYde zvSGjIp`R3qDImikgws7iKxRC)eqehvJhuGpXz{54x|z-?NI6aa^V>ChI+f3pA|XGd zI&EU*2PT%*5tx)V`0}dS4Fid;{Nlwt=&pGCoQ2yHF8pe_ldU}o z+8ypyx19@d-IlB~=S(|*_Y+-p@AL;acq)sV=R^_w)$=wYPMRm$YcZ}8RBPK|?QHeT@6t)QbYjn~4}oQ1y;r7? z$Fc&`!GiH}~4&ugQt4sdDaOii; z`lZxn*e#H2mSbN5qy7`OpGEXxK;SL8$>K5CzIrYQF4-_Lq zzxxFj)n-^q|KsJzTZ`-6^rwDyO#-{c?nI*xWq3OIxa3np|IEpXDUlKW+=brJ;B_Bz z(0GT)*v(^o;1Gkf<*DPqm(Ma(Kc5b%p8CZ4jq!0d9EcqG zdLU{V6vS3`OfvWtXaAz#?1NP+wij0zsC>5ivG}V9Kc)OIHCqV4fR}-tfhN;1aJ&t! zQ8qxC-soHwd&Qc69*=Z24{NOU)q>mQO`UO@hQa3bt(fhZM18w8JHU4&0PDCs4WCPu z;p+bK!13QFclPZa2G5QBPspPSA>opiMu+JzFhw*@nko?cd8bbLLcBk&*0(Ttb}sS# z=JjdtjcwdaL^dB=^l2h?ewcxbTQR8^qP;r$!S1tLIDf5(<(gJwAQ#7MU3)d1e2 z*el-KosCA%Ld|$~jIEtROcSgJ5#2JJ$(^AmM^QKTGxmc{Ji$&(^IhbL=t(c zNg>*1MOjnjIKjIcyz)!Q&0zSVii?dq8`W(c%v3ZwQO4cxWB0R37~6YneH2GND3#gU z31ubx^M^%EjRS=y>w!y7zWScSXZRhQTg~V|f-^O(?po(s;QOXjk%Id{VC^MWMkbSv z0&T`WTolKkF-Tg2uBjfwtwOeR@8|<|pIJE$nsT_GEqh3^ClF=-GaQwn$ojaoZ4%-4 zvYn%e%g;pzqh02j>n9<>XF9Z4g4h@T?Z<+D`VcH9jbHjCqoG~2;RC4N>fv?MaTLPmao0il<~2Q^hly?!^-DCRNGZJ7 zG&0#k+zGBa^4YkaN3E z^pBAmDAUpknVBU4rlV13Y64#LjDK|ItUt;qY*eHX3c|Z#V=SJcRUjtnR4a0z5gn^T z8yXF#fI{@}{Z`d#@FeM9S9VJQp8o<`bEuVgDtybg2X1U^pRLw?0&zcBXgKO8ASu%E zo3mysk#jANdI^-^IerDNWyN;9>Cc^dSA7uRd#-HCa5p3}&NaR{IRKX)>wL8+%R-GG zhPK}-z2L;f#Ou0rhT7w=~6T7V^};|`E?37{|oLK!OVZtq0Vo4ufwt}t zaPTz9%!QXiI!X1)(V1a*(|qFgra2REf1cC&dZrAB;u9>fd>^hJadOg0_J?~1RN;Hz z5ZKB}Y~N%%vX&-l5#PLPMe^KWw<_pM4muqNM(|H(8I>Frc7HZQ}~oWT_?_cFlp`DS2y z_sMNvZatcBq;QJfQ;LhZ>~HOsrhvICF{bW$DR@r$hLW2V;&U7O!Eann_;{+`c+-PX z2$ZgT8cr(%>GHO_8PWz}vuZ)ZA@u_M+s|Ii6tN*^Ci0d#N4M}RCGbRQ^l*r2GniZ% z6|=lQ1tW{b-bYoTW&o>sv59d5U`tmJEH z&wo@uYJ%RD%gpA798urEhyK^Y1Z;6SqW5EV9E5IgeyU_`Kn}q&(!;DyIK6Q=)-gQ* ziq0K+Ty!!Ey7ekH%`gN))leE0-M2Jk^>UEouB(O;e$VC3VG@|Xzn=7*uK_l4G0E{* z+aqwTI2ZnS_?VnxHRAvT4Q6fDO)o~sOc6F_B>dzS$(**~d}vHNiK+qdYkr*{+|%GT z)ILx6Jo7F+B&&qVcU@!En?vDhgWsbaxlZ8Lsl#I&-T^ar z^v*9)6k*?aU*!(vNw`U1ozkVkK5~==FmPGhsn88tLCCw)Ao|!N8 z+C>72#>Rx?oGfHnvH8wM{5!8>zUa{97Po@)?fl+)L&A4aD(I`yCj88;Q!~P6T7io% zs6b>}-oLzzwd8Gr1Pt3__=eAv*io4S#|kc)t?Amt?Q$c|YJyIknE<{b!=Z zamjVq=Z`_%inluEry=vJ*=+cO29PyxoSHn82djQU5GoD+{{CH}ANHk-c^0}_;?;@| zpHB#lLwGk^>%qJToDV-Jz*tcVt9m#dluM^BBnJ*cKUbi5y?hsRz2BzoKZ9a`s|l+qx~xri0jWIE81_rXOtEoNh2_JAu8!N~4;; z=AZk4*2!#1k=i=kAQ3;hA*ULm3x%G_=1)P#&oI2FS_iVns(Z|ZU7*!7I&0AQJs$j% z-{gF+6F%^mU%js71-m&^9!^G1g6#K0J`6PxxSC5<0cGv}y9@4dpg6GSZrRQr_;TqE zr>%ShNHZSxXBwOMr*Em5S)jNxc})*{!}IkE4=i72fPoRah{N7GP>kX;!4MK`qg`A!j*qPxIN&Tpxx8J|-O>;|7o>x=k6D;1%<=T)7+&_CaeuGX4;hb2U%6aO z!um52p4{UpxK1=}N_%-e ze2ErI-^e=+q_J`PBErv?Wf|RU=;VTQB${(aO-$gpZ~XhG-YMv$aqiFQ(?j?nH|#Y} z=?D<;6afOn1Fu4(3Y%pnuJSgYkk`FyfyH|ekM`t_zff#OGT-}0d5OGrHP5UC#^INI zKg&L0YFhEb1mkx|Rc9S;+zrRfp<@{BU~dPjd$P-3|JJGv2TyA+{$e<{`teu}Dz znu6ruP2Y@;#^ZgKbwq0$fvfpo1X4#=Xf37sfbn;uV|h8fm@l9`TQ4*Lgcws?w_JoK zpQn5GZAyZ%mGXG21*{MMX`FePgf0B7jk9%0aDm5i+`fDo_7gOkO7SIZw-3)upvwoQ zlc7%Jex5L&QL>ZTityVXe+(GTA$X*VfA(E-ABTk`o2A;yM)0Il+VMop4PCYrG?6pL z;^*@D=`+E@aDnCclP2~8*eH0EB)5HdO)mxFYW`S>*UEz|1<77xM13pI;PF0SqB&L( zaIpdw?<*<9vX2uy#}R^{YJ!VQAGf{S7735pSgI&*#$l1-#T~Q1N1#FQX}&-~4Fn!P z{52+U0B#OPXKZRJh4`nk8fKCaKux&0qsE`X-8AMwy=gk^xOVrPTx0`k4t{zYeVGLR z*_qPi_+LyJVFepw(gT-=njlgB@wLq8dOY&rdOulbKSJ8gfZgn)u%bRC7rfv+1F5?G zX(n9#+*nJk5(pz@*?uk_oxphQth^sp9>~r}QQf;noR6HR>$h(s>Pgf2gmlde>^!g% zKo#Q_i*f^J(=r&{qI^X7PZ2&Vzp$XwLxQ7M)NM|$uf$h$yZ67d{fw*qNCTL?HrsZ+ zz6D2gSo|+AjiG}zgUZ&<9w^tTE4x0C4dg7lB!+L=!{2;oYCm_N=bcpa@)G6sdf0@| ziHz_MB?5CrpfLznJ(%kBDuo_%{yp(AIuI)PFnz}0qV=@gRM6}Csl}EJ3PuD~a zY?bdvYXi={R8~K5Cf~T{gdmZxVNIGYH<53q^%*oADSz#F-yX{xA;H$shNsHub^S7kxW7!k=FC zfr@~Irgr-G$wX|BeLzQdX$Teugkx)-IH7@mv6AP=$iMTe*IalVhp_%%zY9XPvAQW< zY=>W4F7&UN%S|@u^9G)8ZFbeDUJ`ANSpY_lzaRi?=f#tYOJ3kQf zzub24aT)07v1Czcq=OWP(9Y!J(;%gh6+PEp3`~kENr?si)&KNIifw*3_d!dz4Tp3; zagI>lymI^XIB0iO$#Fi<{C7PKUHXE9zMs+HD)W;pooo!s`Yriw-x$cB3piD!Jpk)o zo-i!ejKCA_>>KrOhGT20v(;C=2t0b7#9tR51GW}12VOQbVuBja1qXf-P+3N4fA==W zz;VShTwe-+toZn&QC~-pC>T_uZRy8=D~tEe6TW8Um|QCLY{=A1jsajtAl-xfleO!D({ zI{kR~(wjPFi89prK@xneItD{cr>WIqi%@l|D8rkL`TzPgr;clj0U3$lq~KP%=~*vK zUI9ZF#R+hV)7i(=SB5YAKC}zk2Egv-emOGRX5jBD940X}pg@w8g_1xmKJ?(1D}6Bq z97Z2M{N!i?$6T&=ORo#@%}QK*sRYTTns0JNm%~^2{Z>TK4DJ$U3+p7OL44#7ONnVB z-u^;k@Ng;x|Fg#lpT^K)Pv*ArUYI{gcTG{Q4vK7Q6^9ze{+$=gLg`O?0*Sh~mY01l zI=%C*PXl}p=E)J4Y=n38opgd}lW?{u;-W`KJo?6vZfZH_;~Xjx$cPWRon{bpYlw!R zt2b_Lt8am%9Un_|gZ}oX;?91emLpXnsQdswNDf)S%C7uYYJY)+z`^c>~pi+#1yHyVu(Z+(P>a7Eo#CarQ zAN_EBNj0?X-C~!FkzjSWzVK|W8N4NF_&X8YydK#)^*ht`;O!Xe>qGEPH=`xzgWu)< z<16Yvwl5yc{eZ%bwI8`Z8)1Z~tNW{S-SGR}Wc=juNnoV-wntt!4&MB?QQ}b5E^%yq zuN#a_T%~tt?n0;6$+A}$yYO=Vw^Q3FMCGS9mqExzs3_}L01AnO#SYi_uk_6YHnH^8UBXN{DcWk}0)K`@|n1R)d* zBMk=OekXlEazGL8EQ{*ydzrPyySKm}b+PI#!wF!?E!G|sl@Hw4OB{1QO@or%Bte$O z1NCJAQy$jzHGd-%Hr?2z+xjE{em|0=yqk~(utSx9Ib|ANOEJ)1tt(&S;6LF;>Xy#B z<@ey&xOC-L@JGDO)4aaZdOt#Cv%@8*)8M;! znaLkk^MYm&NNr47_NhQ0UHX!l4n!Y%@8#M>67)VQp+~PTYd(58{5Vje_H0=d&vDFr zbG(oOf_r2b?$HiG&usKX^4SrvA6*d;4UiqV<0!*tCtS^GgE0EblXtc+`+;$L#Bh&n z8Pc4ex|V%s4F1E}OH%&j%l7)u*y($H;B&ZR*QuWl`2L~qZRMO2*w^{-eU0ukPbRw=W85Hgn~MDs|!U4=y`oRfs%sU$)MhsdUgXV5oh2 zIuloUduMPLsNUV+QH{#M-$dM|8*v7og;-vk0-^s5HCNc<=8{=M_>=77QAMF-kKo|o zPxZI6{xB2s%P>xK2zZy8r4IFtfIPdm)w`#`&`L)|L`@lM{Z}wP&3am9qB4kYr^m8w zLI<#*=A`OSV;AI(mwu|wjl=8Sf%f*1pVstG1C-)z7cS0m==`!pOj0Eu{SBY6sEqgh zzrN!Atsie1FXbG3hN4pm()y@ulY^MAoeo=vwTMzO(E7voKiAvl=0)(4<+_XAsS8 zq9ikp=OZ_(bfW6UQMep#zHe@!9;`ALgfut1L-(in_CM%}93_q4zIyk;8PRK2>erod zshadSEqVN(zx{j2ndqd5^}kl%F6TIo9rf#k%KGS%b2&A5JK=S;r||?l*0zXalgPzv z`%`L^V;Qi@pEN`A`lbZd&NkRWm-*;qS1D-T5e8S{`d|EKEY$*uM4rL-Fc;5zj+gxj zEW$f?NW0&iEWm~nS8wee@4@#9R3G(aC!lZNCIVP(h25fRH;dRG zvftwb-ZucXT9H5bk0F>?`Fe@`BCM!awf!W**17I&6eiBtotrK%Y1#v+RJFs!X~euh z?c@2*PvbyxHH?fAsmBkCUv7q$C$8~e4e+|9n)bk{3G@iP&FZ_9i=EVzudBrgUVSZ( zbGLo4`?YxloE8;-{)-_T^0xh4)@KVLe8BB58nj!nyV}KF^y3st%uQdAH|AYJ|RhqpTEBUkxj+yh(B;tnwbgSif{sJI#U6 zIV$(6ZH!02ZQt}3`;Pv9e%k)e-tENbz~BB0=FcdsKRJi+s+ZSjFtrLat$zO&=_bL7 zD|}C^4pw=FOkCyRi*RgN#F(Qq1I8U^8aC!R!81M`_QWoB%o#Ry!%rj7ypx$#l1PJ=VKE%g$ZQazpsR6 zq#|dvr-L{ucd6-@^9U@DKkL!-sRd!0yZQd9No)LAES{YbbGy&l0o)P!E?F^y_{R9$ zuS>FnkmP7mH&jLBDV9qccop*3^2a!obt7)A;jN&0Y{j2;)N^r?rvw$z)Q_f4#EV3pv`vC?>@B3mI1u?6Dro(Zeo54kd! zJ%|~xDwC*|YbPI@(Z0qR&J# z$o;pF3qk)sBeP_Uf3tub)HvmCQ~*WW988XK_kqka6UjceaoCZ|gYT?@ab#)bgH49j zJc8h4aUf_L%NSgk>#`C$m4(|>AJIBF41iXG*!fF=RnYGcP~9n#vX;k1;dZvA<*(~o z;pAvu7q#ga^7YP7W^_*1+3&#F4Fe)N zb4di>K4!eqke7gsljG%%c{yC;lVQE$ve}LFCg3=}lza1FF-nI25}IK)p30

^%?cQ$Ac@Kg|{Z22b&EgNM{COe# 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%0Dn(uXPB2qGxMkiHNPxRTI~-CKaTC)-%yFp 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 +#include +#include +#include + +#include + +#include +#include +#include + +typedef CGAL::Simple_cartesian K; +typedef K::Point_3 Point_3; +typedef K::Vector_3 Vector_3; +typedef std::pair Pwn; +typedef CGAL::First_of_pair_property_map Point_map; +typedef CGAL::Second_of_pair_property_map Normal_map; + +namespace params = CGAL::parameters; + +int main(int argc, const char** argv) +{ + const char* fname1 = (argc>1)?argv[1]:"data/hippo1.ply"; + const char* fname2 = (argc>2)?argv[2]:"data/hippo2.ply"; + + std::vector pwns1, pwns2; + std::ifstream input(fname1); + if (!input || + !CGAL::read_ply_points(input, std::back_inserter(pwns1), + CGAL::parameters::point_map (CGAL::First_of_pair_property_map()). + normal_map (Normal_map()))) + { + std::cerr << "Error: cannot read file " << fname1 << std::endl; + return EXIT_FAILURE; + } + input.close(); + + input.open(fname2); + if (!input || + !CGAL::read_ply_points(input, std::back_inserter(pwns2), + CGAL::parameters::point_map (Point_map()). + normal_map (Normal_map()))) + { + std::cerr << "Error: cannot read file " << fname2 << std::endl; + return EXIT_FAILURE; + } + input.close(); + +K::Aff_transformation_3 res = + CGAL::pointmatcher::compute_registration_transformation + (pwns1, pwns2, Point_map(), Point_map(), Normal_map(), Normal_map()); + + std::ofstream out("pwns2_aligned.ply"); + if (!out || + !CGAL::write_ply_points( + out, pwns2, + CGAL::parameters::point_map(Point_map()). + normal_map(Normal_map()))) + { + return EXIT_FAILURE; + } + + std::cout << "Transformed version of " << fname2 + << " written to pwn2_aligned.ply.\n"; + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h new file mode 100644 index 00000000000..6b8dd765e9c --- /dev/null +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -0,0 +1,144 @@ +// TODO: Copyright info + +#ifndef CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H +#define CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H + +#include + +#include + +#include + +namespace CGAL { + +namespace pointmatcher { + +namespace internal { + +template +void +copy_cgal_points_to_pm_matrix +(const PointRange& prange, PointMap point_map, VectorMap vector_map, PM_matrix& pm_points, PM_matrix& pm_normals) +{ + int idx = 0; + for(const auto& p : prange) + { + // position + const auto& pos = get(point_map, p); + pm_points(0, idx) = pos.x(); + pm_points(1, idx) = pos.y(); + pm_points(2, idx) = pos.z(); + pm_points(3, idx) = Scalar(1.); + + // normal + const auto& normal = get (vector_map, p); + pm_normals(0, idx) = normal.x(); + pm_normals(1, idx) = normal.y(); + pm_normals(2, idx) = normal.z(); + + ++idx; + } +} + +} // end of namespace internal + +template +typename Kernel::Aff_transformation_3 +compute_registration_transformation(const PointRange1& range1, const PointRange2& range2, + PointMap1 point_map1, PointMap2 point_map2, + VectorMap1 vector_map1, VectorMap2 vector_map2) +{ + using Scalar = typename Kernel::FT; + + using PM = PointMatcher; + using PM_cloud = typename PM::DataPoints; + using PM_matrix = typename PM::Matrix; + using PM_labels = typename PM_cloud::Labels; + using PM_transform = typename PM::Transformation; + using PM_transform_params = typename PM::TransformationParameters; + + // ref_points: 1, points: 2 + std::size_t nb_ref_points = range1.size(); + std::size_t nb_points = range2.size(); + + PM_matrix ref_points_pos_matrix = PM_matrix (4, nb_ref_points); + PM_matrix ref_points_normal_matrix = PM_matrix (3, nb_ref_points); + PM_matrix points_pos_matrix = PM_matrix (4, nb_points); + PM_matrix points_normal_matrix = PM_matrix (3, nb_points); + + // convert cgal points to pointmatcher points + internal::copy_cgal_points_to_pm_matrix(range1, + point_map1, + vector_map1, + ref_points_pos_matrix, // out + ref_points_normal_matrix); // out + + internal::copy_cgal_points_to_pm_matrix(range2, + point_map2, + vector_map2, + points_pos_matrix, // out + points_normal_matrix); // out + + auto construct_PM_cloud = [](const PM_matrix& positions, const PM_matrix& normals) -> PM_cloud + { + PM_cloud cloud; + + cloud.addFeature("x", positions.row(0)); + cloud.addFeature("y", positions.row(1)); + cloud.addFeature("z", positions.row(2)); + cloud.addFeature("pad", positions.row(3)); + cloud.addDescriptor("normals", normals); + + return cloud; + }; + + PM_cloud ref_cloud = construct_PM_cloud(ref_points_pos_matrix, ref_points_normal_matrix); + PM_cloud cloud = construct_PM_cloud(points_pos_matrix, points_normal_matrix); + + typename PM::ICP icp; + + // TODO: Make it configurable? Use named parameters to have possible settings? + icp.setDefault(); + + PM_transform_params transform_params = PM_transform_params::Identity(4,4); + try + { + const PM_transform_params prior = transform_params; + std::cerr << "Cloud points nb: " << cloud.getNbPoints() << std::endl; + std::cerr << "Ref Cloud points nb: " << ref_cloud.getNbPoints() << std::endl; + transform_params = icp(cloud, ref_cloud, prior); + std::cerr << transform_params << std::endl; + } + catch (typename PM::ConvergenceError& error) + { + std::cerr << "ERROR PM::ICP failed to converge: " << std::endl; + std::cerr << " " << error.what() << std::endl; + // TODO: What to do? + //continue; + } + + // Rigid transformation + std::shared_ptr transform = PM::get().REG(Transformation).create("RigidTransformation"); + transform_params = transform->correctParameters(transform_params); + + typename Kernel::Aff_transformation_3 cgal_transform + (transform_params(0,0), transform_params(0,1), transform_params(0,2), transform_params(0,3), + transform_params(1,0), transform_params(1,1), transform_params(1,2), transform_params(1,3), + transform_params(2,0), transform_params(2,1), transform_params(2,2), transform_params(2,3)); + + return cgal_transform; +} + +} } // end of namespace CGAL::pointmatcher + +#endif // CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H From a87cc959d4596253d005244dc77b2f6e0a82f268 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Wed, 17 Jul 2019 17:14:17 +0300 Subject: [PATCH 20/53] added named parameters for pointmatcher icp config Using CGAL::pointmatcher::ICP_config, config (name,params) could be passed to registration method through named parameters. Having pointmatcher style (name,params) pair as ICP_config allows to use extended pointmatcher configurations without needing to change wrapper implementation. --- .../CGAL/boost/graph/parameters_interface.h | 8 + .../registration_with_pointmatcher.cpp | 60 +++++- .../compute_registration_transformation.h | 202 ++++++++++++++++-- 3 files changed, 255 insertions(+), 15 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/parameters_interface.h b/BGL/include/CGAL/boost/graph/parameters_interface.h index 3273de59c53..d374c5ad7a0 100644 --- a/BGL/include/CGAL/boost/graph/parameters_interface.h +++ b/BGL/include/CGAL/boost/graph/parameters_interface.h @@ -121,6 +121,14 @@ CGAL_add_named_parameter(plane_index_t, plane_index_map, plane_index_map) CGAL_add_named_parameter(select_percentage_t, select_percentage, select_percentage) CGAL_add_named_parameter(require_uniform_sampling_t, require_uniform_sampling, require_uniform_sampling) CGAL_add_named_parameter(point_is_constrained_t, point_is_constrained, point_is_constrained_map) +CGAL_add_named_parameter(pm_reading_data_points_filters_t, pm_reading_data_points_filters, pm_reading_data_points_filters) +CGAL_add_named_parameter(pm_reference_data_points_filters_t, pm_reference_data_points_filters, pm_reference_data_points_filters) +CGAL_add_named_parameter(pm_matcher_t, pm_matcher, pm_matcher) +CGAL_add_named_parameter(pm_outlier_filters_t, pm_outlier_filters, pm_outlier_filters) +CGAL_add_named_parameter(pm_error_minimizer_t, pm_error_minimizer, pm_error_minimizer) +CGAL_add_named_parameter(pm_transformation_checkers_t, pm_transformation_checkers, pm_transformation_checkers) +CGAL_add_named_parameter(pm_inspector_t, pm_inspector, pm_inspector) +CGAL_add_named_parameter(pm_logger_t, pm_logger, pm_logger) // List of named parameters used in Surface_mesh_approximation package CGAL_add_named_parameter(verbose_level_t, verbose_level, verbose_level) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp index 6e8292add18..531e1cdc52b 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp @@ -10,6 +10,7 @@ #include #include #include +#include typedef CGAL::Simple_cartesian K; typedef K::Point_3 Point_3; @@ -48,9 +49,64 @@ int main(int argc, const char** argv) } input.close(); + // TODO: Another example with default settings, refering to default settings in doc + + // + // Prepare ICP config + // + using CGAL::pointmatcher::ICP_config; + + // TODO: Change naming convention of filters? (for example, reference data points filters -> reference point set filters) + // TODO: Get reference point set filters from np2? + // TODO: Refer to https://github.com/ethz-asl/libpointmatcher/blob/master/doc/Configuration.md while doc + + // Prepare reading data points filters + std::vector reading_data_points_filters; + reading_data_points_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); + reading_data_points_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); + + // Prepare reference data points filters + std::vector reference_data_points_filters; + reference_data_points_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); + reference_data_points_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); + + // Prepare matcher function + ICP_config matcher { .name="KDTreeMatcher", .params={ {"knn", "1"}, {"epsilon", "3.16"} } }; + + // Prepare outlier filters + std::vector outlier_filters; + outlier_filters.push_back( ICP_config { .name="TrimmedDistOutlierFilter", .params={ {"ratio", "0.75" }} } ); + + // Prepare error minimizer + ICP_config error_minimizer { .name = "PointToPointErrorMinimizer"}; + + // Prepare transformation checker + std::vector transformation_checkers; + transformation_checkers.push_back( ICP_config { .name="CounterTransformationChecker", .params={ {"maxIterationCount", "150" }} } ); + transformation_checkers.push_back( ICP_config { .name="DifferentialTransformationChecker", .params={ {"minDiffRotErr" , "0.001" }, + {"minDiffTransErr", "0.01" }, + {"smoothLength" , "4" } } + } ); + // Prepare inspector + ICP_config inspector { .name="NullInspector" }; + + // Prepare logger + ICP_config logger { .name= "FileLogger" }; + + K::Aff_transformation_3 res = - CGAL::pointmatcher::compute_registration_transformation - (pwns1, pwns2, Point_map(), Point_map(), Normal_map(), Normal_map()); + CGAL::pointmatcher::compute_registration_transformation + (pwns1, pwns2, + params::point_map(Point_map()).normal_map(Normal_map()) + .pm_reading_data_points_filters(reading_data_points_filters) + .pm_reference_data_points_filters(reference_data_points_filters) + .pm_matcher(matcher) + .pm_outlier_filters(outlier_filters) + .pm_error_minimizer(error_minimizer) + .pm_transformation_checkers(transformation_checkers) + .pm_inspector(inspector) + .pm_logger(logger), + params::point_map(Point_map()).normal_map(Normal_map())); std::ofstream out("pwns2_aligned.ply"); if (!out || diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index 6b8dd765e9c..d8d120c1a0f 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -5,16 +5,153 @@ #include -#include +#include +#include +#include +#include + +#include #include +#include +#include +#include + namespace CGAL { namespace pointmatcher { +template +using ICP = typename PointMatcher::ICP; + +struct ICP_config { + std::string name; + std::map params; +}; + namespace internal { +void dump_invalid_point_matcher_config_exception_msg(const PointMatcherSupport::InvalidElement& err) { + std::cerr << "ERROR Invalid configuration for PM::ICP, omitting configuration: " << std::endl; + std::cerr << " " << err.what() << std::endl; +} + +template +ICP +construct_icp(const NamedParameters& np) +{ + typedef PointMatcher PM; + + using boost::choose_param; + using boost::get_param; + + ICP icp; + + icp.setDefault(); + + ICP_config null_config { .name = "_null_config" }; + auto is_null_config = [&](const ICP_config& c) { return !c.name.compare(null_config.name); }; + + // ReadingDataPointsFilters + auto reading_data_points_filter_configs = choose_param(get_param(np, internal_np::pm_reading_data_points_filters), std::vector()); + for(const auto& conf : reading_data_points_filter_configs) + { + std::cerr << "Reading data point filter found, name: " << conf.name << std::endl; + try { + icp.readingDataPointsFilters.push_back( PM::get().DataPointsFilterRegistrar.create(conf.name, conf.params) ); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } + } + + // RefenceDataPointsFilters + auto reference_data_points_filter_configs = choose_param(get_param(np, internal_np::pm_reference_data_points_filters), std::vector()); + for(const auto& conf : reference_data_points_filter_configs) + { + std::cerr << "Reference data point filter found, name: " << conf.name << std::endl; + try { + icp.referenceDataPointsFilters.push_back( PM::get().DataPointsFilterRegistrar.create(conf.name, conf.params) ); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } + } + + // Matcher + auto matcher_config = choose_param(get_param(np, internal_np::pm_matcher), null_config); + if(!is_null_config(matcher_config)) + { + std::cerr << "Matcher found, setting matcher to: " << matcher_config.name << std::endl; + try { + icp.matcher = PM::get().MatcherRegistrar.create(matcher_config.name, matcher_config.params); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } + } + + // Outlier Filters + auto outlier_filters_config = choose_param(get_param(np, internal_np::pm_outlier_filters), std::vector()); + for(const auto& conf : outlier_filters_config) + { + std::cerr << "Outlier filter found, name: " << conf.name << std::endl; + try { + icp.outlierFilters.push_back( PM::get().OutlierFilterRegistrar.create(conf.name, conf.params) ); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } + } + + // Error Minimizer + auto error_minimizer_config = choose_param(get_param(np, internal_np::pm_error_minimizer), null_config); + if(!is_null_config(error_minimizer_config)) + { + std::cerr << "Error minimizer found, setting to: " << error_minimizer_config.name << std::endl; + try { + icp.errorMinimizer = PM::get().ErrorMinimizerRegistrar.create(error_minimizer_config.name, error_minimizer_config.params); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } + } + + // Transformation Checkers + auto transformation_checkers_config = choose_param(get_param(np, internal_np::pm_transformation_checkers), std::vector()); + for(const auto& conf : transformation_checkers_config) + { + std::cerr << "Transformation checker found, name: " << conf.name << std::endl; + try { + icp.transformationCheckers.push_back( PM::get().TransformationCheckerRegistrar.create(conf.name, conf.params) ); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } + } + + // Inspector + auto inspector_config = choose_param(get_param(np, internal_np::pm_inspector), null_config); + if(!is_null_config(error_minimizer_config)) + { + std::cerr << "Inspector found, setting to: " << inspector_config.name << std::endl; + try { + icp.inspector = PM::get().InspectorRegistrar.create(inspector_config.name, inspector_config.params); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } + } + + // Logger + auto logger_config = choose_param(get_param(np, internal_np::pm_logger), null_config); + if(!is_null_config(logger_config)) + { + std::cerr << "Logger found, setting to: " << logger_config.name << std::endl; + try { + PointMatcherSupport::setLogger( PM::get().LoggerRegistrar.create(logger_config.name, logger_config.params) ); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } + } + + return icp; +} + template icp) { using Scalar = typename Kernel::FT; @@ -104,27 +239,22 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 PM_cloud ref_cloud = construct_PM_cloud(ref_points_pos_matrix, ref_points_normal_matrix); PM_cloud cloud = construct_PM_cloud(points_pos_matrix, points_normal_matrix); - - typename PM::ICP icp; - - // TODO: Make it configurable? Use named parameters to have possible settings? - icp.setDefault(); PM_transform_params transform_params = PM_transform_params::Identity(4,4); try { const PM_transform_params prior = transform_params; - std::cerr << "Cloud points nb: " << cloud.getNbPoints() << std::endl; - std::cerr << "Ref Cloud points nb: " << ref_cloud.getNbPoints() << std::endl; + std::cerr << "Cloud points nb: " << cloud.getNbPoints() << std::endl; // TODO: Remove + std::cerr << "Ref Cloud points nb: " << ref_cloud.getNbPoints() << std::endl; // TODO: Remove transform_params = icp(cloud, ref_cloud, prior); - std::cerr << transform_params << std::endl; + // TODO: Convergence? + std::cerr << transform_params << std::endl; // TODO: Remove } catch (typename PM::ConvergenceError& error) { std::cerr << "ERROR PM::ICP failed to converge: " << std::endl; std::cerr << " " << error.what() << std::endl; // TODO: What to do? - //continue; } // Rigid transformation @@ -139,6 +269,52 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 return cgal_transform; } +} // end of namespace internal + +template +#ifdef DOXYGEN_RUNNING +std::pair +#else +typename CGAL::Point_set_processing_3::GetK + ::Kernel::Aff_transformation_3 +#endif +compute_registration_transformation (const PointRange1& point_set_1, const PointRange2& point_set_2, + const NamedParameters1& np1, const NamedParameters2& np2) +{ + using boost::choose_param; + using boost::get_param; + + // Parse named parameters in some other function to get it as pointmatcher parameters + namespace PSP = CGAL::Point_set_processing_3; + + // property map types + typedef typename PSP::GetPointMap::type PointMap1; + typedef typename PSP::GetPointMap::type PointMap2; + CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, + typename boost::property_traits::value_type> ::value), + "The point type of input ranges must be the same"); + + typedef typename PSP::GetNormalMap::type NormalMap1; + typedef typename PSP::GetNormalMap::type NormalMap2; + CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, + typename boost::property_traits::value_type> ::value), + "The vector type of input ranges must be the same"); + + typedef typename PSP::GetK::Kernel Kernel; + typedef typename Kernel::FT Scalar; + + PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); + NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); + PointMap2 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); + NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); + + return internal::compute_registration_transformation(point_set_1, point_set_2, + point_map1, point_map2, + normal_map1, normal_map2, + internal::construct_icp(np1)); +} + } } // end of namespace CGAL::pointmatcher #endif // CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H From dbc173d04cf5a2c74697b935801c63fee1ce2229 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Fri, 19 Jul 2019 11:35:12 +0300 Subject: [PATCH 21/53] changed namedparameters, convenience overloads for pointmatcher::icp --- .../CGAL/boost/graph/parameters_interface.h | 15 +++-- .../registration_with_pointmatcher.cpp | 36 ++++++------ .../compute_registration_transformation.h | 56 ++++++++++++++----- 3 files changed, 65 insertions(+), 42 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/parameters_interface.h b/BGL/include/CGAL/boost/graph/parameters_interface.h index d374c5ad7a0..2d7137349dc 100644 --- a/BGL/include/CGAL/boost/graph/parameters_interface.h +++ b/BGL/include/CGAL/boost/graph/parameters_interface.h @@ -121,14 +121,13 @@ CGAL_add_named_parameter(plane_index_t, plane_index_map, plane_index_map) CGAL_add_named_parameter(select_percentage_t, select_percentage, select_percentage) CGAL_add_named_parameter(require_uniform_sampling_t, require_uniform_sampling, require_uniform_sampling) CGAL_add_named_parameter(point_is_constrained_t, point_is_constrained, point_is_constrained_map) -CGAL_add_named_parameter(pm_reading_data_points_filters_t, pm_reading_data_points_filters, pm_reading_data_points_filters) -CGAL_add_named_parameter(pm_reference_data_points_filters_t, pm_reference_data_points_filters, pm_reference_data_points_filters) -CGAL_add_named_parameter(pm_matcher_t, pm_matcher, pm_matcher) -CGAL_add_named_parameter(pm_outlier_filters_t, pm_outlier_filters, pm_outlier_filters) -CGAL_add_named_parameter(pm_error_minimizer_t, pm_error_minimizer, pm_error_minimizer) -CGAL_add_named_parameter(pm_transformation_checkers_t, pm_transformation_checkers, pm_transformation_checkers) -CGAL_add_named_parameter(pm_inspector_t, pm_inspector, pm_inspector) -CGAL_add_named_parameter(pm_logger_t, pm_logger, pm_logger) +CGAL_add_named_parameter(point_set_filters_t, point_set_filters, point_set_filters) +CGAL_add_named_parameter(matcher_t, matcher, matcher) +CGAL_add_named_parameter(outlier_filters_t, outlier_filters, outlier_filters) +CGAL_add_named_parameter(error_minimizer_t, error_minimizer, error_minimizer) +CGAL_add_named_parameter(transformation_checkers_t, transformation_checkers, transformation_checkers) +CGAL_add_named_parameter(inspector_t, inspector, inspector) +CGAL_add_named_parameter(logger_t, logger, logger) // List of named parameters used in Surface_mesh_approximation package CGAL_add_named_parameter(verbose_level_t, verbose_level, verbose_level) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp index 531e1cdc52b..118ae255554 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp @@ -56,19 +56,17 @@ int main(int argc, const char** argv) // using CGAL::pointmatcher::ICP_config; - // TODO: Change naming convention of filters? (for example, reference data points filters -> reference point set filters) - // TODO: Get reference point set filters from np2? // TODO: Refer to https://github.com/ethz-asl/libpointmatcher/blob/master/doc/Configuration.md while doc - // Prepare reading data points filters - std::vector reading_data_points_filters; - reading_data_points_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); - reading_data_points_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); + // Prepare point set 1 filters (PM::ReadingDataPointsFilters) + std::vector point_set_1_filters; + point_set_1_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); + point_set_1_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); - // Prepare reference data points filters - std::vector reference_data_points_filters; - reference_data_points_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); - reference_data_points_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); + // Prepare point set 2 filters (PM::ReferenceDataPointsFilters) + std::vector point_set_2_filters; + point_set_2_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); + point_set_2_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); // Prepare matcher function ICP_config matcher { .name="KDTreeMatcher", .params={ {"knn", "1"}, {"epsilon", "3.16"} } }; @@ -98,15 +96,15 @@ K::Aff_transformation_3 res = CGAL::pointmatcher::compute_registration_transformation (pwns1, pwns2, params::point_map(Point_map()).normal_map(Normal_map()) - .pm_reading_data_points_filters(reading_data_points_filters) - .pm_reference_data_points_filters(reference_data_points_filters) - .pm_matcher(matcher) - .pm_outlier_filters(outlier_filters) - .pm_error_minimizer(error_minimizer) - .pm_transformation_checkers(transformation_checkers) - .pm_inspector(inspector) - .pm_logger(logger), - params::point_map(Point_map()).normal_map(Normal_map())); + .point_set_filters(point_set_1_filters) + .matcher(matcher) + .outlier_filters(outlier_filters) + .error_minimizer(error_minimizer) + .transformation_checkers(transformation_checkers) + .inspector(inspector) + .logger(logger), + params::point_map(Point_map()).normal_map(Normal_map()) + .point_set_filters(point_set_2_filters)); std::ofstream out("pwns2_aligned.ply"); if (!out || diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index d8d120c1a0f..c22ed678303 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -37,9 +37,9 @@ void dump_invalid_point_matcher_config_exception_msg(const PointMatcherSupport:: std::cerr << " " << err.what() << std::endl; } -template +template ICP -construct_icp(const NamedParameters& np) +construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) { typedef PointMatcher PM; @@ -53,8 +53,8 @@ construct_icp(const NamedParameters& np) ICP_config null_config { .name = "_null_config" }; auto is_null_config = [&](const ICP_config& c) { return !c.name.compare(null_config.name); }; - // ReadingDataPointsFilters - auto reading_data_points_filter_configs = choose_param(get_param(np, internal_np::pm_reading_data_points_filters), std::vector()); + // np1.point_set_filters -> PM::ReadingDataPointsFilters + auto reading_data_points_filter_configs = choose_param(get_param(np1, internal_np::point_set_filters), std::vector()); for(const auto& conf : reading_data_points_filter_configs) { std::cerr << "Reading data point filter found, name: " << conf.name << std::endl; @@ -65,8 +65,8 @@ construct_icp(const NamedParameters& np) } } - // RefenceDataPointsFilters - auto reference_data_points_filter_configs = choose_param(get_param(np, internal_np::pm_reference_data_points_filters), std::vector()); + // np2.point_set_filters -> PM::ReferenceDataPointsFilter + auto reference_data_points_filter_configs = choose_param(get_param(np2, internal_np::point_set_filters), std::vector()); for(const auto& conf : reference_data_points_filter_configs) { std::cerr << "Reference data point filter found, name: " << conf.name << std::endl; @@ -78,7 +78,7 @@ construct_icp(const NamedParameters& np) } // Matcher - auto matcher_config = choose_param(get_param(np, internal_np::pm_matcher), null_config); + auto matcher_config = choose_param(get_param(np1, internal_np::matcher), null_config); if(!is_null_config(matcher_config)) { std::cerr << "Matcher found, setting matcher to: " << matcher_config.name << std::endl; @@ -90,7 +90,7 @@ construct_icp(const NamedParameters& np) } // Outlier Filters - auto outlier_filters_config = choose_param(get_param(np, internal_np::pm_outlier_filters), std::vector()); + auto outlier_filters_config = choose_param(get_param(np1, internal_np::outlier_filters), std::vector()); for(const auto& conf : outlier_filters_config) { std::cerr << "Outlier filter found, name: " << conf.name << std::endl; @@ -102,7 +102,7 @@ construct_icp(const NamedParameters& np) } // Error Minimizer - auto error_minimizer_config = choose_param(get_param(np, internal_np::pm_error_minimizer), null_config); + auto error_minimizer_config = choose_param(get_param(np1, internal_np::error_minimizer), null_config); if(!is_null_config(error_minimizer_config)) { std::cerr << "Error minimizer found, setting to: " << error_minimizer_config.name << std::endl; @@ -114,7 +114,7 @@ construct_icp(const NamedParameters& np) } // Transformation Checkers - auto transformation_checkers_config = choose_param(get_param(np, internal_np::pm_transformation_checkers), std::vector()); + auto transformation_checkers_config = choose_param(get_param(np1, internal_np::transformation_checkers), std::vector()); for(const auto& conf : transformation_checkers_config) { std::cerr << "Transformation checker found, name: " << conf.name << std::endl; @@ -126,7 +126,7 @@ construct_icp(const NamedParameters& np) } // Inspector - auto inspector_config = choose_param(get_param(np, internal_np::pm_inspector), null_config); + auto inspector_config = choose_param(get_param(np1, internal_np::inspector), null_config); if(!is_null_config(error_minimizer_config)) { std::cerr << "Inspector found, setting to: " << inspector_config.name << std::endl; @@ -138,7 +138,7 @@ construct_icp(const NamedParameters& np) } // Logger - auto logger_config = choose_param(get_param(np, internal_np::pm_logger), null_config); + auto logger_config = choose_param(get_param(np1, internal_np::logger), null_config); if(!is_null_config(logger_config)) { std::cerr << "Logger found, setting to: " << logger_config.name << std::endl; @@ -247,7 +247,7 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 std::cerr << "Cloud points nb: " << cloud.getNbPoints() << std::endl; // TODO: Remove std::cerr << "Ref Cloud points nb: " << ref_cloud.getNbPoints() << std::endl; // TODO: Remove transform_params = icp(cloud, ref_cloud, prior); - // TODO: Convergence? + // TODO: Convergence? Can we return some sort of score? std::cerr << transform_params << std::endl; // TODO: Remove } catch (typename PM::ConvergenceError& error) @@ -271,10 +271,11 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 } // end of namespace internal +// TODO: Document template #ifdef DOXYGEN_RUNNING -std::pair +geom_traits::Aff_transformation_3 #else typename CGAL::Point_set_processing_3::GetK ::Kernel::Aff_transformation_3 @@ -312,9 +313,34 @@ compute_registration_transformation (const PointRange1& point_set_1, const Point return internal::compute_registration_transformation(point_set_1, point_set_2, point_map1, point_map2, normal_map1, normal_map2, - internal::construct_icp(np1)); + internal::construct_icp(np1, np2)); } +// convenience overloads +template +typename CGAL::Point_set_processing_3::GetK + ::Kernel::Aff_transformation_3 +compute_registration_transformation(const PointRange1& point_set_1, PointRange2& point_set_2, + const NamedParameters1& np1) +{ + namespace params = CGAL::Point_set_processing_3::parameters; + return compute_registration_transformation(point_set_1, point_set_2, np1, params::all_default(point_set_1)); +} + +template +typename CGAL::Point_set_processing_3::GetK > + ::Kernel::Aff_transformation_3 +compute_registration_transformation(const PointRange1& point_set_1, PointRange2& point_set_2) +{ + namespace params = CGAL::Point_set_processing_3::parameters; + return compute_registration_transformation(point_set_1, point_set_2, + params::all_default(point_set_1), + params::all_default(point_set_2)); +} + + } } // end of namespace CGAL::pointmatcher #endif // CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H From 8bba0536e8c11af8537717a3d95306b24f8b118b Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Fri, 19 Jul 2019 12:16:22 +0300 Subject: [PATCH 22/53] added register_point_sets method that use pointmatcher::icp --- .../registration_with_pointmatcher.cpp | 21 +++- .../compute_registration_transformation.h | 5 +- .../CGAL/pointmatcher/register_point_sets.h | 119 ++++++++++++++++++ 3 files changed, 140 insertions(+), 5 deletions(-) create mode 100644 Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp index 118ae255554..7c7b5412f97 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include @@ -91,8 +92,8 @@ int main(int argc, const char** argv) // Prepare logger ICP_config logger { .name= "FileLogger" }; - -K::Aff_transformation_3 res = + // EITHER call the ICP registration method pointmatcher to get the transformation to apply to pwns2 TODO: or pwns1? + K::Aff_transformation_3 res = CGAL::pointmatcher::compute_registration_transformation (pwns1, pwns2, params::point_map(Point_map()).normal_map(Normal_map()) @@ -106,6 +107,22 @@ K::Aff_transformation_3 res = params::point_map(Point_map()).normal_map(Normal_map()) .point_set_filters(point_set_2_filters)); + // OR call the ICP registration method from pointmatcher and apply the transformation to pwn1 + // TODO: Check the latest convention on ref point cloud. Currently, point_set_2 is the ref, as in pointmatcher + // Therefore, the transformation is applied on point_set_1 + CGAL::pointmatcher::register_point_sets + (pwns1, pwns2, + params::point_map(Point_map()).normal_map(Normal_map()) + .point_set_filters(point_set_1_filters) + .matcher(matcher) + .outlier_filters(outlier_filters) + .error_minimizer(error_minimizer) + .transformation_checkers(transformation_checkers) + .inspector(inspector) + .logger(logger), + params::point_map(Point_map()).normal_map(Normal_map()) + .point_set_filters(point_set_2_filters)); + std::ofstream out("pwns2_aligned.ply"); if (!out || !CGAL::write_ply_points( diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index c22ed678303..1db03a9de23 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -244,8 +244,6 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 try { const PM_transform_params prior = transform_params; - std::cerr << "Cloud points nb: " << cloud.getNbPoints() << std::endl; // TODO: Remove - std::cerr << "Ref Cloud points nb: " << ref_cloud.getNbPoints() << std::endl; // TODO: Remove transform_params = icp(cloud, ref_cloud, prior); // TODO: Convergence? Can we return some sort of score? std::cerr << transform_params << std::endl; // TODO: Remove @@ -272,6 +270,8 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 } // end of namespace internal // TODO: Document +// TODO: Here, point_set_2 is the reference. Therefore, Aff_transformation_3 corresponds to the +// transformation that is suggested to be applied on point_set_1. Change the order? template #ifdef DOXYGEN_RUNNING @@ -286,7 +286,6 @@ compute_registration_transformation (const PointRange1& point_set_1, const Point using boost::choose_param; using boost::get_param; - // Parse named parameters in some other function to get it as pointmatcher parameters namespace PSP = CGAL::Point_set_processing_3; // property map types diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h new file mode 100644 index 00000000000..e2a52fc8be1 --- /dev/null +++ b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h @@ -0,0 +1,119 @@ +// TODO: Copyright info + +#ifndef CGAL_POINTMATCHER_REGISTER_POINT_SETS_H +#define CGAL_POINTMATCHER_REGISTER_POINT_SETS_H + +#include + +#include +#include +#include +#include + +#include + +#include + +#include + +namespace CGAL { + +namespace pointmatcher { + +namespace internal { + +template +void // TODO: Can we return some sort of score? +register_point_sets(PointRange1& range1, const PointRange2& range2, // TODO: Check which one is ref, currently range2 + PointMap1 point_map1, PointMap2 point_map2, + VectorMap1 vector_map1, VectorMap2 vector_map2, + ICP icp) +{ + typename Kernel::Aff_transformation_3 res = + compute_registration_transformation(range1, range2, + point_map1, point_map2, + vector_map1, vector_map2, + icp); + + // update CGAL points + // TODO: Here, point_set_2 is the reference. Therefore, Aff_transformation_3 corresponds to the + // transformation that is suggested to be applied on point_set_1. Check the latest convention + // with compute_registration_transformation() method + for (typename PointRange1::iterator it=range1.begin(), + end=range1.end(); it!=end; ++it) + { + put(point_map1, *it, get(point_map1, *it).transform(res)); + } +} + +} // end of namespace internal + +// TODO: Document +template +void // TODO: Can we return some sort of score? +register_point_sets (PointRange1& point_set_1, const PointRange2& point_set_2, // TODO: Check which one is ref, currently range2 + const NamedParameters1& np1, const NamedParameters2& np2) +{ + using boost::choose_param; + using boost::get_param; + + namespace PSP = CGAL::Point_set_processing_3; + + // property map types + typedef typename PSP::GetPointMap::type PointMap1; + typedef typename PSP::GetPointMap::type PointMap2; + CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, + typename boost::property_traits::value_type> ::value), + "The point type of input ranges must be the same"); + + typedef typename PSP::GetNormalMap::type NormalMap1; + typedef typename PSP::GetNormalMap::type NormalMap2; + CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, + typename boost::property_traits::value_type> ::value), + "The vector type of input ranges must be the same"); + + typedef typename PSP::GetK::Kernel Kernel; + typedef typename Kernel::FT Scalar; + + PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); + NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); + PointMap2 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); + NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); + + internal::register_point_sets(point_set_1, point_set_2, + point_map1, point_map2, + normal_map1, normal_map2, + internal::construct_icp(np1, np2)); +} + +// convenience overloads +template +void // TODO: Can we return some sort of score? +register_point_sets(PointRange1& point_set_1, const PointRange2& point_set_2, // TODO: Check which one is ref, currently range2 + const NamedParameters1& np1) +{ + namespace params = CGAL::Point_set_processing_3::parameters; + return register_point_sets(point_set_1, point_set_2, np1, params::all_default(point_set_1)); +} + +template +void // TODO: Can we return some sort of score? +register_point_sets(PointRange1& point_set_1, const PointRange2& point_set_2) // TODO: Check which one is ref, currently range2 +{ + namespace params = CGAL::Point_set_processing_3::parameters; + return register_point_sets(point_set_1, point_set_2, + params::all_default(point_set_1), + params::all_default(point_set_2)); +} + +} } // end of namespace CGAL::pointmatcher + +#endif // CGAL_POINTMATCHER_REGISTER_POINT_SETS_H \ No newline at end of file From dbec5daa1dbe1fc6b149ec60af866d2c64e084bd Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Fri, 19 Jul 2019 14:16:36 +0300 Subject: [PATCH 23/53] pointmatcher icp reg convention: point_set_1 is ref while point_set_2 is data --- .../registration_with_pointmatcher.cpp | 6 +-- .../compute_registration_transformation.h | 42 +++++++++++-------- .../CGAL/pointmatcher/register_point_sets.h | 17 ++++---- 3 files changed, 33 insertions(+), 32 deletions(-) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp index 7c7b5412f97..f2f76190b1e 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp @@ -88,7 +88,7 @@ int main(int argc, const char** argv) } ); // Prepare inspector ICP_config inspector { .name="NullInspector" }; - +// TODO: Do we really need to set logger through named parameters? (alternative: some other static method) // Prepare logger ICP_config logger { .name= "FileLogger" }; @@ -107,9 +107,7 @@ int main(int argc, const char** argv) params::point_map(Point_map()).normal_map(Normal_map()) .point_set_filters(point_set_2_filters)); - // OR call the ICP registration method from pointmatcher and apply the transformation to pwn1 - // TODO: Check the latest convention on ref point cloud. Currently, point_set_2 is the ref, as in pointmatcher - // Therefore, the transformation is applied on point_set_1 + // OR call the ICP registration method from pointmatcher and apply the transformation to pwn2 CGAL::pointmatcher::register_point_sets (pwns1, pwns2, params::point_map(Point_map()).normal_map(Normal_map()) diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index 1db03a9de23..db77f267948 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -53,20 +53,12 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) ICP_config null_config { .name = "_null_config" }; auto is_null_config = [&](const ICP_config& c) { return !c.name.compare(null_config.name); }; - // np1.point_set_filters -> PM::ReadingDataPointsFilters - auto reading_data_points_filter_configs = choose_param(get_param(np1, internal_np::point_set_filters), std::vector()); - for(const auto& conf : reading_data_points_filter_configs) - { - std::cerr << "Reading data point filter found, name: " << conf.name << std::endl; - try { - icp.readingDataPointsFilters.push_back( PM::get().DataPointsFilterRegistrar.create(conf.name, conf.params) ); - } catch(typename PointMatcherSupport::InvalidElement& error) { - dump_invalid_point_matcher_config_exception_msg(error); - } - } + // In CGAL, point_set_1 is the reference while point_set_2 is the data + // However, in pointmatcher, the order is reverse: point_set_1 is the data while point_set_2 is the reference + // Therefore, filter params from np1 applies to reference data points while params from np2 applies to reading data points - // np2.point_set_filters -> PM::ReferenceDataPointsFilter - auto reference_data_points_filter_configs = choose_param(get_param(np2, internal_np::point_set_filters), std::vector()); + // np1.point_set_filters -> PM::ReferenceDataPointsFilter + auto reference_data_points_filter_configs = choose_param(get_param(np1, internal_np::point_set_filters), std::vector()); for(const auto& conf : reference_data_points_filter_configs) { std::cerr << "Reference data point filter found, name: " << conf.name << std::endl; @@ -77,6 +69,18 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) } } + // np2.point_set_filters -> PM::ReadingDataPointsFilters + auto reading_data_points_filter_configs = choose_param(get_param(np2, internal_np::point_set_filters), std::vector()); + for(const auto& conf : reading_data_points_filter_configs) + { + std::cerr << "Reading data point filter found, name: " << conf.name << std::endl; + try { + icp.readingDataPointsFilters.push_back( PM::get().DataPointsFilterRegistrar.create(conf.name, conf.params) ); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } + } + // Matcher auto matcher_config = choose_param(get_param(np1, internal_np::matcher), null_config); if(!is_null_config(matcher_config)) @@ -210,7 +214,9 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 PM_matrix ref_points_normal_matrix = PM_matrix (3, nb_ref_points); PM_matrix points_pos_matrix = PM_matrix (4, nb_points); PM_matrix points_normal_matrix = PM_matrix (3, nb_points); - + + // In CGAL, point_set_1 is the reference while point_set_2 is the data + // convert cgal points to pointmatcher points internal::copy_cgal_points_to_pm_matrix(range1, point_map1, @@ -244,6 +250,7 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 try { const PM_transform_params prior = transform_params; + // In pointmatcher::icp, param1 is the data while param2 is the reference (in constrast to CGAL) transform_params = icp(cloud, ref_cloud, prior); // TODO: Convergence? Can we return some sort of score? std::cerr << transform_params << std::endl; // TODO: Remove @@ -270,8 +277,7 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 } // end of namespace internal // TODO: Document -// TODO: Here, point_set_2 is the reference. Therefore, Aff_transformation_3 corresponds to the -// transformation that is suggested to be applied on point_set_1. Change the order? +// point_set_1 is reference while point_set_2 is data template #ifdef DOXYGEN_RUNNING @@ -320,7 +326,7 @@ template typename CGAL::Point_set_processing_3::GetK ::Kernel::Aff_transformation_3 -compute_registration_transformation(const PointRange1& point_set_1, PointRange2& point_set_2, +compute_registration_transformation(const PointRange1& point_set_1, const PointRange2& point_set_2, const NamedParameters1& np1) { namespace params = CGAL::Point_set_processing_3::parameters; @@ -331,7 +337,7 @@ template typename CGAL::Point_set_processing_3::GetK > ::Kernel::Aff_transformation_3 -compute_registration_transformation(const PointRange1& point_set_1, PointRange2& point_set_2) +compute_registration_transformation(const PointRange1& point_set_1, const PointRange2& point_set_2) { namespace params = CGAL::Point_set_processing_3::parameters; return compute_registration_transformation(point_set_1, point_set_2, diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h index e2a52fc8be1..d1fb0f329ec 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h @@ -30,7 +30,7 @@ template void // TODO: Can we return some sort of score? -register_point_sets(PointRange1& range1, const PointRange2& range2, // TODO: Check which one is ref, currently range2 +register_point_sets(const PointRange1& range1, PointRange2& range2, PointMap1 point_map1, PointMap2 point_map2, VectorMap1 vector_map1, VectorMap2 vector_map2, ICP icp) @@ -42,13 +42,10 @@ register_point_sets(PointRange1& range1, const PointRange2& range2, // TODO: Che icp); // update CGAL points - // TODO: Here, point_set_2 is the reference. Therefore, Aff_transformation_3 corresponds to the - // transformation that is suggested to be applied on point_set_1. Check the latest convention - // with compute_registration_transformation() method - for (typename PointRange1::iterator it=range1.begin(), - end=range1.end(); it!=end; ++it) + for (typename PointRange2::iterator it=range2.begin(), + end=range2.end(); it!=end; ++it) { - put(point_map1, *it, get(point_map1, *it).transform(res)); + put(point_map2, *it, get(point_map2, *it).transform(res)); } } @@ -58,7 +55,7 @@ register_point_sets(PointRange1& range1, const PointRange2& range2, // TODO: Che template void // TODO: Can we return some sort of score? -register_point_sets (PointRange1& point_set_1, const PointRange2& point_set_2, // TODO: Check which one is ref, currently range2 +register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, const NamedParameters1& np1, const NamedParameters2& np2) { using boost::choose_param; @@ -97,7 +94,7 @@ register_point_sets (PointRange1& point_set_1, const PointRange2& point_set_2, / template void // TODO: Can we return some sort of score? -register_point_sets(PointRange1& point_set_1, const PointRange2& point_set_2, // TODO: Check which one is ref, currently range2 +register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2, const NamedParameters1& np1) { namespace params = CGAL::Point_set_processing_3::parameters; @@ -106,7 +103,7 @@ register_point_sets(PointRange1& point_set_1, const PointRange2& point_set_2, // template void // TODO: Can we return some sort of score? -register_point_sets(PointRange1& point_set_1, const PointRange2& point_set_2) // TODO: Check which one is ref, currently range2 +register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2) { namespace params = CGAL::Point_set_processing_3::parameters; return register_point_sets(point_set_1, point_set_2, From 23eb9768fa37a015ab3ba4c8a5e943fcfc5f8b70 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Fri, 19 Jul 2019 23:58:12 +0300 Subject: [PATCH 24/53] Take initial transform for data point set as opt. namedparam to icp regist. method --- .../CGAL/boost/graph/parameters_interface.h | 1 + .../registration_with_pointmatcher.cpp | 20 +++++- .../compute_registration_transformation.h | 59 ++++++++++------- .../CGAL/pointmatcher/register_point_sets.h | 65 ++++--------------- 4 files changed, 66 insertions(+), 79 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/parameters_interface.h b/BGL/include/CGAL/boost/graph/parameters_interface.h index 2d7137349dc..72af0dd2831 100644 --- a/BGL/include/CGAL/boost/graph/parameters_interface.h +++ b/BGL/include/CGAL/boost/graph/parameters_interface.h @@ -121,6 +121,7 @@ CGAL_add_named_parameter(plane_index_t, plane_index_map, plane_index_map) CGAL_add_named_parameter(select_percentage_t, select_percentage, select_percentage) CGAL_add_named_parameter(require_uniform_sampling_t, require_uniform_sampling, require_uniform_sampling) CGAL_add_named_parameter(point_is_constrained_t, point_is_constrained, point_is_constrained_map) +CGAL_add_named_parameter(transformation_t, transformation, transformation) CGAL_add_named_parameter(point_set_filters_t, point_set_filters, point_set_filters) CGAL_add_named_parameter(matcher_t, matcher, matcher) CGAL_add_named_parameter(outlier_filters_t, outlier_filters, outlier_filters) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp index f2f76190b1e..845102e5ac7 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #include @@ -92,7 +94,9 @@ int main(int argc, const char** argv) // Prepare logger ICP_config logger { .name= "FileLogger" }; - // EITHER call the ICP registration method pointmatcher to get the transformation to apply to pwns2 TODO: or pwns1? + const K::Aff_transformation_3 identity_transform = K::Aff_transformation_3(CGAL::Identity_transformation()); + + // EITHER call the ICP registration method pointmatcher to get the transformation to apply to pwns2 K::Aff_transformation_3 res = CGAL::pointmatcher::compute_registration_transformation (pwns1, pwns2, @@ -105,7 +109,13 @@ int main(int argc, const char** argv) .inspector(inspector) .logger(logger), params::point_map(Point_map()).normal_map(Normal_map()) - .point_set_filters(point_set_2_filters)); + .point_set_filters(point_set_2_filters) + .transformation(identity_transform) /* initial transform for pwns2. + * default value is already identity transform. + * a proper initial transform could be given, for example, + * a transform returned from a coarse registration algorithm. + * */ + ); // OR call the ICP registration method from pointmatcher and apply the transformation to pwn2 CGAL::pointmatcher::register_point_sets @@ -119,7 +129,11 @@ int main(int argc, const char** argv) .inspector(inspector) .logger(logger), params::point_map(Point_map()).normal_map(Normal_map()) - .point_set_filters(point_set_2_filters)); + .point_set_filters(point_set_2_filters) + .transformation(res) /* pass the above computed transformation as initial transformation. + * as a result, the registration will require less iterations to converge. + * */ + ); std::ofstream out("pwns2_aligned.ply"); if (!out || diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index db77f267948..8790b6572ab 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -9,6 +9,7 @@ #include #include #include +#include #include @@ -50,7 +51,7 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) icp.setDefault(); - ICP_config null_config { .name = "_null_config" }; + ICP_config null_config { .name = "_null_pm_config_in_cgal" }; auto is_null_config = [&](const ICP_config& c) { return !c.name.compare(null_config.name); }; // In CGAL, point_set_1 is the reference while point_set_2 is the data @@ -61,7 +62,6 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) auto reference_data_points_filter_configs = choose_param(get_param(np1, internal_np::point_set_filters), std::vector()); for(const auto& conf : reference_data_points_filter_configs) { - std::cerr << "Reference data point filter found, name: " << conf.name << std::endl; try { icp.referenceDataPointsFilters.push_back( PM::get().DataPointsFilterRegistrar.create(conf.name, conf.params) ); } catch(typename PointMatcherSupport::InvalidElement& error) { @@ -73,7 +73,6 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) auto reading_data_points_filter_configs = choose_param(get_param(np2, internal_np::point_set_filters), std::vector()); for(const auto& conf : reading_data_points_filter_configs) { - std::cerr << "Reading data point filter found, name: " << conf.name << std::endl; try { icp.readingDataPointsFilters.push_back( PM::get().DataPointsFilterRegistrar.create(conf.name, conf.params) ); } catch(typename PointMatcherSupport::InvalidElement& error) { @@ -85,7 +84,6 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) auto matcher_config = choose_param(get_param(np1, internal_np::matcher), null_config); if(!is_null_config(matcher_config)) { - std::cerr << "Matcher found, setting matcher to: " << matcher_config.name << std::endl; try { icp.matcher = PM::get().MatcherRegistrar.create(matcher_config.name, matcher_config.params); } catch(typename PointMatcherSupport::InvalidElement& error) { @@ -97,7 +95,6 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) auto outlier_filters_config = choose_param(get_param(np1, internal_np::outlier_filters), std::vector()); for(const auto& conf : outlier_filters_config) { - std::cerr << "Outlier filter found, name: " << conf.name << std::endl; try { icp.outlierFilters.push_back( PM::get().OutlierFilterRegistrar.create(conf.name, conf.params) ); } catch(typename PointMatcherSupport::InvalidElement& error) { @@ -109,7 +106,6 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) auto error_minimizer_config = choose_param(get_param(np1, internal_np::error_minimizer), null_config); if(!is_null_config(error_minimizer_config)) { - std::cerr << "Error minimizer found, setting to: " << error_minimizer_config.name << std::endl; try { icp.errorMinimizer = PM::get().ErrorMinimizerRegistrar.create(error_minimizer_config.name, error_minimizer_config.params); } catch(typename PointMatcherSupport::InvalidElement& error) { @@ -121,7 +117,6 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) auto transformation_checkers_config = choose_param(get_param(np1, internal_np::transformation_checkers), std::vector()); for(const auto& conf : transformation_checkers_config) { - std::cerr << "Transformation checker found, name: " << conf.name << std::endl; try { icp.transformationCheckers.push_back( PM::get().TransformationCheckerRegistrar.create(conf.name, conf.params) ); } catch(typename PointMatcherSupport::InvalidElement& error) { @@ -133,7 +128,6 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) auto inspector_config = choose_param(get_param(np1, internal_np::inspector), null_config); if(!is_null_config(error_minimizer_config)) { - std::cerr << "Inspector found, setting to: " << inspector_config.name << std::endl; try { icp.inspector = PM::get().InspectorRegistrar.create(inspector_config.name, inspector_config.params); } catch(typename PointMatcherSupport::InvalidElement& error) { @@ -145,7 +139,6 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) auto logger_config = choose_param(get_param(np1, internal_np::logger), null_config); if(!is_null_config(logger_config)) { - std::cerr << "Logger found, setting to: " << logger_config.name << std::endl; try { PointMatcherSupport::setLogger( PM::get().LoggerRegistrar.create(logger_config.name, logger_config.params) ); } catch(typename PointMatcherSupport::InvalidElement& error) { @@ -195,7 +188,9 @@ template icp) + VectorMap1 vector_map1, VectorMap2 vector_map2, + const typename Kernel::Aff_transformation_3& initial_transform, + ICP icp) { using Scalar = typename Kernel::FT; @@ -246,31 +241,43 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 PM_cloud ref_cloud = construct_PM_cloud(ref_points_pos_matrix, ref_points_normal_matrix); PM_cloud cloud = construct_PM_cloud(points_pos_matrix, points_normal_matrix); - PM_transform_params transform_params = PM_transform_params::Identity(4,4); + PM_transform_params pm_transform_params = PM_transform_params::Identity(4,4); + + // Convert CGAL transform to pm transform + for(int i = 0; i < 4; i++) + for(int j = 0; j < 4; j++) + pm_transform_params(i,j) = initial_transform.m(i,j); + try { - const PM_transform_params prior = transform_params; - // In pointmatcher::icp, param1 is the data while param2 is the reference (in constrast to CGAL) - transform_params = icp(cloud, ref_cloud, prior); - // TODO: Convergence? Can we return some sort of score? - std::cerr << transform_params << std::endl; // TODO: Remove + const PM_transform_params prior = pm_transform_params; + pm_transform_params = icp(cloud, ref_cloud, prior); } - catch (typename PM::ConvergenceError& error) + catch (typename PM::ConvergenceError& error) // TODO: Shall we make it a CGAL exception? { std::cerr << "ERROR PM::ICP failed to converge: " << std::endl; std::cerr << " " << error.what() << std::endl; - // TODO: What to do? } // Rigid transformation std::shared_ptr transform = PM::get().REG(Transformation).create("RigidTransformation"); - transform_params = transform->correctParameters(transform_params); + pm_transform_params = transform->correctParameters(pm_transform_params); typename Kernel::Aff_transformation_3 cgal_transform - (transform_params(0,0), transform_params(0,1), transform_params(0,2), transform_params(0,3), - transform_params(1,0), transform_params(1,1), transform_params(1,2), transform_params(1,3), - transform_params(2,0), transform_params(2,1), transform_params(2,2), transform_params(2,3)); - + (pm_transform_params(0,0), pm_transform_params(0,1), pm_transform_params(0,2), pm_transform_params(0,3), + pm_transform_params(1,0), pm_transform_params(1,1), pm_transform_params(1,2), pm_transform_params(1,3), + pm_transform_params(2,0), pm_transform_params(2,1), pm_transform_params(2,2), pm_transform_params(2,3)); + +#ifdef CGAL_POINTMATCHER_VERBOSE + std::cerr << "Transformation matrix: " << std::endl; + for (std::size_t i = 0; i < 4; ++ i) + { + for (std::size_t j = 0; j < 4; ++ j) + std::cerr << cgal_transform.coeff(i,j) << " "; + std::cerr << std::endl; + } +#endif + return cgal_transform; } @@ -309,15 +316,21 @@ compute_registration_transformation (const PointRange1& point_set_1, const Point typedef typename PSP::GetK::Kernel Kernel; typedef typename Kernel::FT Scalar; + typedef typename Kernel::Aff_transformation_3 Transformation; PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); PointMap2 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); + // initial transformation + Transformation initial_transformation + = choose_param(get_param(np2, internal_np::transformation), Transformation(Identity_transformation())); + return internal::compute_registration_transformation(point_set_1, point_set_2, point_map1, point_map2, normal_map1, normal_map2, + initial_transformation, internal::construct_icp(np1, np2)); } diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h index d1fb0f329ec..991aa577bab 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h @@ -20,37 +20,6 @@ namespace CGAL { namespace pointmatcher { -namespace internal { - -template -void // TODO: Can we return some sort of score? -register_point_sets(const PointRange1& range1, PointRange2& range2, - PointMap1 point_map1, PointMap2 point_map2, - VectorMap1 vector_map1, VectorMap2 vector_map2, - ICP icp) -{ - typename Kernel::Aff_transformation_3 res = - compute_registration_transformation(range1, range2, - point_map1, point_map2, - vector_map1, vector_map2, - icp); - - // update CGAL points - for (typename PointRange2::iterator it=range2.begin(), - end=range2.end(); it!=end; ++it) - { - put(point_map2, *it, get(point_map2, *it).transform(res)); - } -} - -} // end of namespace internal - // TODO: Document template @@ -62,32 +31,22 @@ register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, using boost::get_param; namespace PSP = CGAL::Point_set_processing_3; - - // property map types - typedef typename PSP::GetPointMap::type PointMap1; - typedef typename PSP::GetPointMap::type PointMap2; - CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, - typename boost::property_traits::value_type> ::value), - "The point type of input ranges must be the same"); - - typedef typename PSP::GetNormalMap::type NormalMap1; - typedef typename PSP::GetNormalMap::type NormalMap2; - CGAL_static_assertion_msg((boost::is_same< typename boost::property_traits::value_type, - typename boost::property_traits::value_type> ::value), - "The vector type of input ranges must be the same"); - typedef typename PSP::GetK::Kernel Kernel; - typedef typename Kernel::FT Scalar; - PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); - NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); + // compute registration transformation + typename Kernel::Aff_transformation_3 res = + compute_registration_transformation(point_set_1, point_set_2, np1, np2); + + // property map type of point_set_2 + typedef typename PSP::GetPointMap::type PointMap2; PointMap2 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); - NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); - internal::register_point_sets(point_set_1, point_set_2, - point_map1, point_map2, - normal_map1, normal_map2, - internal::construct_icp(np1, np2)); + // update CGAL points + for (typename PointRange2::iterator it=point_set_2.begin(), + end=point_set_2.end(); it!=end; ++it) + { + put(point_map2, *it, get(point_map2, *it).transform(res)); + } } // convenience overloads From 84bf522352640fd8a04498edf39fd302c9bbd4ff Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Sat, 20 Jul 2019 00:29:53 +0300 Subject: [PATCH 25/53] Added psp example: registration with opengr+pointmatcher pipeline --- ...tion_with_opengr_pointmatcher_pipeline.cpp | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp new file mode 100644 index 00000000000..fa3802e4e2f --- /dev/null +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp @@ -0,0 +1,92 @@ +// TODO: Copyright info +// TODO: Requires both OpenGR and PointMatcher wrappers. + +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include +#include +#include + +typedef CGAL::Simple_cartesian K; +typedef K::Point_3 Point_3; +typedef K::Vector_3 Vector_3; +typedef std::pair Pwn; +typedef CGAL::First_of_pair_property_map Point_map; +typedef CGAL::Second_of_pair_property_map Normal_map; + +namespace params = CGAL::parameters; + +int main(int argc, const char** argv) +{ + const char* fname1 = (argc>1)?argv[1]:"data/hippo1.ply"; + const char* fname2 = (argc>2)?argv[2]:"data/hippo2.ply"; + + std::vector pwns1, pwns2; + std::ifstream input(fname1); + if (!input || + !CGAL::read_ply_points(input, std::back_inserter(pwns1), + CGAL::parameters::point_map (CGAL::First_of_pair_property_map()). + normal_map (Normal_map()))) + { + std::cerr << "Error: cannot read file " << fname1 << std::endl; + return EXIT_FAILURE; + } + input.close(); + + input.open(fname2); + if (!input || + !CGAL::read_ply_points(input, std::back_inserter(pwns2), + CGAL::parameters::point_map (Point_map()). + normal_map (Normal_map()))) + { + std::cerr << "Error: cannot read file " << fname2 << std::endl; + return EXIT_FAILURE; + } + input.close(); + + std::cout << "Computing registration transformation using OpenGR Super4PCS.." << std::endl; + // First, compute registration transformation using OpenGR Super4PCS + K::Aff_transformation_3 res = + std::get<0>( // get first of pair, which is the transformation + CGAL::OpenGR::compute_registration_transformation + (pwns1, pwns2, + params::point_map(Point_map()).normal_map(Normal_map()), + params::point_map(Point_map()).normal_map(Normal_map())) + ); + + std::cout << "Computing registration transformation using PointMatcher ICP, " + << "taking transformation computed by OpenGR Super4PCS as initial transformation.." << std::endl; + // Then, compute registration transformation using PointMatcher ICP, taking transformation computed + // by OpenGR as initial transformation + res = + CGAL::pointmatcher::compute_registration_transformation + (pwns1, pwns2, + params::point_map(Point_map()).normal_map(Normal_map()), + params::point_map(Point_map()).normal_map(Normal_map()) + .transformation(res) + ); + + std::ofstream out("pwns2_aligned.ply"); + if (!out || + !CGAL::write_ply_points( + out, pwns2, + CGAL::parameters::point_map(Point_map()). + normal_map(Normal_map()))) + { + return EXIT_FAILURE; + } + + std::cout << "Transformed version of " << fname2 + << " written to pwn2_aligned.ply.\n"; + + return EXIT_SUCCESS; +} \ No newline at end of file From 68013aa86c22ba5de8985e2617db420ef73de052 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Fri, 26 Jul 2019 13:18:28 +0300 Subject: [PATCH 26/53] Documentation of pointmatcher registration functions --- .../doc/Documentation/Installation.txt | 8 + .../Point_set_processing_3.txt | 16 + .../Point_set_processing_3/CMakeLists.txt | 10 + .../registration_with_pointmatcher.cpp | 40 +- .../compute_registration_transformation.h | 346 +++++++++++++++--- .../CGAL/pointmatcher/register_point_sets.h | 225 +++++++++++- 6 files changed, 583 insertions(+), 62 deletions(-) diff --git a/Documentation/doc/Documentation/Installation.txt b/Documentation/doc/Documentation/Installation.txt index f6a6b8e6ee0..7ca7d6e4de9 100644 --- a/Documentation/doc/Documentation/Installation.txt +++ b/Documentation/doc/Documentation/Installation.txt @@ -524,6 +524,14 @@ and the \ref PkgRidges3Ref packages. The \sc{Eigen} web site is `http://eigen.tuxfamily.org`. +\subsection thirdpartylibpointmatcher PointMatcher + +\sc{libpointmatcher} is a modular library implementing the Iterative Closest Point (ICP) algorithm for aligning point clouds, released under a permissive BSD license. + +\cgal provides wrappers for the ICP algorithm of \sc{libpointmatcher} in the \ref PkgPointSetProcessing3Ref packages. + +The \sc{libpointmatcher} web site is `https://github.com/ethz-asl/libpointmatcher`. + \subsection thirdpartyESBTL ESBTL The \sc{Esbtl} (Easy Structural Biology Template Library) is a library that allows diff --git a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt index 275ecf450fb..370015fa726 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt @@ -314,7 +314,23 @@ points in the domain. \cgalExample{Point_set_processing_3/scale_estimation_2d_example.cpp} +\section Point_set_processing_3Registration Registration +\cgal provides two wrappers for the \ref thirdpartylibpointmatcher library : + +- `CGAL::pointmatcher::compute_registration_transformation()` computes the +registration of one point set w.r.t. another in the form of a +`CGAL::Aff_transformation_3` object, using ICP (Iterative Closest Point) +algorithm \cgalCite{cgal:mam-sffgp-14}; + +- `CGAL::pointmatcher::register_point_sets()` computes the registration of +one point set w.r.t. another and directly aligns it to it. + +\subsection Point_set_processing_3Example_registration Example + +The following example reads two point sets and aligns them using the +\ref thirdpartylibpointmatcher library: +\cgalExample{Point_set_processing_3/registration_with_pointmatcher.cpp} \section Point_set_processing_3OutlierRemoval Outlier Removal diff --git a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt index c2da826d49b..883c02b8f3d 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt +++ b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt @@ -78,6 +78,16 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "jet_smoothing_example.cpp" ) create_single_source_cgal_program( "normal_estimation.cpp" ) create_single_source_cgal_program( "edges_example.cpp" ) + + # Executables that require libpointmatcher + find_package(libpointmatcher) + if (libpointmatcher_FOUND) + include_directories(SYSTEM ${libpointmatcher_INCLUDE_DIR}) + create_single_source_cgal_program( "registration_with_pointmatcher.cpp" ) + else() + message(STATUS "NOTICE : the registration_with_pointmatcher test requires libpointmatcher and will not be compiled.") + endif() + else() message(STATUS "NOTICE: Some of the executables in this directory need Eigen 3.1 (or greater) and will not be compiled.") diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp index 845102e5ac7..7e6ea824600 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp @@ -1,4 +1,22 @@ -// TODO: Copyright info +// Copyright (c) 2019 GeometryFactory(France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// You can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0+ +// +// Author(s) : Necip Fazil Yildiran #include #include @@ -51,22 +69,21 @@ int main(int argc, const char** argv) return EXIT_FAILURE; } input.close(); - - // TODO: Another example with default settings, refering to default settings in doc // // Prepare ICP config // using CGAL::pointmatcher::ICP_config; - // TODO: Refer to https://github.com/ethz-asl/libpointmatcher/blob/master/doc/Configuration.md while doc + // Possible config modules/components: https://libpointmatcher.readthedocs.io/en/latest/Configuration/#configuration-of-an-icp-chain + // See documentation of optional named parameters for CGAL PM ICP configuration / pointmatcher config module mapping - // Prepare point set 1 filters (PM::ReadingDataPointsFilters) + // Prepare point set 1 filters (PM::ReferenceDataPointsFilters) std::vector point_set_1_filters; point_set_1_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); point_set_1_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); - // Prepare point set 2 filters (PM::ReferenceDataPointsFilters) + // Prepare point set 2 filters (PM::ReadingDataPointsFilters) std::vector point_set_2_filters; point_set_2_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); point_set_2_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); @@ -90,14 +107,14 @@ int main(int argc, const char** argv) } ); // Prepare inspector ICP_config inspector { .name="NullInspector" }; -// TODO: Do we really need to set logger through named parameters? (alternative: some other static method) + // Prepare logger ICP_config logger { .name= "FileLogger" }; const K::Aff_transformation_3 identity_transform = K::Aff_transformation_3(CGAL::Identity_transformation()); // EITHER call the ICP registration method pointmatcher to get the transformation to apply to pwns2 - K::Aff_transformation_3 res = + std::pair res = CGAL::pointmatcher::compute_registration_transformation (pwns1, pwns2, params::point_map(Point_map()).normal_map(Normal_map()) @@ -118,6 +135,7 @@ int main(int argc, const char** argv) ); // OR call the ICP registration method from pointmatcher and apply the transformation to pwn2 + bool converged = CGAL::pointmatcher::register_point_sets (pwns1, pwns2, params::point_map(Point_map()).normal_map(Normal_map()) @@ -130,9 +148,9 @@ int main(int argc, const char** argv) .logger(logger), params::point_map(Point_map()).normal_map(Normal_map()) .point_set_filters(point_set_2_filters) - .transformation(res) /* pass the above computed transformation as initial transformation. - * as a result, the registration will require less iterations to converge. - * */ + .transformation(res.first) /* pass the above computed transformation as initial transformation. + * as a result, the registration will require less iterations to converge. + * */ ); std::ofstream out("pwns2_aligned.ply"); diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index 8790b6572ab..5eec955e6c8 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -1,4 +1,22 @@ -// TODO: Copyright info +// Copyright (c) 2019 GeometryFactory(France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// You can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0+ +// +// Author(s) : Necip Fazil Yildiran #ifndef CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H #define CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H @@ -26,8 +44,24 @@ namespace pointmatcher { template using ICP = typename PointMatcher::ICP; +/*! + \ingroup PkgPointSetProcessing3Algorithms + + \brief The class `ICP_config` is designed to handle preparing and passing configurations + to the registration methods `CGAL::pointmatcher::compute_registration_transformation()` + and `CGAL::pointmatcher::register_point_sets()`. + + \details A configuration corresponds to a component of a configuration module + of \ref thirdpartylibpointmatcher library. The name and the parameters of any + configuration for the corresponding registration methods are directly passed + to \ref thirdpartylibpointmatcher library to be parsed and registered at the + \ref thirdpartylibpointmatcher side. + */ struct ICP_config { + /// The name of the configuration component std::string name; + + /// The set of (parameter name, parameter value) pairs as a map std::map params; }; @@ -51,7 +85,8 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) icp.setDefault(); - ICP_config null_config { .name = "_null_pm_config_in_cgal" }; + const ICP_config null_config { .name = "_null_pm_config_in_cgal" }; + const std::vector null_config_chain { null_config }; auto is_null_config = [&](const ICP_config& c) { return !c.name.compare(null_config.name); }; // In CGAL, point_set_1 is the reference while point_set_2 is the data @@ -59,24 +94,39 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) // Therefore, filter params from np1 applies to reference data points while params from np2 applies to reading data points // np1.point_set_filters -> PM::ReferenceDataPointsFilter - auto reference_data_points_filter_configs = choose_param(get_param(np1, internal_np::point_set_filters), std::vector()); - for(const auto& conf : reference_data_points_filter_configs) - { - try { - icp.referenceDataPointsFilters.push_back( PM::get().DataPointsFilterRegistrar.create(conf.name, conf.params) ); - } catch(typename PointMatcherSupport::InvalidElement& error) { - dump_invalid_point_matcher_config_exception_msg(error); + auto reference_data_points_filter_configs = choose_param(get_param(np1, internal_np::point_set_filters), null_config_chain); + if(!reference_data_points_filter_configs.empty() && is_null_config(*reference_data_points_filter_configs.cbegin())) { + // No config provided: use default values as been set above, do nothing + ; + } else { + // Some config chain is given: clear default values and use the provided configs + icp.referenceDataPointsFilters.clear(); + + for(const auto& conf : reference_data_points_filter_configs) + { + try { + icp.referenceDataPointsFilters.push_back( PM::get().DataPointsFilterRegistrar.create(conf.name, conf.params) ); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } } } - // np2.point_set_filters -> PM::ReadingDataPointsFilters - auto reading_data_points_filter_configs = choose_param(get_param(np2, internal_np::point_set_filters), std::vector()); - for(const auto& conf : reading_data_points_filter_configs) - { - try { - icp.readingDataPointsFilters.push_back( PM::get().DataPointsFilterRegistrar.create(conf.name, conf.params) ); - } catch(typename PointMatcherSupport::InvalidElement& error) { - dump_invalid_point_matcher_config_exception_msg(error); + auto reading_data_points_filter_configs = choose_param(get_param(np2, internal_np::point_set_filters), null_config_chain); + if(!reading_data_points_filter_configs.empty() && is_null_config(*reading_data_points_filter_configs.cbegin())) { + // No config provided: use default values as been set above, do nothing + ; + } else { + // Some config chain is given: clear default values and use the provided configs + icp.readingDataPointsFilters.clear(); + + for(const auto& conf : reading_data_points_filter_configs) + { + try { + icp.readingDataPointsFilters.push_back( PM::get().DataPointsFilterRegistrar.create(conf.name, conf.params) ); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } } } @@ -92,13 +142,21 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) } // Outlier Filters - auto outlier_filters_config = choose_param(get_param(np1, internal_np::outlier_filters), std::vector()); - for(const auto& conf : outlier_filters_config) - { - try { - icp.outlierFilters.push_back( PM::get().OutlierFilterRegistrar.create(conf.name, conf.params) ); - } catch(typename PointMatcherSupport::InvalidElement& error) { - dump_invalid_point_matcher_config_exception_msg(error); + auto outlier_filters_config = choose_param(get_param(np1, internal_np::outlier_filters), null_config_chain); + if(!outlier_filters_config.empty() && is_null_config(*outlier_filters_config.cbegin())) { + // No config provided: use default values as been set above, do nothing + ; + } else { + // Some config chain is given: clear default values and use the provided configs + icp.outlierFilters.clear(); + + for(const auto& conf : outlier_filters_config) + { + try { + icp.outlierFilters.push_back( PM::get().OutlierFilterRegistrar.create(conf.name, conf.params) ); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } } } @@ -114,13 +172,21 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) } // Transformation Checkers - auto transformation_checkers_config = choose_param(get_param(np1, internal_np::transformation_checkers), std::vector()); - for(const auto& conf : transformation_checkers_config) - { - try { - icp.transformationCheckers.push_back( PM::get().TransformationCheckerRegistrar.create(conf.name, conf.params) ); - } catch(typename PointMatcherSupport::InvalidElement& error) { - dump_invalid_point_matcher_config_exception_msg(error); + auto transformation_checkers_config = choose_param(get_param(np1, internal_np::transformation_checkers), null_config_chain); + if(!transformation_checkers_config.empty() && is_null_config(*transformation_checkers_config.cbegin())) { + // No config provided: use default values as been set above, do nothing + ; + } else { + // Some config chain is given: clear default values and use the provided configs + icp.transformationCheckers.clear(); + + for(const auto& conf : transformation_checkers_config) + { + try { + icp.transformationCheckers.push_back( PM::get().TransformationCheckerRegistrar.create(conf.name, conf.params) ); + } catch(typename PointMatcherSupport::InvalidElement& error) { + dump_invalid_point_matcher_config_exception_msg(error); + } } } @@ -185,7 +251,7 @@ template -typename Kernel::Aff_transformation_3 +std::pair compute_registration_transformation(const PointRange1& range1, const PointRange2& range2, PointMap1 point_map1, PointMap2 point_map2, VectorMap1 vector_map1, VectorMap2 vector_map2, @@ -248,15 +314,18 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 for(int j = 0; j < 4; j++) pm_transform_params(i,j) = initial_transform.m(i,j); + bool converged = false; try { const PM_transform_params prior = pm_transform_params; pm_transform_params = icp(cloud, ref_cloud, prior); + converged = true; } - catch (typename PM::ConvergenceError& error) // TODO: Shall we make it a CGAL exception? + catch (typename PM::ConvergenceError& error) { - std::cerr << "ERROR PM::ICP failed to converge: " << std::endl; + std::cerr << "ERROR CGAL::pointmatcher registration (PM::ICP) failed to converge: " << std::endl; std::cerr << " " << error.what() << std::endl; + converged = false; } // Rigid transformation @@ -278,20 +347,209 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 } #endif - return cgal_transform; + return std::make_pair(cgal_transform, converged); } } // end of namespace internal -// TODO: Document // point_set_1 is reference while point_set_2 is data +/** + \ingroup PkgPointSetProcessing3Algorithms + + Computes the registration of `point_set_2` with respect to `point_set_1` and + returns the corresponding affine transformation. + Registration is computed using the Iterative Closest Point (ICP) algorithm. + \note This function requires the \ref thirdpartylibpointmatcher library. + \tparam PointRange1 is a model of `Range`. The value type of its iterator is + the key type of the named parameter `point_map` in `NamedParameters1`. + \tparam PointRange2 is a model of `Range`. The value type of its iterator is + the key type of the named parameter `point_map` in `NamedParameters2`. + \param point_set_1 input point range used as reference. + \param point_set_2 input point range whose registration w.r.t. `point_set_1` will be computed. + \param np1 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \cgalNamedParamsBegin + \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type + is the value type of the iterator of `PointRange1` and whose value type is + `geom_traits::Point_3`. If this parameter is omitted, + `CGAL::Identity_property_map` is used.\cgalParamEnd + \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key + type is the value type of the iterator of `PointRange1` and whose value + type `geom_traits::Vector_3`.\cgalParamEnd + + \cgalParamBegin{point_set_filters} is a model of `Range`. The value type of + its iterator is `ICP_config`. + + The chain of filters to be applied to the reference point cloud. The reference + point cloud is processed into an intermediate point cloud with the given chain + of filters to be used in the alignment procedure. The chain is organized with + the forward traversal order of the point set filters range. + + The chain of point set filters are applied only once at the beginning of the + ICP procedure, i.e., before the first iteration of the ICP algorithm. + + The filters can have several purposes, including but are not limited to + i) removal of noisy points which render alignment of point clouds difficult, + ii) removal of redundant points so as to speed up alignment, iii) addition + of descriptive information to the points such as a surface normal vector, + or the direction from the point to the sensor. + + Corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `readingDataPointsFilters` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `RandomSamplingDataPointsFilter` is used. + \cgalParamEnd + + \cgalParamBegin{matcher} is a model of `ICP_config`. + The method used for matching (linking) the points from `point_set_2`, to the + points in the reference cloud, `point_set_1`. + + Corresponds to `matcher` configuration module of \ref thirdpartylibpointmatcher + library. The matcher should be chosen and set from possible components of + the `matcher` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `KDTreeMatcher` is used. + \cgalParamEnd + + + \cgalParamBegin{outlier_filters} is a model of `Range`. The value type of + its iterator is `ICP_config`. + The chain of filters to be applied to the matched (linked) point clouds after + each processing iteration of the ICP algorithm to remove the links which do not + correspond to true point correspondences. The outliers are rejected. Points + with no link are ignored in the subsequent error minimization step. + The chain is organized with the forward traversal order of the outlier filters + range. + + Corresponds to `outlierFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `outlierFilters` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `TrimmedDistOutlierFilter` is used. + \cgalParamEnd + + \cgalParamBegin{error_minimizer} is a model of `ICP_config`. + The error minimizer that computes a transformation matrix such as to minimize + the error between the point sets. + + Corresponds to `errorMinimizer` configuration module of \ref thirdpartylibpointmatcher + library. The error minimizer should be chosen and set from possible components of + the `errorMinimizer` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `PointToPlaneErrorMinimizer` is used. + \cgalParamEnd + + \cgalParamBegin{transformation_checkers} is a model of `Range`. The value type of + its iterator is `ICP_config`. + The chain of transformation checkers. A transformation checker can stop the + iteration depending on the conditions it defines. + + The chain is organized with the forward traversal order of the transformation + checkers range. + + Corresponds to `transformationCheckers` configuration module of \ref thirdpartylibpointmatcher + library. The transformation checkers should be chosen and set from possible components of + the `transformationCheckers` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, the chain of `CounterTransformationChecker` and + `DifferentialTransformationChecker` is used. + \cgalParamEnd + + \cgalParamBegin{inspector} is a model of `ICP_config`. + The inspector allows to log data at different steps for analysis. Inspectors + typically provide deeper scrutiny than the logger. + + Corresponds to `inspector` configuration module of \ref thirdpartylibpointmatcher + library. The inspector should be chosen and set from possible components of + the `inspector` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `NullInspector` is used. + \cgalParamEnd + + \cgalParamBegin{logger} is a model of `ICP_config`. + The method for logging information regarding the registration process outputted + by \ref thirdpartylibpointmatcher library. The logs generated by CGAL library + does not get effected by this configuration. + + Corresponds to `logger` configuration module of \ref thirdpartylibpointmatcher + library. The logger should be chosen and set from possible components of + the `logger` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `NullLogger` is used. + \cgalParamEnd + + \cgalNamedParamsEnd + + \param np2 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \cgalNamedParamsBegin + \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type + is the value type of the iterator of `PointRange2` and whose value type is + `geom_traits::Point_3`. If this parameter is omitted, + `CGAL::Identity_property_map` is used.\cgalParamEnd + \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key + type is the value type of the iterator of `PointRange2` and whose value + type `geom_traits::Vector_3`.\cgalParamEnd + + \cgalParamBegin{point_set_filters} is a model of `Range`. The value type of + its iterator is `ICP_config`. + + The chain of filters to be applied to the point cloud, `point_set_2`. The + point cloud is processed into an intermediate point cloud with the given chain + of filters to be used in the alignment procedure. The chain is organized with + the forward traversal order of the point set filters range. + + The chain of point set filters are applied only once at the beginning of the + ICP procedure, i.e., before the first iteration of ICP algorithm. + + The filters can have several purposes, including but are not limited to + i) removal of noisy points which render alignment of point clouds difficult, + ii) removal of redundant points so as to speed up alignment, iii) addition + of descriptive information to the points such as a surface normal vector, + or the direction from the point to the sensor. + + Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `referenceDataPointsFilters` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `SamplingSurfaceNormalDataPointsFilter` is used. + \cgalParamEnd + + \cgalParamBegin{transformation} The affine transformation that is used as the + initial transformation for `point_set_2`. + + If this parameter is omitted, identity transformation is used. + \cgalParamEnd + + \cgalNamedParamsEnd + \return a pair containing the affine transformation that should be applied + to `point_set_2` to make it registered w.r.t. `point_set_1` and the + boolean value indicating if the registration converged. The second + of the pair is `true` if converged, `false` otherwise. A log why it failed to + converge is written to `std::cerr` if the registration cannot converge. +*/ template #ifdef DOXYGEN_RUNNING -geom_traits::Aff_transformation_3 +std::pair #else -typename CGAL::Point_set_processing_3::GetK - ::Kernel::Aff_transformation_3 +std::pair + ::Kernel::Aff_transformation_3, bool> #endif compute_registration_transformation (const PointRange1& point_set_1, const PointRange2& point_set_2, const NamedParameters1& np1, const NamedParameters2& np2) @@ -337,8 +595,8 @@ compute_registration_transformation (const PointRange1& point_set_1, const Point // convenience overloads template -typename CGAL::Point_set_processing_3::GetK - ::Kernel::Aff_transformation_3 +std::pair + ::Kernel::Aff_transformation_3, bool> compute_registration_transformation(const PointRange1& point_set_1, const PointRange2& point_set_2, const NamedParameters1& np1) { @@ -347,9 +605,9 @@ compute_registration_transformation(const PointRange1& point_set_1, const PointR } template -typename CGAL::Point_set_processing_3::GetK > - ::Kernel::Aff_transformation_3 + ::Kernel::Aff_transformation_3, bool> compute_registration_transformation(const PointRange1& point_set_1, const PointRange2& point_set_2) { namespace params = CGAL::Point_set_processing_3::parameters; @@ -361,4 +619,4 @@ compute_registration_transformation(const PointRange1& point_set_1, const PointR } } // end of namespace CGAL::pointmatcher -#endif // CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H +#endif // CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H \ No newline at end of file diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h index 991aa577bab..0a49b15d17c 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h @@ -1,4 +1,22 @@ -// TODO: Copyright info +// Copyright (c) 2019 GeometryFactory(France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// You can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0+ +// +// Author(s) : Necip Fazil Yildiran #ifndef CGAL_POINTMATCHER_REGISTER_POINT_SETS_H #define CGAL_POINTMATCHER_REGISTER_POINT_SETS_H @@ -20,10 +38,201 @@ namespace CGAL { namespace pointmatcher { -// TODO: Document +// point_set_1 is reference while point_set_2 is data +/** + \ingroup PkgPointSetProcessing3Algorithms + + Computes the registration of `point_set_2` with respect to `point_set_1` and + applies it. + + Registration is computed using the Iterative Closest Point (ICP) algorithm. + + \note This function requires the \ref thirdpartylibpointmatcher library. + + \tparam PointRange1 is a model of `Range`. The value type of its iterator is + the key type of the named parameter `point_map` in `NamedParameters1`. + \tparam PointRange2 is a model of `Range`. The value type of its iterator is + the key type of the named parameter `point_map` in `NamedParameters2`. + + \param point_set_1 input point range used as reference. + \param point_set_2 input point range whose registration w.r.t. `point_set_1` will be computed. + \param np1 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + + \cgalNamedParamsBegin + \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type + is the value type of the iterator of `PointRange1` and whose value type is + `geom_traits::Point_3`. If this parameter is omitted, + `CGAL::Identity_property_map` is used.\cgalParamEnd + \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key + type is the value type of the iterator of `PointRange1` and whose value + type `geom_traits::Vector_3`.\cgalParamEnd + + \cgalParamBegin{point_set_filters} is a model of `Range`. The value type of + its iterator is `ICP_config`. + + The chain of filters to be applied to the reference point cloud. The reference + point cloud is processed into an intermediate point cloud with the given chain + of filters to be used in the alignment procedure. The chain is organized with + the forward traversal order of the point set filters range. + + The chain of point set filters are applied only once at the beginning of the + ICP procedure, i.e., before the first iteration of the ICP algorithm. + + The filters can have several purposes, including but are not limited to + i) removal of noisy points which render alignment of point clouds difficult, + ii) removal of redundant points so as to speed up alignment, iii) addition + of descriptive information to the points such as a surface normal vector, + or the direction from the point to the sensor. + + Corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `readingDataPointsFilters` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `RandomSamplingDataPointsFilter` is used. + \cgalParamEnd + + \cgalParamBegin{matcher} is a model of `ICP_config`. + The method used for matching (linking) the points from `point_set_2`, to the + points in the reference cloud, `point_set_1`. + + Corresponds to `matcher` configuration module of \ref thirdpartylibpointmatcher + library. The matcher should be chosen and set from possible components of + the `matcher` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `KDTreeMatcher` is used. + \cgalParamEnd + + \cgalParamBegin{outlier_filters} is a model of `Range`. The value type of + its iterator is `ICP_config`. + The chain of filters to be applied to the matched (linked) point clouds after + each processing iteration of the ICP algorithm to remove the links which do not + correspond to true point correspondences. The outliers are rejected. Points + with no link are ignored in the subsequent error minimization step. + The chain is organized with the forward traversal order of the outlier filters + range. + + Corresponds to `outlierFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `outlierFilters` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `TrimmedDistOutlierFilter` is used. + \cgalParamEnd + + \cgalParamBegin{error_minimizer} is a model of `ICP_config`. + The error minimizer that computes a transformation matrix such as to minimize + the error between the point sets. + + Corresponds to `errorMinimizer` configuration module of \ref thirdpartylibpointmatcher + library. The error minimizer should be chosen and set from possible components of + the `errorMinimizer` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `PointToPlaneErrorMinimizer` is used. + \cgalParamEnd + + \cgalParamBegin{transformation_checkers} is a model of `Range`. The value type of + its iterator is `ICP_config`. + The chain of transformation checkers. A transformation checker can stop the + iteration depending on the conditions it defines. + + The chain is organized with the forward traversal order of the transformation + checkers range. + + Corresponds to `transformationCheckers` configuration module of \ref thirdpartylibpointmatcher + library. The transformation checkers should be chosen and set from possible components of + the `transformationCheckers` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, the chain of `CounterTransformationChecker` and + `DifferentialTransformationChecker` is used. + \cgalParamEnd + + \cgalParamBegin{inspector} is a model of `ICP_config`. + The inspector allows to log data at different steps for analysis. Inspectors + typically provide deeper scrutiny than the logger. + + Corresponds to `inspector` configuration module of \ref thirdpartylibpointmatcher + library. The inspector should be chosen and set from possible components of + the `inspector` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `NullInspector` is used. + \cgalParamEnd + + \cgalParamBegin{logger} is a model of `ICP_config`. + The method for logging information regarding the registration process outputted + by \ref thirdpartylibpointmatcher library. The logs generated by CGAL library + does not get effected by this configuration. + + Corresponds to `logger` configuration module of \ref thirdpartylibpointmatcher + library. The logger should be chosen and set from possible components of + the `logger` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `NullLogger` is used. + \cgalParamEnd + + \cgalNamedParamsEnd + + \param np2 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. + \cgalNamedParamsBegin + \cgalParamBegin{point_map} a model of `ReadablePropertyMap` whose key type + is the value type of the iterator of `PointRange2` and whose value type is + `geom_traits::Point_3`. If this parameter is omitted, + `CGAL::Identity_property_map` is used.\cgalParamEnd + \cgalParamBegin{normal_map} a model of `ReadablePropertyMap` whose key + type is the value type of the iterator of `PointRange2` and whose value + type `geom_traits::Vector_3`.\cgalParamEnd + + \cgalParamBegin{point_set_filters} is a model of `Range`. The value type of + its iterator is `ICP_config`. + + The chain of filters to be applied to the point cloud, `point_set_2`. The + point cloud is processed into an intermediate point cloud with the given chain + of filters to be used in the alignment procedure. The chain is organized with + the forward traversal order of the point set filters range. + + The chain of point set filters are applied only once at the beginning of the + ICP procedure, i.e., before the first iteration of ICP algorithm. + + The filters can have several purposes, including but are not limited to + i) removal of noisy points which render alignment of point clouds difficult, + ii) removal of redundant points so as to speed up alignment, iii) addition + of descriptive information to the points such as a surface normal vector, + or the direction from the point to the sensor. + + Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + library. The filters should be chosen and set from possible components of + the `referenceDataPointsFilters` configuration module. + See libpointmatcher documentation + for possible configurations. + + If this parameter is omitted, `SamplingSurfaceNormalDataPointsFilter` is used. + \cgalParamEnd + + \cgalParamBegin{transformation} The affine transformation that is used as the + initial transformation for `point_set_2`. + + If this parameter is omitted, identity transformation is used. + \cgalParamEnd + + \cgalNamedParamsEnd + \return `true` if registration is converged, `false` otherwise. A log why it + failed to converge is written to `std::cerr` if the registration cannot converge. +*/ template -void // TODO: Can we return some sort of score? +bool register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, const NamedParameters1& np1, const NamedParameters2& np2) { @@ -34,7 +243,7 @@ register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, typedef typename PSP::GetK::Kernel Kernel; // compute registration transformation - typename Kernel::Aff_transformation_3 res = + std::pair res = compute_registration_transformation(point_set_1, point_set_2, np1, np2); // property map type of point_set_2 @@ -45,14 +254,16 @@ register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, for (typename PointRange2::iterator it=point_set_2.begin(), end=point_set_2.end(); it!=end; ++it) { - put(point_map2, *it, get(point_map2, *it).transform(res)); + put(point_map2, *it, get(point_map2, *it).transform(res.first)); } + + return res.second; } // convenience overloads template -void // TODO: Can we return some sort of score? +bool register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2, const NamedParameters1& np1) { @@ -61,7 +272,7 @@ register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2, } template -void // TODO: Can we return some sort of score? +bool register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2) { namespace params = CGAL::Point_set_processing_3::parameters; From b1ce7d98ee31fc42aeb637b60b71eb66268301f3 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Fri, 26 Jul 2019 14:24:39 +0300 Subject: [PATCH 27/53] Removed unnecessary copyright info from psp examples --- ...tion_with_opengr_pointmatcher_pipeline.cpp | 3 --- .../registration_with_pointmatcher.cpp | 20 ------------------- 2 files changed, 23 deletions(-) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp index fa3802e4e2f..07b9efd3aab 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp @@ -1,6 +1,3 @@ -// TODO: Copyright info -// TODO: Requires both OpenGR and PointMatcher wrappers. - #include #include #include diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp index 7e6ea824600..f285710a94e 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp @@ -1,23 +1,3 @@ -// Copyright (c) 2019 GeometryFactory(France). -// All rights reserved. -// -// This file is part of CGAL (www.cgal.org). -// You can redistribute it and/or modify it under the terms of the GNU -// General Public License as published by the Free Software Foundation, -// either version 3 of the License, or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// $URL$ -// $Id$ -// SPDX-License-Identifier: GPL-3.0+ -// -// Author(s) : Necip Fazil Yildiran - #include #include #include From 67bf1d4f7c7d8bb71b154d0cb21487c2058be784 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Sun, 28 Jul 2019 18:46:30 +0300 Subject: [PATCH 28/53] Fix OpenGR wrapper: instantiate sampler class using PointType --- .../include/CGAL/OpenGR/compute_registration_transformation.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index 7defea458bf..422194b0adc 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -98,7 +98,7 @@ compute_registration_transformation(const PointRange1& range1, const PointRan // TODO: see if should allow user to change those types typedef Eigen::Matrix MatrixType; - typedef gr::UniformDistSampler SamplerType; + typedef gr::UniformDistSampler SamplerType; typedef gr::DummyTransformVisitor TrVisitorType; typedef gr::Match4pcsBase Date: Sun, 28 Jul 2019 21:35:17 +0300 Subject: [PATCH 29/53] Link libpointmatcher libs with libpointmatcher wrapper examples --- .../examples/Point_set_processing_3/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt index ec5fae34ff5..3b33e1d7f6c 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt +++ b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt @@ -84,6 +84,7 @@ if ( CGAL_FOUND ) if (libpointmatcher_FOUND) include_directories(SYSTEM ${libpointmatcher_INCLUDE_DIR}) create_single_source_cgal_program( "registration_with_pointmatcher.cpp" ) + target_link_libraries(registration_with_pointmatcher PRIVATE ${libpointmatcher_LIBRARIES}) else() message(STATUS "NOTICE : the registration_with_pointmatcher test requires libpointmatcher and will not be compiled.") endif() @@ -102,6 +103,7 @@ if ( CGAL_FOUND ) # include_directories(SYSTEM ${libpointmatcher_INCLUDE_DIR}) # include_directories(SYSTEM ${OpenGR_INCLUDE_DIR}) create_single_source_cgal_program( "registration_with_opengr_pointmatcher_pipeline.cpp" ) + target_link_libraries(registration_with_opengr_pointmatcher_pipeline PRIVATE ${libpointmatcher_LIBRARIES}) else() message(STATUS "NOTICE: registration_with_opengr_pointmatcher_pipeline requires libpointmatcher and OpenGR, and will not be compiled.") endif() From 44b7efaa5a518b575c3d307639ea5e2b99a842ec Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Sun, 28 Jul 2019 21:36:38 +0300 Subject: [PATCH 30/53] Fix opengr/pointmatcher registration example: register point sets --- ...registration_with_opengr_pointmatcher_pipeline.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp index 07b9efd3aab..3e75c7f335e 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include #include @@ -63,14 +63,13 @@ int main(int argc, const char** argv) std::cout << "Computing registration transformation using PointMatcher ICP, " << "taking transformation computed by OpenGR Super4PCS as initial transformation.." << std::endl; // Then, compute registration transformation using PointMatcher ICP, taking transformation computed - // by OpenGR as initial transformation - res = - CGAL::pointmatcher::compute_registration_transformation + // by OpenGR as initial transformation, and apply the transformation to pwns2 + // bool converged = + CGAL::pointmatcher::register_point_sets (pwns1, pwns2, params::point_map(Point_map()).normal_map(Normal_map()), params::point_map(Point_map()).normal_map(Normal_map()) - .transformation(res) - ); + .transformation(res)); std::ofstream out("pwns2_aligned.ply"); if (!out || From e545f9ae5a6a1752ab03b943c992983ba336aaa2 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Wed, 14 Aug 2019 00:06:09 +0300 Subject: [PATCH 31/53] Improved doc for OpenGR/pointmatcher wrappers; edited Installation/CHANGES.md --- Installation/CHANGES.md | 12 ++++++++++ .../Point_set_processing_3.txt | 23 +++++++++++-------- .../include/CGAL/OpenGR/register_point_sets.h | 4 ++-- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index 3d1743bfa56..2c8752de553 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -47,6 +47,18 @@ Release date: September 2019 `CGAL::jet_estimate_normals()`, `CGAL::jet_smooth_point_set()`, `CGAL::mst_orient_normals()`, `CGAL::pca_estimate_normals()` and `CGAL::remove_outliers()`. + - Added wrapper functions for registration: + - `CGAL::OpenGR::compute_registration_transformation()` computes the registration transformation + for two point sets using Super4PCS algorithm implemented in the third party library OpenGR. + - `CGAL::OpenGR::register_point_sets()` computes the registration transformation for two point + sets using Super4PCS algorithm implemented in the third party library OpenGR, and registers + the points sets by transforming the data point set using the computed transformation. + - `CGAL::pointmatcher::compute_registration_transformation()` computes the registration + transformation for two point sets using ICP algorithm implemented in the third party library + libpointmatcher. + - `CGAL::pointmatcher::register_point_sets()` computes the registration transformation for two point + sets using ICP algorithm implemented in the third party library libpointmatcher, and registers + the points sets by transforming the data point set using the computed transformation. ### Polygon Mesh Processing - Added the function `CGAL::Polygon_mesh_processing::centroid()`, which computes diff --git a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt index fa0fbbb08de..b31e383499b 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt @@ -316,8 +316,8 @@ points in the domain. \section Point_set_processing_3Registration Registration -\cgal provides two wrappers for the \ref thirdpartyOpenGR library -\cgalCite{cgal:m-ogr-17}, and two wrappers for the \ref thirdpartylibpointmatcher +\cgal provides 2 functions as wrapper for the \ref thirdpartyOpenGR library +\cgalCite{cgal:m-ogr-17}, and 2 functions as wrapper for the \ref thirdpartylibpointmatcher library : - `CGAL::OpenGR::compute_registration_transformation()` computes the @@ -326,35 +326,40 @@ registration of one point set w.r.t. another in the form of a \cgalCite{cgal:mam-sffgp-14}; - `CGAL::OpenGR::register_point_sets()` computes the registration of -one point set w.r.t. another and directly aligns it to it. +one point set w.r.t. another and directly aligns it to it; - `CGAL::pointmatcher::compute_registration_transformation()` computes the registration of one point set w.r.t. another in the form of a `CGAL::Aff_transformation_3` object, using ICP (Iterative Closest Point) -algorithm \cgalCite{cgal:mam-sffgp-14}; +algorithm; - `CGAL::pointmatcher::register_point_sets()` computes the registration of one point set w.r.t. another and directly aligns it to it. -\subsection Point_set_processing_3Example_registration Example +\subsection Point_set_processing_3Examples_registration Examples + +\subsubsection Point_set_processing_3Examples_registration_OpenGR OpenGR The following example reads two point sets and aligns them using the -\ref thirdpartyOpenGR library, using the Super4PCS algorithm : +\ref thirdpartyOpenGR library, using the Super4PCS algorithm: \cgalExample{Point_set_processing_3/registration_with_OpenGR.cpp} +\subsubsection Point_set_processing_3Examples_registration_PointMatcher PointMatcher + The following example reads two point sets and aligns them using the \ref thirdpartylibpointmatcher library, using the ICP algorithm. It also shows how -to customize ICP algorithm by configurations: +to customize ICP algorithm by using possible configurations: \cgalExample{Point_set_processing_3/registration_with_pointmatcher.cpp} +\subsubsection Point_set_processing_3Examples_registration_OpenGR_PointMatcher_Pipeline OpenGR/PointMatcher Pipeline + The following example reads two point sets and aligns them by using both \ref thirdpartyOpenGR and \ref thirdpartylibpointmatcher libraries, respectively. It depicts a use case where a coarse estimation of a registration transformation is done using the Super4PCS algorithm. Then, a fine registration from this coarse registration using the ICP algorithm. -\cgalExample{Point_set_processing_3/registration_with_pointmatcher.cpp} +\cgalExample{Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp} -registration_with_opengr_pointmatcher_pipeline \section Point_set_processing_3OutlierRemoval Outlier Removal Function `remove_outliers()` deletes a user-specified fraction diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index 12e065cba6b..b3985a09626 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -78,7 +78,7 @@ register_point_sets(const PointRange1& range1, PointRange2& range2, applies it. Registration is computed using the Super4PCS algorithm - \cgalCite{cgal:mam-sffgp-14}. Parameters documentation is copy-pasted from [the official documentation of OpenCR](https://storm-irit.github.io/OpenGR/a00012.html). For more details on this method, please refer to it. + \cgalCite{cgal:mam-sffgp-14}. Parameters documentation is copy-pasted from [the official documentation of OpenGR](https://storm-irit.github.io/OpenGR/a00012.html). For more details on this method, please refer to it. \note This function requires the \ref thirdpartyOpenGR library. @@ -234,4 +234,4 @@ register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2) } } // end of namespace CGAL::OpenGR -#endif // CGAL_OPENGR_REGISTER_POINT_SETS_H \ No newline at end of file +#endif // CGAL_OPENGR_REGISTER_POINT_SETS_H From eb8f08dd92d5a602f58cbd2f8292a5ae0e90a7a9 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Sun, 1 Sep 2019 20:47:45 -0400 Subject: [PATCH 32/53] Improved doc for OpenGR/PointMathcher wrappers --- .../Point_set_processing_3.txt | 276 +++++++++++++++++- .../doc/Point_set_processing_3/examples.txt | 2 +- ...egistration_view1_hippo1_hippo2_opengr.png | Bin 0 -> 16108 bytes ...o1_hippo2_opengr_pointmatcher_pipeline.png | Bin 0 -> 15893 bytes ...ation_view1_hippo1_hippo2_pointmatcher.png | Bin 0 -> 16879 bytes ...ation_view1_hippo1_hippo2_unregistered.png | Bin 0 -> 10619 bytes .../fig/registration_view1_hippo2_opengr.png | Bin 0 -> 12165 bytes ...w1_hippo2_opengr_pointmatcher_pipeline.png | Bin 0 -> 11534 bytes ...registration_view1_hippo2_pointmatcher.png | Bin 0 -> 12331 bytes ...registration_view1_hippo2_unregistered.png | Bin 0 -> 7133 bytes .../fig/super4PCS_overlap.png | Bin 0 -> 37980 bytes .../compute_registration_transformation.h | 4 +- .../include/CGAL/OpenGR/register_point_sets.h | 4 +- .../compute_registration_transformation.h | 10 +- .../CGAL/pointmatcher/register_point_sets.h | 10 +- 15 files changed, 278 insertions(+), 28 deletions(-) create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr_pointmatcher_pipeline.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_pointmatcher.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_unregistered.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_opengr.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_opengr_pointmatcher_pipeline.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_pointmatcher.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_unregistered.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/super4PCS_overlap.png diff --git a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt index b31e383499b..d8525dfde5c 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt @@ -7,7 +7,7 @@ \cgalAutoToc -\authors Pierre Alliez, Simon Giraudot, Clément Jamin, Florent Lafarge, Quentin Mérigot, Jocelyn Meyron, Laurent Saboret, Nader Salman, Shihao Wu +\authors Pierre Alliez, Simon Giraudot, Clément Jamin, Florent Lafarge, Quentin Mérigot, Jocelyn Meyron, Laurent Saboret, Nader Salman, Shihao Wu, Necip Fazil Yildiran \section Point_set_processing_3Introduction Introduction @@ -23,8 +23,8 @@ In the context of surface reconstruction we can position the elements of this component along the common surface reconstruction pipeline (\cgalFigureRef{Point_set_processing_3figpipeline}) which involves the following steps: --# Scanning and scan alignment to produce a set of -points or points with normals (alignment is not covered in \cgal); +-# Scanning and scan registration to produce a set of +points or points with normals; -# Outlier removal; -# Simplification to reduce the number of input points; -# Smoothing to reduce noise in the input data; @@ -272,7 +272,7 @@ number of points (or the minimal local range) such that the subset of points has the appearance of a curve in 2D or a surface in 3D \cgalCite{cgal:gcsa-nasr-13}. -\cgal provides 2 functions that automatically estimate the scale of a +\cgal provides two functions that automatically estimate the scale of a 2D point set sampling a curve or a 3D point set sampling a surface: - `estimate_global_k_neighbor_scale()` @@ -285,7 +285,7 @@ K neighbor scale or a range scale. In some specific cases, the scale of a point set might not be homogeneous (for example if the point set contains variable -noise). \cgal also provides 2 functions that automatically estimate +noise). \cgal also provides two functions that automatically estimate the scales of a point set at a set of user-defined query points: - `estimate_local_k_neighbor_scales()` @@ -316,8 +316,8 @@ points in the domain. \section Point_set_processing_3Registration Registration -\cgal provides 2 functions as wrapper for the \ref thirdpartyOpenGR library -\cgalCite{cgal:m-ogr-17}, and 2 functions as wrapper for the \ref thirdpartylibpointmatcher +\cgal provides two functions as wrapper for the \ref thirdpartyOpenGR library +\cgalCite{cgal:m-ogr-17}, and two functions as wrapper for the \ref thirdpartylibpointmatcher library : - `CGAL::OpenGR::compute_registration_transformation()` computes the @@ -330,28 +330,188 @@ one point set w.r.t. another and directly aligns it to it; - `CGAL::pointmatcher::compute_registration_transformation()` computes the registration of one point set w.r.t. another in the form of a -`CGAL::Aff_transformation_3` object, using ICP (Iterative Closest Point) +`CGAL::Aff_transformation_3` object, using the ICP (Iterative Closest Point) algorithm; - `CGAL::pointmatcher::register_point_sets()` computes the registration of one point set w.r.t. another and directly aligns it to it. -\subsection Point_set_processing_3Examples_registration Examples - -\subsubsection Point_set_processing_3Examples_registration_OpenGR OpenGR +\subsection Point_set_processing_3Examples_registration_OpenGR OpenGR Example The following example reads two point sets and aligns them using the \ref thirdpartyOpenGR library, using the Super4PCS algorithm: \cgalExample{Point_set_processing_3/registration_with_OpenGR.cpp} -\subsubsection Point_set_processing_3Examples_registration_PointMatcher PointMatcher +\cgalFigureRef{Point_set_processing_3tableRegistrationRegistration_visualization_table} demonstrates +visualization of a scan data before and after different registration methods are applied, +including the %OpenGR registration method. To obtain the results for %OpenGR registration +in the visualization table, abovementioned example was used. + +\subsubsection Point_set_processing_3Examples_registration_OpenGR_parameter_number_of_samples Parameter: number_of_samples + +Input clouds are sub-sampled prior exploration, to ensure fast computations. +Super4PCS has a linear complexity w.r.t. the number of input samples, allowing +to use larger values than 4PCS. +Simple geometry with large overlap can be matched with only 200 samples. +However, with Super4PCS, smaller details can be used during the process by using +up to thousands of points. There is no theoretical limit to this parameter; +however, using too large values leads to very a large congruent set, +which requires more time and memory to be explored. + +Using a large number of samples is recommended when: + +- geometrical details are required to perform the matching, for instance to disambiguate +between several similar configurations, + +- the clouds have a very low overlap: using a too sparse sampling can prevent to +have samples in the overlapping area, causing the algorithm to fail, + +- the clouds are very noisy, and require a dense sampling. + +Note that Super4PCS is a global registration algorithm, which finds a good approximate +of the rigid transformation aligning two clouds. Increasing the number of samples +in order to get a fine registration is not optimal: it is usually faster to use +less samples, and refine the transformation using a local algorithm, like the ICP, +or its variant SparseICP. + +\subsubsection Point_set_processing_3Examples_registration_OpenGR_parameter_accuracy Parameter: accuracy + +This parameter controls the registration accuracy: setting a small value means that +the two clouds needs to be very close to be considered as well aligned. It is expressed in scene units. + +A simple way to understand its impact is to consider the computation of the Largest Common Pointset (LCP), +the metric used to verify how much the clouds are aligned. For each transformation matrix produced +by Super4PCS, OpenGR computes the LCP measure by considering a shell around the reference cloud, and +count the percentage of points of the target cloud lying in the shell. The thickness of the shell is +defined by the parameter delta (accuracy). + +Using too wide values will slow down the algorithm by increasing the size of the congruent set, +while using to small values prevents to find a solution. This parameter impacts other steps of +the algorithm, see the paper \cgalCite{cgal:mam-sffgp-14} for more details. + +\subsubsection Point_set_processing_3Examples_registration_OpenGR_parameter_overlap Parameter: overlap + +Ratio of expected overlap between the two point sets: it is ranging between 0 (no overlap) to 1 (100% overlap). + +The overlap parameter controls the size of the basis used for registration, as shown below: + +\cgalFigureBegin{Point_set_processing_3figOpenGR_parameter_overlap,super4PCS_overlap.png} +The effect of varying overlap parameter on the size of the basis used for registration. The overlap is smaller for left (a) than right (b). +\cgalFigureEnd + +Usually, the larger the overlap, the faster the algorithm. +When the overlap is unknown, a simple way to set this parameter is to start from +100% overlap, and decrease the value until obtaining a good result. +Using too small values will slow down the algorithm, and +reduce the accuracy of the result. + +\subsubsection Point_set_processing_3Examples_registration_OpenGR_parameter_maximum_running_time Parameter: maximum_running_time + +Maximum number of seconds after which the algorithm stops. Super4PCS explores the +transformation space to align the two input clouds. Since the exploration is performed +randomly, it is recommended to use a large time value to explore the whole space +(e.g., 1000). + +\subsection Point_set_processing_3Examples_registration_PointMatcher PointMatcher Example The following example reads two point sets and aligns them using the \ref thirdpartylibpointmatcher library, using the ICP algorithm. It also shows how to customize ICP algorithm by using possible configurations: \cgalExample{Point_set_processing_3/registration_with_pointmatcher.cpp} -\subsubsection Point_set_processing_3Examples_registration_OpenGR_PointMatcher_Pipeline OpenGR/PointMatcher Pipeline +\cgalFigureRef{Point_set_processing_3tableRegistrationRegistration_visualization_table} demonstrates +visualization of a scan data before and after different registration methods are applied, +including the PointMatcher registration method. To obtain the results for PointMatcher registration +in the visualization table, abovementioned example was used. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_point_set_filters Parameter: point_set_filters + +The chain of filters to be applied to the point cloud. The +point cloud is processed into an intermediate point cloud with the given chain +of filters to be used in the alignment procedure. The chain is organized with +the forward traversal order of the point set filters range. + +The chain of point set filters are applied only once at the beginning of the +ICP procedure, i.e., before the first iteration of the ICP algorithm. + +The filters can have several purposes, including but are not limited to: + +- removal of noisy points which render alignment of point clouds difficult, + +- removal of redundant points so as to speed up alignment, + +- addition of descriptive information to the points such as a surface normal vector or the direction from the point to the sensor. + +In registration, there are two point clouds in consideration, one of which is the reference point +cloud while the other one is the point cloud that a transformation is computed to register that point +cloud to the reference. The point set filters corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher +library while it corresponds to the `referenceDataPointsFilters` for the other point cloud. +The filters should be chosen and set from possible components of those configuration modules. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_matcher Parameter: matcher + +The method used for matching (linking) the points from to the points in the reference cloud. + +Corresponds to `matcher` configuration module of \ref thirdpartylibpointmatcher +library. The matcher should be chosen and set from possible components of +the `matcher` configuration module. +See libpointmatcher documentation +for possible configurations. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_outlier_filters Parameter: outlier_filters + +The chain of filters to be applied to the matched (linked) point clouds after +each processing iteration of the ICP algorithm to remove the links which do not +correspond to true point correspondences. The outliers are rejected. Points +with no link are ignored in the subsequent error minimization step. +The chain is organized with the forward traversal order of the outlier filters +range. + +Corresponds to `outlierFilters` configuration module of \ref thirdpartylibpointmatcher +library. The filters should be chosen and set from possible components of +the `outlierFilters` configuration module. +See libpointmatcher documentation +for possible configurations. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_error_minimizer Parameter: error_minimizer + +The error minimizer that computes a transformation matrix such as to minimize +the error between the point sets. + +Corresponds to `errorMinimizer` configuration module of \ref thirdpartylibpointmatcher +library. The error minimizer should be chosen and set from possible components of +the `errorMinimizer` configuration module. +See libpointmatcher documentation +for possible configurations. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_inspector Parameter: inspector + +The inspector allows to log data at different steps for analysis. Inspectors +typically provide deeper scrutiny than the logger. + +Corresponds to `inspector` configuration module of \ref thirdpartylibpointmatcher +library. The inspector should be chosen and set from possible components of +the `inspector` configuration module. +See libpointmatcher documentation +for possible configurations. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_logger Parameter: logger + +The method for logging information regarding the registration process outputted +by \ref thirdpartylibpointmatcher library. The logs generated by CGAL library +does not get effected by this configuration. + +Corresponds to `logger` configuration module of \ref thirdpartylibpointmatcher +library. The logger should be chosen and set from possible components of +the `logger` configuration module. +See libpointmatcher documentation +for possible configurations. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_transformation Parameter: transformation + +The affine transformation that is used as the initial transformation for the reference point cloud. + +\subsection Point_set_processing_3Examples_registration_OpenGR_PointMatcher_Pipeline OpenGR/PointMatcher Pipeline Example The following example reads two point sets and aligns them by using both \ref thirdpartyOpenGR and \ref thirdpartylibpointmatcher libraries, respectively. @@ -360,6 +520,93 @@ is done using the Super4PCS algorithm. Then, a fine registration from this coars registration using the ICP algorithm. \cgalExample{Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp} +\cgalFigureRef{Point_set_processing_3tableRegistrationRegistration_visualization_table} demonstrates +visualization of a scan data before and after different registration methods are applied, +including the pipeline of %OpenGR and PointMatcher registration methods. To obtain the results +for the pipeline of %OpenGR and PointMatcher registration methods in the visualization table, +abovementioned example was used. + +\cgalFigureAnchor{Point_set_processing_3tableRegistrationRegistration_visualization_table} + + + + + + + + + + + + + + + + + + + + + + + + + + +
Scan 1 Scan 1 (possibly transformed, green) and Scan 2 (the reference, red)
Unregistered + \cgalFigureBegin{Point_set_processing_3figRegistrationUnregistered_hippo2_view1, registration_view1_hippo2_unregistered.png} + \cgalFigureEnd + + \cgalFigureBegin{Point_set_processing_3figRegistrationUnregistered_hippo1_hippo2_view1, registration_view1_hippo1_hippo2_unregistered.png} + \cgalFigureEnd +
+ Registered + using + %OpenGR + + \cgalFigureBegin{Point_set_processing_3figRegistrationOpenGR_hippo2_view1, registration_view1_hippo2_opengr.png} + \cgalFigureEnd + + \cgalFigureBegin{Point_set_processing_3figRegistrationOpenGR_hippo1_hippo2_view1, registration_view1_hippo1_hippo2_opengr.png} + \cgalFigureEnd +
+ Registered + using + PointMatcher + + \cgalFigureBegin{Point_set_processing_3figRegistrationPointMatcher_hippo2_view1, registration_view1_hippo2_pointmatcher.png} + \cgalFigureEnd + + \cgalFigureBegin{Point_set_processing_3figRegistrationPointMatcher_hippo1_hippo2_view1, registration_view1_hippo1_hippo2_pointmatcher.png} + \cgalFigureEnd +
+ Registered + using + OpenGR+PointMatcher + Pipeline + + \cgalFigureBegin{Point_set_processing_3figRegistrationPipeline_hippo2_view1, registration_view1_hippo2_opengr_pointmatcher_pipeline.png} + \cgalFigureEnd + + \cgalFigureBegin{Point_set_processing_3figRegistrationPipeline_hippo1_hippo2_view1, registration_view1_hippo1_hippo2_opengr_pointmatcher_pipeline.png} + \cgalFigureEnd +
+\cgalFigureCaptionBegin{Point_set_processing_3tableRegistrationRegistration_visualization_table} +Visualization of registered hippo scans with different registration methods. +Two scans are used: red as the reference, green as the one for which the transformation +is computed and applied. To obtain the results, the example code given in +\ref Point_set_processing_3Examples_registration_OpenGR , +\ref Point_set_processing_3Examples_registration_PointMatcher , +\ref Point_set_processing_3Examples_registration_OpenGR_PointMatcher_Pipeline +were applied, respectively. The parameters of the algorithms used to obtain those +results are not optimized for the shown scans; therefore, better parameter choice +might result in better results in terms of registration accuracy for each algorithm +individually. +\cgalFigureCaptionEnd + + + + \section Point_set_processing_3OutlierRemoval Outlier Removal Function `remove_outliers()` deletes a user-specified fraction @@ -708,6 +955,9 @@ Started from GSoC'2013, three new algorithms were implemented by Shihao Wu and C Started from GSoC'2014, Jocelyn Meyron with the help of Quentin Mérigot introduced the computation of the Voronoi covariance measure of a point set, as well as the normal and feature edge estimation functions based on it. Florent Lafarge with the help of Simon Giraudot contributed the point set structuring algorithm. +Started from GSoC'2019, Necip Fazil Yildiran with the help of Nicolas Mellado and Simon Giraudot introduced the wrappers for OpenGR and PointMatcher +libraries that perform registration on two point sets. + */ } /* namespace CGAL */ diff --git a/Point_set_processing_3/doc/Point_set_processing_3/examples.txt b/Point_set_processing_3/doc/Point_set_processing_3/examples.txt index 9535ad50c54..32ee499ff83 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/examples.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/examples.txt @@ -8,7 +8,7 @@ \example Point_set_processing_3/scale_estimation_2d_example.cpp \example Point_set_processing_3/registration_with_OpenGR.cpp \example Point_set_processing_3/registration_with_pointmatcher.cpp -\example Point_set_processing_3/registration_with_OpenGR_pointmatcher_pipeline.cpp +\example Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp \example Point_set_processing_3/remove_outliers_example.cpp \example Point_set_processing_3/grid_simplification_example.cpp \example Point_set_processing_3/grid_simplify_indices.cpp diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr.png new file mode 100644 index 0000000000000000000000000000000000000000..cd2e069f754612755423d560dd647efa69b24f28 GIT binary patch literal 16108 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 literal 0 HcmV?d00001 diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr_pointmatcher_pipeline.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr_pointmatcher_pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..be57be7c9625ed6b65446c0bbf08d5903448cfad GIT binary patch literal 15893 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 MVsfHY!Uh5V57x*w`v3p{ literal 0 HcmV?d00001 diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_unregistered.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_unregistered.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3e445ab81a163c2ef9a4a1baa42ee20bc31351 GIT binary patch literal 10619 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�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 Pf+8>TQMyL*OW^+kb(JXV literal 0 HcmV?d00001 diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_unregistered.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_unregistered.png new file mode 100644 index 0000000000000000000000000000000000000000..89c4be0bc002dbc69903a1c0bc5cd1c154afa7ed GIT binary patch literal 7133 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

2uJwyJd@a&Y&_ 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 documentation for possible configurations. @@ -521,9 +521,9 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 of descriptive information to the points such as a surface normal vector, or the direction from the point to the sensor. - Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + Corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher library. The filters should be chosen and set from possible components of - the `referenceDataPointsFilters` configuration module. + the `readingDataPointsFilters` configuration module. See libpointmatcher documentation for possible configurations. @@ -619,4 +619,4 @@ compute_registration_transformation(const PointRange1& point_set_1, const PointR } } // end of namespace CGAL::pointmatcher -#endif // CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H \ No newline at end of file +#endif // CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h index 0a49b15d17c..c2c1a03fd16 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h @@ -84,9 +84,9 @@ namespace pointmatcher { of descriptive information to the points such as a surface normal vector, or the direction from the point to the sensor. - Corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher library. The filters should be chosen and set from possible components of - the `readingDataPointsFilters` configuration module. + the `referenceDataPointsFilters` configuration module. See libpointmatcher documentation for possible configurations. @@ -211,9 +211,9 @@ namespace pointmatcher { of descriptive information to the points such as a surface normal vector, or the direction from the point to the sensor. - Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + Corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher library. The filters should be chosen and set from possible components of - the `referenceDataPointsFilters` configuration module. + the `readingDataPointsFilters` configuration module. See libpointmatcher documentation for possible configurations. @@ -283,4 +283,4 @@ register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2) } } // end of namespace CGAL::pointmatcher -#endif // CGAL_POINTMATCHER_REGISTER_POINT_SETS_H \ No newline at end of file +#endif // CGAL_POINTMATCHER_REGISTER_POINT_SETS_H From fe116acbaebb512616e648e2b0d1ba5ce20f4bbe Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Sun, 1 Sep 2019 21:03:01 -0400 Subject: [PATCH 33/53] Improved doc for PSP: added author --- .../doc/Point_set_processing_3/PackageDescription.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt index b77c5b5b506..51df668b49d 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt @@ -29,8 +29,8 @@ format. \cgalPkgDescriptionBegin{Point Set Processing,PkgPointSetProcessing3} \cgalPkgPicture{point_set_processing_detail.png} \cgalPkgSummaryBegin -\cgalPkgAuthors{Pierre Alliez, Simon Giraudot, Clément Jamin, Florent Lafarge, Quentin Mérigot, Jocelyn Meyron, Laurent Saboret, Nader Salman, Shihao Wu} -\cgalPkgDesc{This \cgal component implements methods to analyze and process unorganized point sets. The input is an unorganized point set, possibly with normal attributes (unoriented or oriented). The point set can be analyzed to measure its average spacing, and processed through functions devoted to the simplification, outlier removal, smoothing, normal estimation, normal orientation and feature edges estimation.} +\cgalPkgAuthors{Pierre Alliez, Simon Giraudot, Clément Jamin, Florent Lafarge, Quentin Mérigot, Jocelyn Meyron, Laurent Saboret, Nader Salman, Shihao Wu, Necip Fazil Yildiran} +\cgalPkgDesc{This \cgal component implements methods to analyze and process unorganized point sets. The input is an unorganized point set, possibly with normal attributes (unoriented or oriented). The point set can be analyzed to measure its average spacing, and processed through functions devoted to the simplification, outlier removal, smoothing, normal estimation, normal orientation, feature edges estimation and registration.} \cgalPkgManuals{Chapter_Point_Set_Processing,PkgPointSetProcessing3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin From 8fdc3e971358cbe866af27d398ef29487eaecf5e Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Sun, 1 Sep 2019 21:22:31 -0400 Subject: [PATCH 34/53] Changed struct init syntax as C++20 is not supported aggregate initialization with attribute naming is changed to list initialization --- .../registration_with_pointmatcher.cpp | 22 +++++++++---------- .../compute_registration_transformation.h | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp index f285710a94e..002de4a37ed 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp @@ -60,36 +60,36 @@ int main(int argc, const char** argv) // Prepare point set 1 filters (PM::ReferenceDataPointsFilters) std::vector point_set_1_filters; - point_set_1_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); - point_set_1_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); + point_set_1_filters.push_back( ICP_config { /*.name=*/"MinDistDataPointsFilter" , /*.params=*/{ {"minDist", "0.5" }} } ); + point_set_1_filters.push_back( ICP_config { /*.name=*/"RandomSamplingDataPointsFilter", /*.params=*/{ {"prob" , "0.05"}} } ); // Prepare point set 2 filters (PM::ReadingDataPointsFilters) std::vector point_set_2_filters; - point_set_2_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); - point_set_2_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); + point_set_2_filters.push_back( ICP_config { /*.name=*/"MinDistDataPointsFilter" , /*.params=*/{ {"minDist", "0.5" }} } ); + point_set_2_filters.push_back( ICP_config { /*.name=*/"RandomSamplingDataPointsFilter", /*.params=*/{ {"prob" , "0.05"}} } ); // Prepare matcher function - ICP_config matcher { .name="KDTreeMatcher", .params={ {"knn", "1"}, {"epsilon", "3.16"} } }; + ICP_config matcher { /*.name=*/"KDTreeMatcher", /*.params=*/{ {"knn", "1"}, {"epsilon", "3.16"} } }; // Prepare outlier filters std::vector outlier_filters; - outlier_filters.push_back( ICP_config { .name="TrimmedDistOutlierFilter", .params={ {"ratio", "0.75" }} } ); + outlier_filters.push_back( ICP_config { /*.name=*/"TrimmedDistOutlierFilter", /*.params=*/{ {"ratio", "0.75" }} } ); // Prepare error minimizer - ICP_config error_minimizer { .name = "PointToPointErrorMinimizer"}; + ICP_config error_minimizer { /*.name=*/"PointToPointErrorMinimizer"}; // Prepare transformation checker std::vector transformation_checkers; - transformation_checkers.push_back( ICP_config { .name="CounterTransformationChecker", .params={ {"maxIterationCount", "150" }} } ); - transformation_checkers.push_back( ICP_config { .name="DifferentialTransformationChecker", .params={ {"minDiffRotErr" , "0.001" }, + transformation_checkers.push_back( ICP_config { /*.name=*/"CounterTransformationChecker", /*.params=*/{ {"maxIterationCount", "150" }} } ); + transformation_checkers.push_back( ICP_config { /*.name=*/"DifferentialTransformationChecker", /*.params=*/{ {"minDiffRotErr" , "0.001" }, {"minDiffTransErr", "0.01" }, {"smoothLength" , "4" } } } ); // Prepare inspector - ICP_config inspector { .name="NullInspector" }; + ICP_config inspector { /*.name=*/"NullInspector" }; // Prepare logger - ICP_config logger { .name= "FileLogger" }; + ICP_config logger { /*.name=*/"FileLogger" }; const K::Aff_transformation_3 identity_transform = K::Aff_transformation_3(CGAL::Identity_transformation()); diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index 8780a282182..0261d110ec2 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -85,7 +85,7 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) icp.setDefault(); - const ICP_config null_config { .name = "_null_pm_config_in_cgal" }; + const ICP_config null_config { "_null_pm_config_in_cgal" }; const std::vector null_config_chain { null_config }; auto is_null_config = [&](const ICP_config& c) { return !c.name.compare(null_config.name); }; From 5d65fc3da75e62558144112e42c81aec7f94a969 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 28 Aug 2019 14:35:33 +0200 Subject: [PATCH 35/53] Update regitration functions with new named parameters API --- .../compute_registration_transformation.h | 24 +++++------ .../include/CGAL/OpenGR/register_point_sets.h | 22 +++++----- .../compute_registration_transformation.h | 40 +++++++++---------- .../CGAL/pointmatcher/register_point_sets.h | 10 ++--- 4 files changed, 48 insertions(+), 48 deletions(-) diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index 422194b0adc..bdaa656b514 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -25,7 +25,7 @@ #include #include -#include +#include #include #include @@ -262,8 +262,8 @@ compute_registration_transformation (const PointRange1& point_set_1, const Point { namespace PSP = CGAL::Point_set_processing_3; namespace GR = gr; - using boost::choose_param; - using boost::get_param; + using parameters::choose_parameter; + using parameters::get_parameter; // property map types typedef typename PSP::GetPointMap::type PointMap1; @@ -280,16 +280,16 @@ compute_registration_transformation (const PointRange1& point_set_1, const Point typedef typename PSP::GetK::Kernel Kernel; - PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); - NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); - PointMap2 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); - NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); + PointMap1 point_map1 = choose_parameter(get_parameter(np1, internal_np::point_map), PointMap1()); + NormalMap1 normal_map1 = choose_parameter(get_parameter(np1, internal_np::normal_map), NormalMap1()); + PointMap2 point_map2 = choose_parameter(get_parameter(np2, internal_np::point_map), PointMap2()); + NormalMap2 normal_map2 = choose_parameter(get_parameter(np2, internal_np::normal_map), NormalMap2()); Options options; - options.sample_size = choose_param(get_param(np1, internal_np::number_of_samples), 200); - options.delta = choose_param(get_param(np1, internal_np::accuracy), 5.00); - options.max_time_seconds = choose_param(get_param(np1, internal_np::maximum_running_time), 1000); - bool overlap_ok = options.configureOverlap (choose_param(get_param(np1, internal_np::overlap), 0.20)); + options.sample_size = choose_parameter(get_parameter(np1, internal_np::number_of_samples), 200); + options.delta = choose_parameter(get_parameter(np1, internal_np::accuracy), 5.00); + options.max_time_seconds = choose_parameter(get_parameter(np1, internal_np::maximum_running_time), 1000); + bool overlap_ok = options.configureOverlap (choose_parameter(get_parameter(np1, internal_np::overlap), 0.20)); CGAL_USE (overlap_ok); // TODO: non-constant condition for static assertion, the value of ‘overlap_ok’ is not usable in a constant expression // CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); @@ -315,7 +315,7 @@ compute_registration_transformation(const PointRange1& point_set_1, PointRange2& template std::pair > + Named_function_parameters > ::Kernel::Aff_transformation_3, double> compute_registration_transformation(const PointRange1& point_set_1, PointRange2& point_set_2) { diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index b3985a09626..8f3ca8c08ff 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -25,7 +25,7 @@ #include #include -#include +#include #include #include @@ -173,8 +173,8 @@ register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, { namespace PSP = CGAL::Point_set_processing_3; namespace GR = gr; - using boost::choose_param; - using boost::get_param; + using parameters::choose_parameter; + using parameters::get_parameter; // property map types typedef typename PSP::GetPointMap::type PointMap1; @@ -191,16 +191,16 @@ register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, typedef typename PSP::GetK::Kernel Kernel; - PointMap1 point_map1 = choose_param(get_param(np1, internal_np::point_map), PointMap1()); - NormalMap1 normal_map1 = choose_param(get_param(np1, internal_np::normal_map), NormalMap1()); - PointMap1 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); - NormalMap2 normal_map2 = choose_param(get_param(np2, internal_np::normal_map), NormalMap2()); + PointMap1 point_map1 = choose_parameter(get_parameter(np1, internal_np::point_map), PointMap1()); + NormalMap1 normal_map1 = choose_parameter(get_parameter(np1, internal_np::normal_map), NormalMap1()); + PointMap1 point_map2 = choose_parameter(get_parameter(np2, internal_np::point_map), PointMap2()); + NormalMap2 normal_map2 = choose_parameter(get_parameter(np2, internal_np::normal_map), NormalMap2()); Options options; - options.sample_size = choose_param(get_param(np1, internal_np::number_of_samples), 200); - options.delta = choose_param(get_param(np1, internal_np::accuracy), 5.00); - options.max_time_seconds = choose_param(get_param(np1, internal_np::maximum_running_time), 1000); - bool overlap_ok = options.configureOverlap (choose_param(get_param(np1, internal_np::overlap), 0.20)); + options.sample_size = choose_parameter(get_parameter(np1, internal_np::number_of_samples), 200); + options.delta = choose_parameter(get_parameter(np1, internal_np::accuracy), 5.00); + options.max_time_seconds = choose_parameter(get_parameter(np1, internal_np::maximum_running_time), 1000); + bool overlap_ok = options.configureOverlap (choose_parameter(get_parameter(np1, internal_np::overlap), 0.20)); CGAL_USE (overlap_ok); // TODO: non-constant condition for static assertion, the value of ‘overlap_ok’ is not usable in a constant expression // CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index 5eec955e6c8..97d248646ac 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -25,7 +25,7 @@ #include #include -#include +#include #include #include @@ -78,8 +78,8 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) { typedef PointMatcher PM; - using boost::choose_param; - using boost::get_param; + using parameters::choose_parameter; + using parameters::get_parameter; ICP icp; @@ -94,7 +94,7 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) // Therefore, filter params from np1 applies to reference data points while params from np2 applies to reading data points // np1.point_set_filters -> PM::ReferenceDataPointsFilter - auto reference_data_points_filter_configs = choose_param(get_param(np1, internal_np::point_set_filters), null_config_chain); + auto reference_data_points_filter_configs = choose_parameter(get_parameter(np1, internal_np::point_set_filters), null_config_chain); if(!reference_data_points_filter_configs.empty() && is_null_config(*reference_data_points_filter_configs.cbegin())) { // No config provided: use default values as been set above, do nothing ; @@ -112,7 +112,7 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) } } // np2.point_set_filters -> PM::ReadingDataPointsFilters - auto reading_data_points_filter_configs = choose_param(get_param(np2, internal_np::point_set_filters), null_config_chain); + auto reading_data_points_filter_configs = choose_parameter(get_parameter(np2, internal_np::point_set_filters), null_config_chain); if(!reading_data_points_filter_configs.empty() && is_null_config(*reading_data_points_filter_configs.cbegin())) { // No config provided: use default values as been set above, do nothing ; @@ -131,7 +131,7 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) } // Matcher - auto matcher_config = choose_param(get_param(np1, internal_np::matcher), null_config); + auto matcher_config = choose_parameter(get_parameter(np1, internal_np::matcher), null_config); if(!is_null_config(matcher_config)) { try { @@ -142,7 +142,7 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) } // Outlier Filters - auto outlier_filters_config = choose_param(get_param(np1, internal_np::outlier_filters), null_config_chain); + auto outlier_filters_config = choose_parameter(get_parameter(np1, internal_np::outlier_filters), null_config_chain); if(!outlier_filters_config.empty() && is_null_config(*outlier_filters_config.cbegin())) { // No config provided: use default values as been set above, do nothing ; @@ -161,7 +161,7 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) } // Error Minimizer - auto error_minimizer_config = choose_param(get_param(np1, internal_np::error_minimizer), null_config); + auto error_minimizer_config = choose_parameter(get_parameter(np1, internal_np::error_minimizer), null_config); if(!is_null_config(error_minimizer_config)) { try { @@ -172,7 +172,7 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) } // Transformation Checkers - auto transformation_checkers_config = choose_param(get_param(np1, internal_np::transformation_checkers), null_config_chain); + auto transformation_checkers_config = choose_parameter(get_parameter(np1, internal_np::transformation_checkers), null_config_chain); if(!transformation_checkers_config.empty() && is_null_config(*transformation_checkers_config.cbegin())) { // No config provided: use default values as been set above, do nothing ; @@ -191,7 +191,7 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) } // Inspector - auto inspector_config = choose_param(get_param(np1, internal_np::inspector), null_config); + auto inspector_config = choose_parameter(get_parameter(np1, internal_np::inspector), null_config); if(!is_null_config(error_minimizer_config)) { try { @@ -202,7 +202,7 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) } // Logger - auto logger_config = choose_param(get_param(np1, internal_np::logger), null_config); + auto logger_config = choose_parameter(get_parameter(np1, internal_np::logger), null_config); if(!is_null_config(logger_config)) { try { @@ -554,8 +554,8 @@ std::pair(point_set_1, point_set_2, point_map1, point_map2, @@ -606,7 +606,7 @@ compute_registration_transformation(const PointRange1& point_set_1, const PointR template std::pair > + Named_function_parameters > ::Kernel::Aff_transformation_3, bool> compute_registration_transformation(const PointRange1& point_set_1, const PointRange2& point_set_2) { @@ -619,4 +619,4 @@ compute_registration_transformation(const PointRange1& point_set_1, const PointR } } // end of namespace CGAL::pointmatcher -#endif // CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H \ No newline at end of file +#endif // CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h index 0a49b15d17c..6ae6ecd9b20 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h @@ -25,7 +25,7 @@ #include #include -#include +#include #include #include @@ -236,8 +236,8 @@ bool register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, const NamedParameters1& np1, const NamedParameters2& np2) { - using boost::choose_param; - using boost::get_param; + using parameters::choose_parameter; + using parameters::get_parameter; namespace PSP = CGAL::Point_set_processing_3; typedef typename PSP::GetK::Kernel Kernel; @@ -248,7 +248,7 @@ register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, // property map type of point_set_2 typedef typename PSP::GetPointMap::type PointMap2; - PointMap2 point_map2 = choose_param(get_param(np2, internal_np::point_map), PointMap2()); + PointMap2 point_map2 = choose_parameter(get_parameter(np2, internal_np::point_map), PointMap2()); // update CGAL points for (typename PointRange2::iterator it=point_set_2.begin(), @@ -283,4 +283,4 @@ register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2) } } // end of namespace CGAL::pointmatcher -#endif // CGAL_POINTMATCHER_REGISTER_POINT_SETS_H \ No newline at end of file +#endif // CGAL_POINTMATCHER_REGISTER_POINT_SETS_H From 851a5f85664cc8a710f39ad068b6172bdcf5d952 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 28 Aug 2019 14:36:03 +0200 Subject: [PATCH 36/53] Add undocumented named parameter to read a pointmatcher config file --- BGL/include/CGAL/boost/graph/parameters_interface.h | 1 + .../pointmatcher/compute_registration_transformation.h | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/BGL/include/CGAL/boost/graph/parameters_interface.h b/BGL/include/CGAL/boost/graph/parameters_interface.h index 543cd4ad27e..9313e0ccbee 100644 --- a/BGL/include/CGAL/boost/graph/parameters_interface.h +++ b/BGL/include/CGAL/boost/graph/parameters_interface.h @@ -136,6 +136,7 @@ CGAL_add_named_parameter(error_minimizer_t, error_minimizer, error_minimizer) CGAL_add_named_parameter(transformation_checkers_t, transformation_checkers, transformation_checkers) CGAL_add_named_parameter(inspector_t, inspector, inspector) CGAL_add_named_parameter(logger_t, logger, logger) +CGAL_add_named_parameter(pointmatcher_config_t, pointmatcher_config, pointmatcher_config) // List of named parameters used in Surface_mesh_approximation package CGAL_add_named_parameter(verbose_level_t, verbose_level, verbose_level) diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index 97d248646ac..3e9187bac4c 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -89,6 +89,14 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) const std::vector null_config_chain { null_config }; auto is_null_config = [&](const ICP_config& c) { return !c.name.compare(null_config.name); }; + // Config file + std::istream* pointmatcher_config = choose_parameter(get_parameter(np1, internal_np::pointmatcher_config), nullptr); + if(pointmatcher_config != nullptr) + { + icp.loadFromYaml(*pointmatcher_config); + return icp; + } + // In CGAL, point_set_1 is the reference while point_set_2 is the data // However, in pointmatcher, the order is reverse: point_set_1 is the data while point_set_2 is the reference // Therefore, filter params from np1 applies to reference data points while params from np2 applies to reading data points From 966388fe296ed009b0a5bd97a589b993caad877f Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 28 Aug 2019 14:36:21 +0200 Subject: [PATCH 37/53] Update registration plugin with pointmatcher --- .../Plugins/Point_set/CMakeLists.txt | 24 +- .../Point_set/Register_point_sets_plugin.cpp | 178 ++++++---- .../Point_set/Register_point_sets_plugin.ui | 320 ++++++++++++++++++ 3 files changed, 462 insertions(+), 60 deletions(-) create mode 100644 Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.ui diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt index ae8fe0e6ede..9d4ab30bf89 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt @@ -44,15 +44,33 @@ if(EIGEN3_FOUND) polyhedron_demo_plugin(point_set_shape_detection_plugin Point_set_shape_detection_plugin ${point_set_shape_detectionUI_FILES} KEYWORDS PointSetProcessing Classification) target_link_libraries(point_set_shape_detection_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item scene_polygon_soup_item scene_callback_signaler) + set(register_compile_definitions) + set(register_linked_libraries) find_package(OpenGR) if (OpenGR_FOUND) + set(register_compile_definitions ${register_compile_definitions} "-DCGAL_LINKED_WITH_OPENGR") include_directories(SYSTEM ${OpenGR_INCLUDE_DIR}) - polyhedron_demo_plugin(register_point_sets_plugin Register_point_sets_plugin) - target_link_libraries(register_point_sets_plugin PUBLIC scene_points_with_normal_item) else() - message(STATUS "NOTICE: registration plugin requires OpenGR, and will not be compiled.") + message(STATUS "NOTICE : OpenGR was not found. Coarse registration will not be available.") + endif() + + find_package(libpointmatcher) + if (libpointmatcher_FOUND) + include_directories(SYSTEM ${libpointmatcher_INCLUDE_DIR}) + set(register_compile_definitions ${register_compile_definitions} "-DCGAL_LINKED_WITH_POINTMATCHER") + set(register_linked_libraries ${register_linked_libraries} ${libpointmatcher_LIBRARIES}) + else() + message(STATUS "NOTICE : libpointmatcher was not found. Fine registration will not be available.") endif() + if (OpenGR_FOUND OR libpointmatcher_FOUND) + qt5_wrap_ui(register_point_setsUI_FILES Register_point_sets_plugin.ui) + polyhedron_demo_plugin(register_point_sets_plugin Register_point_sets_plugin ${register_point_setsUI_FILES} KEYWORDS PointSetProcessing) + target_link_libraries(register_point_sets_plugin PUBLIC scene_points_with_normal_item ${register_linked_libraries}) + target_compile_definitions(register_point_sets_plugin PRIVATE ${register_compile_definitions}) + else() + message(STATUS "NOTICE: OpenGR and libpointmatcher were not found. Registrationp plugin will not be available.") + endif() else(EIGEN3_FOUND) message(STATUS "NOTICE: Eigen 3.1 (or greater) was not found. Surface reconstruction plugin will not be available.") diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.cpp index a728ddba123..e399d256c7d 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.cpp @@ -3,8 +3,17 @@ #include #include +#ifdef CGAL_LINKED_WITH_OPENGR #define CGAL_OPENGR_VERBOSE #include +#endif + +#ifdef CGAL_LINKED_WITH_POINTMATCHER +#include +#endif + +#include + #include #include @@ -20,10 +29,70 @@ #include #include -#include +#include "ui_Register_point_sets_plugin.h" using namespace CGAL::Three; + + +class Point_set_demo_register_dialog : public QDialog, private Ui::RegisterPointSetsDialog +{ + Q_OBJECT +public: + Point_set_demo_register_dialog(const std::vector& items, + QWidget* /*parent*/ = 0) + { + setupUi(this); + + for (std::size_t i = 0; i < items.size(); ++ i) + { + QRadioButton* button = new QRadioButton(items[i]->name().toStdString().c_str(), this); + buttons.push_back (button); + pointSets->addRow (button); + if (i == 0) + button->setChecked(true); + } + +#ifndef CGAL_LINKED_WITH_OPENGR + coarseRegistration->setText("Coarse registration (disabled, requires OpenGR)"); + coarseRegistration->setChecked(false); + coarseRegistration->setEnabled(false); + opengr_frame->setEnabled(false); +#endif +#ifndef CGAL_LINKED_WITH_POINTMATCHER + fineRegistration->setText("Fine registration (disabled, requires libpointmatcher)"); + fineRegistration->setChecked(false); + fineRegistration->setEnabled(false); + pointmatcher_frame->setEnabled(false); +#endif + } + + std::size_t ref_index() const + { + for (std::size_t i = 0; i < buttons.size(); ++ i) + if (buttons[i]->isChecked()) + return i; + return std::size_t(-1); + } + + bool coarse_registration() const { return coarseRegistration->isChecked(); } + bool fine_registration() const { return fineRegistration->isChecked(); } + + int nb_samples() const { return numberOfSamplesSpinBox->value(); } + double accuracy() const { return accuracyDoubleSpinBox->value(); } + double overlap() const { return double(overlapSpinBox->value()) / 100.0; } + int max_time() const { return maximumRunningTimeSpinBox->value(); } + + std::string pointmatcher_config() const { return config->toPlainText().toStdString(); } + +private: + + std::vector buttons; + +}; + + + class Polyhedron_demo_register_point_sets_plugin : public QObject, public Polyhedron_demo_plugin_helper @@ -77,78 +146,73 @@ void Polyhedron_demo_register_point_sets_plugin::on_actionRegisterPointSets_trig { std::vector items = get_point_set_items(); - QMultipleInputDialog dialog ("Register point sets", mw); - - QSpinBox* nb_samples = dialog.add("Number of samples:"); - nb_samples->setRange (3, 100000000); - nb_samples->setValue (200); - - QDoubleSpinBox* accuracy = dialog.add("Accuracy:"); - accuracy->setDecimals (5); - accuracy->setRange (0.00001, 100000.0); - accuracy->setValue (0.05); - accuracy->setSingleStep (0.1); - - QDoubleSpinBox* overlap = dialog.add("Overlap:"); - overlap->setDecimals (2); - overlap->setRange (0.01, 1.0); - overlap->setValue (0.2); - overlap->setSingleStep (0.1); - - QSpinBox* max_time = dialog.add("Maximum running time:"); - max_time->setRange (1, 36000); - max_time->setValue (60); - max_time->setSuffix (QString(" s")); - - dialog.add("Which point set is the reference? (others will be altered)"); - std::vector buttons; - for (std::size_t i = 0; i < items.size(); ++ i) - { - buttons.push_back (dialog.add (items[i]->name().toStdString().c_str())); - if (i == 0) - buttons.back()->setChecked(true); - } - - if (!dialog.exec()) + Point_set_demo_register_dialog dialog(items); + if(!dialog.exec()) return; QApplication::setOverrideCursor(Qt::WaitCursor); - std::size_t ref = 0; - for (std::size_t i = 0; i < items.size(); ++ i) - if (buttons[i]->isChecked()) - { - ref = i; - break; - } + std::size_t ref = dialog.ref_index(); for (std::size_t i = 0; i < items.size(); ++ i) { if (i == ref) continue; - CGAL::Timer task_timer; task_timer.start(); std::cerr << "Registering " << items[i]->name().toStdString() << " with " << items[ref]->name().toStdString() << std::endl; Point_set& ps1 = *(items[ref]->point_set()); Point_set& ps2 = *(items[i]->point_set()); + +#ifdef CGAL_LINKED_WITH_OPENGR + if (dialog.coarse_registration()) + { + std::cerr << "* Coarse registration:" << std::endl; + CGAL::Timer task_timer; task_timer.start(); + double score = + CGAL::OpenGR::register_point_sets(ps1, ps2, + CGAL::parameters::point_map(ps1.point_map()) + .normal_map(ps1.normal_map()) + .number_of_samples(dialog.nb_samples()) + .maximum_running_time(dialog.max_time()) + .accuracy(dialog.accuracy()) + .overlap(dialog.overlap()), + CGAL::parameters::point_map(ps2.point_map()) + .normal_map(ps2.normal_map())); - double score = - CGAL::OpenGR::register_point_sets(ps1, ps2, - CGAL::parameters::point_map(ps1.point_map()) - .normal_map(ps1.normal_map()) - .number_of_samples(nb_samples->value()) - .maximum_running_time(max_time->value()) - .accuracy(accuracy->value()) - .overlap(overlap->value()), - CGAL::parameters::point_map(ps2.point_map()) - .normal_map(ps2.normal_map())); + std::size_t memory = CGAL::Memory_sizer().virtual_size(); + std::cerr << " -> Registration score = " << score << " (" + << task_timer.time() << " seconds, " + << (memory>>20) << " Mb allocated)" + << std::endl; + } +#endif +#ifdef CGAL_LINKED_WITH_POINTMATCHER + if (dialog.fine_registration()) + { + std::cerr << "* Fine registration: " << std::endl; + + std::istringstream ss (dialog.pointmatcher_config()); + + CGAL::Timer task_timer; task_timer.start(); + if (CGAL::pointmatcher::register_point_sets(ps1, ps2, + CGAL::parameters::point_map(ps1.point_map()) + .normal_map(ps1.normal_map()) + .pointmatcher_config(&ss), + CGAL::parameters::point_map(ps2.point_map()) + .normal_map(ps2.normal_map()))) + std::cerr << " -> Success"; + else + std::cerr << " -> Failure"; + + std::size_t memory = CGAL::Memory_sizer().virtual_size(); + std::cerr << " (" + << task_timer.time() << " seconds, " + << (memory>>20) << " Mb allocated)" + << std::endl; + } +#endif - std::size_t memory = CGAL::Memory_sizer().virtual_size(); - std::cerr << "Registration score: " << score << " (" - << task_timer.time() << " seconds, " - << (memory>>20) << " Mb allocated)" - << std::endl; } for (std::size_t i = 0; i < items.size(); ++ i) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.ui b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.ui new file mode 100644 index 00000000000..9cc5d979842 --- /dev/null +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Register_point_sets_plugin.ui @@ -0,0 +1,320 @@ + + + RegisterPointSetsDialog + + + + 0 + 0 + 418 + 515 + + + + Register point sets + + + + + + Which point set is the reference? (others will be altered) + + + + + + + + + + + + Coarse registration using OpenGR + + + true + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + Number of samples: + + + + + + + 3 + + + 10000000 + + + 200 + + + + + + + Accuracy: + + + + + + + 5 + + + 0.000010000000000 + + + 100000.000000000000000 + + + 0.100000000000000 + + + 5.000000000000000 + + + + + + + Overlap: + + + + + + + Maximum running time: + + + + + + + s + + + 1 + + + 36000 + + + 60 + + + + + + + % + + + 1 + + + 100 + + + 10 + + + 20 + + + + + + + + + + + + Fine registration using libpointmatcher + + + true + + + + + + + + 0 + 0 + + + + + 400 + 200 + + + + true + + + + + 0 + 0 + 398 + 198 + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Noto Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">readingDataPointsFilters:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> - RandomSamplingDataPointsFilter:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> prob: 0.5</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier';"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">referenceDataPointsFilters:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> - SamplingSurfaceNormalDataPointsFilter:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> knn: 10</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier';"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">matcher:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> KDTreeMatcher:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> knn: 1</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> epsilon: 0 </span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier';"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">outlierFilters:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> - TrimmedDistOutlierFilter:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> ratio: 0.75</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier';"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">errorMinimizer:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> PointToPlaneErrorMinimizer</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier';"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">transformationCheckers:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> - CounterTransformationChecker:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> maxIterationCount: 40</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> - DifferentialTransformationChecker:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> minDiffRotErr: 0.001</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> minDiffTransErr: 0.01</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> smoothLength: 4 </span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier';"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">inspector:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> VTKFileInspector:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> baseFileName: pointmatcher-run1</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> dumpPerfOnExit: 0</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> dumpStats: 0</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> dumpIterationInfo: 1 </span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> dumpDataLinks: 0 </span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> dumpReading: 0 </span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> dumpReference: 0 </span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier';"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';">logger:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier';"> NullLogger</span></p></body></html> + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + RegisterPointSetsDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + RegisterPointSetsDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + coarseRegistration + toggled(bool) + opengr_frame + setEnabled(bool) + + + 208 + 63 + + + 208 + 158 + + + + + fineRegistration + toggled(bool) + pointmatcher_frame + setEnabled(bool) + + + 208 + 253 + + + 208 + 370 + + + + + From f38d89996c87e28b877c2a2d2129a12de29e0eb6 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Sun, 1 Sep 2019 20:47:45 -0400 Subject: [PATCH 38/53] Improved doc for OpenGR/PointMathcher wrappers --- .../Point_set_processing_3.txt | 276 +++++++++++++++++- .../doc/Point_set_processing_3/examples.txt | 2 +- ...egistration_view1_hippo1_hippo2_opengr.png | Bin 0 -> 16108 bytes ...o1_hippo2_opengr_pointmatcher_pipeline.png | Bin 0 -> 15893 bytes ...ation_view1_hippo1_hippo2_pointmatcher.png | Bin 0 -> 16879 bytes ...ation_view1_hippo1_hippo2_unregistered.png | Bin 0 -> 10619 bytes .../fig/registration_view1_hippo2_opengr.png | Bin 0 -> 12165 bytes ...w1_hippo2_opengr_pointmatcher_pipeline.png | Bin 0 -> 11534 bytes ...registration_view1_hippo2_pointmatcher.png | Bin 0 -> 12331 bytes ...registration_view1_hippo2_unregistered.png | Bin 0 -> 7133 bytes .../fig/super4PCS_overlap.png | Bin 0 -> 37980 bytes .../compute_registration_transformation.h | 4 +- .../include/CGAL/OpenGR/register_point_sets.h | 4 +- .../compute_registration_transformation.h | 8 +- .../CGAL/pointmatcher/register_point_sets.h | 8 +- 15 files changed, 276 insertions(+), 26 deletions(-) create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr_pointmatcher_pipeline.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_pointmatcher.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_unregistered.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_opengr.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_opengr_pointmatcher_pipeline.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_pointmatcher.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_unregistered.png create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/super4PCS_overlap.png diff --git a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt index b31e383499b..d8525dfde5c 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt @@ -7,7 +7,7 @@ \cgalAutoToc -\authors Pierre Alliez, Simon Giraudot, Clément Jamin, Florent Lafarge, Quentin Mérigot, Jocelyn Meyron, Laurent Saboret, Nader Salman, Shihao Wu +\authors Pierre Alliez, Simon Giraudot, Clément Jamin, Florent Lafarge, Quentin Mérigot, Jocelyn Meyron, Laurent Saboret, Nader Salman, Shihao Wu, Necip Fazil Yildiran \section Point_set_processing_3Introduction Introduction @@ -23,8 +23,8 @@ In the context of surface reconstruction we can position the elements of this component along the common surface reconstruction pipeline (\cgalFigureRef{Point_set_processing_3figpipeline}) which involves the following steps: --# Scanning and scan alignment to produce a set of -points or points with normals (alignment is not covered in \cgal); +-# Scanning and scan registration to produce a set of +points or points with normals; -# Outlier removal; -# Simplification to reduce the number of input points; -# Smoothing to reduce noise in the input data; @@ -272,7 +272,7 @@ number of points (or the minimal local range) such that the subset of points has the appearance of a curve in 2D or a surface in 3D \cgalCite{cgal:gcsa-nasr-13}. -\cgal provides 2 functions that automatically estimate the scale of a +\cgal provides two functions that automatically estimate the scale of a 2D point set sampling a curve or a 3D point set sampling a surface: - `estimate_global_k_neighbor_scale()` @@ -285,7 +285,7 @@ K neighbor scale or a range scale. In some specific cases, the scale of a point set might not be homogeneous (for example if the point set contains variable -noise). \cgal also provides 2 functions that automatically estimate +noise). \cgal also provides two functions that automatically estimate the scales of a point set at a set of user-defined query points: - `estimate_local_k_neighbor_scales()` @@ -316,8 +316,8 @@ points in the domain. \section Point_set_processing_3Registration Registration -\cgal provides 2 functions as wrapper for the \ref thirdpartyOpenGR library -\cgalCite{cgal:m-ogr-17}, and 2 functions as wrapper for the \ref thirdpartylibpointmatcher +\cgal provides two functions as wrapper for the \ref thirdpartyOpenGR library +\cgalCite{cgal:m-ogr-17}, and two functions as wrapper for the \ref thirdpartylibpointmatcher library : - `CGAL::OpenGR::compute_registration_transformation()` computes the @@ -330,28 +330,188 @@ one point set w.r.t. another and directly aligns it to it; - `CGAL::pointmatcher::compute_registration_transformation()` computes the registration of one point set w.r.t. another in the form of a -`CGAL::Aff_transformation_3` object, using ICP (Iterative Closest Point) +`CGAL::Aff_transformation_3` object, using the ICP (Iterative Closest Point) algorithm; - `CGAL::pointmatcher::register_point_sets()` computes the registration of one point set w.r.t. another and directly aligns it to it. -\subsection Point_set_processing_3Examples_registration Examples - -\subsubsection Point_set_processing_3Examples_registration_OpenGR OpenGR +\subsection Point_set_processing_3Examples_registration_OpenGR OpenGR Example The following example reads two point sets and aligns them using the \ref thirdpartyOpenGR library, using the Super4PCS algorithm: \cgalExample{Point_set_processing_3/registration_with_OpenGR.cpp} -\subsubsection Point_set_processing_3Examples_registration_PointMatcher PointMatcher +\cgalFigureRef{Point_set_processing_3tableRegistrationRegistration_visualization_table} demonstrates +visualization of a scan data before and after different registration methods are applied, +including the %OpenGR registration method. To obtain the results for %OpenGR registration +in the visualization table, abovementioned example was used. + +\subsubsection Point_set_processing_3Examples_registration_OpenGR_parameter_number_of_samples Parameter: number_of_samples + +Input clouds are sub-sampled prior exploration, to ensure fast computations. +Super4PCS has a linear complexity w.r.t. the number of input samples, allowing +to use larger values than 4PCS. +Simple geometry with large overlap can be matched with only 200 samples. +However, with Super4PCS, smaller details can be used during the process by using +up to thousands of points. There is no theoretical limit to this parameter; +however, using too large values leads to very a large congruent set, +which requires more time and memory to be explored. + +Using a large number of samples is recommended when: + +- geometrical details are required to perform the matching, for instance to disambiguate +between several similar configurations, + +- the clouds have a very low overlap: using a too sparse sampling can prevent to +have samples in the overlapping area, causing the algorithm to fail, + +- the clouds are very noisy, and require a dense sampling. + +Note that Super4PCS is a global registration algorithm, which finds a good approximate +of the rigid transformation aligning two clouds. Increasing the number of samples +in order to get a fine registration is not optimal: it is usually faster to use +less samples, and refine the transformation using a local algorithm, like the ICP, +or its variant SparseICP. + +\subsubsection Point_set_processing_3Examples_registration_OpenGR_parameter_accuracy Parameter: accuracy + +This parameter controls the registration accuracy: setting a small value means that +the two clouds needs to be very close to be considered as well aligned. It is expressed in scene units. + +A simple way to understand its impact is to consider the computation of the Largest Common Pointset (LCP), +the metric used to verify how much the clouds are aligned. For each transformation matrix produced +by Super4PCS, OpenGR computes the LCP measure by considering a shell around the reference cloud, and +count the percentage of points of the target cloud lying in the shell. The thickness of the shell is +defined by the parameter delta (accuracy). + +Using too wide values will slow down the algorithm by increasing the size of the congruent set, +while using to small values prevents to find a solution. This parameter impacts other steps of +the algorithm, see the paper \cgalCite{cgal:mam-sffgp-14} for more details. + +\subsubsection Point_set_processing_3Examples_registration_OpenGR_parameter_overlap Parameter: overlap + +Ratio of expected overlap between the two point sets: it is ranging between 0 (no overlap) to 1 (100% overlap). + +The overlap parameter controls the size of the basis used for registration, as shown below: + +\cgalFigureBegin{Point_set_processing_3figOpenGR_parameter_overlap,super4PCS_overlap.png} +The effect of varying overlap parameter on the size of the basis used for registration. The overlap is smaller for left (a) than right (b). +\cgalFigureEnd + +Usually, the larger the overlap, the faster the algorithm. +When the overlap is unknown, a simple way to set this parameter is to start from +100% overlap, and decrease the value until obtaining a good result. +Using too small values will slow down the algorithm, and +reduce the accuracy of the result. + +\subsubsection Point_set_processing_3Examples_registration_OpenGR_parameter_maximum_running_time Parameter: maximum_running_time + +Maximum number of seconds after which the algorithm stops. Super4PCS explores the +transformation space to align the two input clouds. Since the exploration is performed +randomly, it is recommended to use a large time value to explore the whole space +(e.g., 1000). + +\subsection Point_set_processing_3Examples_registration_PointMatcher PointMatcher Example The following example reads two point sets and aligns them using the \ref thirdpartylibpointmatcher library, using the ICP algorithm. It also shows how to customize ICP algorithm by using possible configurations: \cgalExample{Point_set_processing_3/registration_with_pointmatcher.cpp} -\subsubsection Point_set_processing_3Examples_registration_OpenGR_PointMatcher_Pipeline OpenGR/PointMatcher Pipeline +\cgalFigureRef{Point_set_processing_3tableRegistrationRegistration_visualization_table} demonstrates +visualization of a scan data before and after different registration methods are applied, +including the PointMatcher registration method. To obtain the results for PointMatcher registration +in the visualization table, abovementioned example was used. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_point_set_filters Parameter: point_set_filters + +The chain of filters to be applied to the point cloud. The +point cloud is processed into an intermediate point cloud with the given chain +of filters to be used in the alignment procedure. The chain is organized with +the forward traversal order of the point set filters range. + +The chain of point set filters are applied only once at the beginning of the +ICP procedure, i.e., before the first iteration of the ICP algorithm. + +The filters can have several purposes, including but are not limited to: + +- removal of noisy points which render alignment of point clouds difficult, + +- removal of redundant points so as to speed up alignment, + +- addition of descriptive information to the points such as a surface normal vector or the direction from the point to the sensor. + +In registration, there are two point clouds in consideration, one of which is the reference point +cloud while the other one is the point cloud that a transformation is computed to register that point +cloud to the reference. The point set filters corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher +library while it corresponds to the `referenceDataPointsFilters` for the other point cloud. +The filters should be chosen and set from possible components of those configuration modules. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_matcher Parameter: matcher + +The method used for matching (linking) the points from to the points in the reference cloud. + +Corresponds to `matcher` configuration module of \ref thirdpartylibpointmatcher +library. The matcher should be chosen and set from possible components of +the `matcher` configuration module. +See libpointmatcher documentation +for possible configurations. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_outlier_filters Parameter: outlier_filters + +The chain of filters to be applied to the matched (linked) point clouds after +each processing iteration of the ICP algorithm to remove the links which do not +correspond to true point correspondences. The outliers are rejected. Points +with no link are ignored in the subsequent error minimization step. +The chain is organized with the forward traversal order of the outlier filters +range. + +Corresponds to `outlierFilters` configuration module of \ref thirdpartylibpointmatcher +library. The filters should be chosen and set from possible components of +the `outlierFilters` configuration module. +See libpointmatcher documentation +for possible configurations. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_error_minimizer Parameter: error_minimizer + +The error minimizer that computes a transformation matrix such as to minimize +the error between the point sets. + +Corresponds to `errorMinimizer` configuration module of \ref thirdpartylibpointmatcher +library. The error minimizer should be chosen and set from possible components of +the `errorMinimizer` configuration module. +See libpointmatcher documentation +for possible configurations. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_inspector Parameter: inspector + +The inspector allows to log data at different steps for analysis. Inspectors +typically provide deeper scrutiny than the logger. + +Corresponds to `inspector` configuration module of \ref thirdpartylibpointmatcher +library. The inspector should be chosen and set from possible components of +the `inspector` configuration module. +See libpointmatcher documentation +for possible configurations. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_logger Parameter: logger + +The method for logging information regarding the registration process outputted +by \ref thirdpartylibpointmatcher library. The logs generated by CGAL library +does not get effected by this configuration. + +Corresponds to `logger` configuration module of \ref thirdpartylibpointmatcher +library. The logger should be chosen and set from possible components of +the `logger` configuration module. +See libpointmatcher documentation +for possible configurations. + +\subsubsection Point_set_processing_3Examples_registration_PointMatcher_parameter_transformation Parameter: transformation + +The affine transformation that is used as the initial transformation for the reference point cloud. + +\subsection Point_set_processing_3Examples_registration_OpenGR_PointMatcher_Pipeline OpenGR/PointMatcher Pipeline Example The following example reads two point sets and aligns them by using both \ref thirdpartyOpenGR and \ref thirdpartylibpointmatcher libraries, respectively. @@ -360,6 +520,93 @@ is done using the Super4PCS algorithm. Then, a fine registration from this coars registration using the ICP algorithm. \cgalExample{Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp} +\cgalFigureRef{Point_set_processing_3tableRegistrationRegistration_visualization_table} demonstrates +visualization of a scan data before and after different registration methods are applied, +including the pipeline of %OpenGR and PointMatcher registration methods. To obtain the results +for the pipeline of %OpenGR and PointMatcher registration methods in the visualization table, +abovementioned example was used. + +\cgalFigureAnchor{Point_set_processing_3tableRegistrationRegistration_visualization_table} + + + + + + + + + + + + + + + + + + + + + + + + + + +
Scan 1 Scan 1 (possibly transformed, green) and Scan 2 (the reference, red)
Unregistered + \cgalFigureBegin{Point_set_processing_3figRegistrationUnregistered_hippo2_view1, registration_view1_hippo2_unregistered.png} + \cgalFigureEnd + + \cgalFigureBegin{Point_set_processing_3figRegistrationUnregistered_hippo1_hippo2_view1, registration_view1_hippo1_hippo2_unregistered.png} + \cgalFigureEnd +
+ Registered + using + %OpenGR + + \cgalFigureBegin{Point_set_processing_3figRegistrationOpenGR_hippo2_view1, registration_view1_hippo2_opengr.png} + \cgalFigureEnd + + \cgalFigureBegin{Point_set_processing_3figRegistrationOpenGR_hippo1_hippo2_view1, registration_view1_hippo1_hippo2_opengr.png} + \cgalFigureEnd +
+ Registered + using + PointMatcher + + \cgalFigureBegin{Point_set_processing_3figRegistrationPointMatcher_hippo2_view1, registration_view1_hippo2_pointmatcher.png} + \cgalFigureEnd + + \cgalFigureBegin{Point_set_processing_3figRegistrationPointMatcher_hippo1_hippo2_view1, registration_view1_hippo1_hippo2_pointmatcher.png} + \cgalFigureEnd +
+ Registered + using + OpenGR+PointMatcher + Pipeline + + \cgalFigureBegin{Point_set_processing_3figRegistrationPipeline_hippo2_view1, registration_view1_hippo2_opengr_pointmatcher_pipeline.png} + \cgalFigureEnd + + \cgalFigureBegin{Point_set_processing_3figRegistrationPipeline_hippo1_hippo2_view1, registration_view1_hippo1_hippo2_opengr_pointmatcher_pipeline.png} + \cgalFigureEnd +
+\cgalFigureCaptionBegin{Point_set_processing_3tableRegistrationRegistration_visualization_table} +Visualization of registered hippo scans with different registration methods. +Two scans are used: red as the reference, green as the one for which the transformation +is computed and applied. To obtain the results, the example code given in +\ref Point_set_processing_3Examples_registration_OpenGR , +\ref Point_set_processing_3Examples_registration_PointMatcher , +\ref Point_set_processing_3Examples_registration_OpenGR_PointMatcher_Pipeline +were applied, respectively. The parameters of the algorithms used to obtain those +results are not optimized for the shown scans; therefore, better parameter choice +might result in better results in terms of registration accuracy for each algorithm +individually. +\cgalFigureCaptionEnd + + + + \section Point_set_processing_3OutlierRemoval Outlier Removal Function `remove_outliers()` deletes a user-specified fraction @@ -708,6 +955,9 @@ Started from GSoC'2013, three new algorithms were implemented by Shihao Wu and C Started from GSoC'2014, Jocelyn Meyron with the help of Quentin Mérigot introduced the computation of the Voronoi covariance measure of a point set, as well as the normal and feature edge estimation functions based on it. Florent Lafarge with the help of Simon Giraudot contributed the point set structuring algorithm. +Started from GSoC'2019, Necip Fazil Yildiran with the help of Nicolas Mellado and Simon Giraudot introduced the wrappers for OpenGR and PointMatcher +libraries that perform registration on two point sets. + */ } /* namespace CGAL */ diff --git a/Point_set_processing_3/doc/Point_set_processing_3/examples.txt b/Point_set_processing_3/doc/Point_set_processing_3/examples.txt index 9535ad50c54..32ee499ff83 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/examples.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/examples.txt @@ -8,7 +8,7 @@ \example Point_set_processing_3/scale_estimation_2d_example.cpp \example Point_set_processing_3/registration_with_OpenGR.cpp \example Point_set_processing_3/registration_with_pointmatcher.cpp -\example Point_set_processing_3/registration_with_OpenGR_pointmatcher_pipeline.cpp +\example Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp \example Point_set_processing_3/remove_outliers_example.cpp \example Point_set_processing_3/grid_simplification_example.cpp \example Point_set_processing_3/grid_simplify_indices.cpp diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr.png new file mode 100644 index 0000000000000000000000000000000000000000..cd2e069f754612755423d560dd647efa69b24f28 GIT binary patch literal 16108 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 literal 0 HcmV?d00001 diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr_pointmatcher_pipeline.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr_pointmatcher_pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..be57be7c9625ed6b65446c0bbf08d5903448cfad GIT binary patch literal 15893 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 MVsfHY!Uh5V57x*w`v3p{ literal 0 HcmV?d00001 diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_unregistered.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_unregistered.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3e445ab81a163c2ef9a4a1baa42ee20bc31351 GIT binary patch literal 10619 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�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 Pf+8>TQMyL*OW^+kb(JXV literal 0 HcmV?d00001 diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_unregistered.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_unregistered.png new file mode 100644 index 0000000000000000000000000000000000000000..89c4be0bc002dbc69903a1c0bc5cd1c154afa7ed GIT binary patch literal 7133 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

2uJwyJd@a&Y&_ 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 documentation for possible configurations. @@ -529,9 +529,9 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 of descriptive information to the points such as a surface normal vector, or the direction from the point to the sensor. - Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + Corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher library. The filters should be chosen and set from possible components of - the `referenceDataPointsFilters` configuration module. + the `readingDataPointsFilters` configuration module. See libpointmatcher documentation for possible configurations. diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h index 6ae6ecd9b20..71bb3929678 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h @@ -84,9 +84,9 @@ namespace pointmatcher { of descriptive information to the points such as a surface normal vector, or the direction from the point to the sensor. - Corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher library. The filters should be chosen and set from possible components of - the `readingDataPointsFilters` configuration module. + the `referenceDataPointsFilters` configuration module. See libpointmatcher documentation for possible configurations. @@ -211,9 +211,9 @@ namespace pointmatcher { of descriptive information to the points such as a surface normal vector, or the direction from the point to the sensor. - Corresponds to `referenceDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher + Corresponds to `readingDataPointsFilters` configuration module of \ref thirdpartylibpointmatcher library. The filters should be chosen and set from possible components of - the `referenceDataPointsFilters` configuration module. + the `readingDataPointsFilters` configuration module. See libpointmatcher documentation for possible configurations. From 28f742e00f663326a0a970de6b3ba320c6d422df Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Sun, 1 Sep 2019 21:03:01 -0400 Subject: [PATCH 39/53] Improved doc for PSP: added author --- .../doc/Point_set_processing_3/PackageDescription.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt index b77c5b5b506..51df668b49d 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt @@ -29,8 +29,8 @@ format. \cgalPkgDescriptionBegin{Point Set Processing,PkgPointSetProcessing3} \cgalPkgPicture{point_set_processing_detail.png} \cgalPkgSummaryBegin -\cgalPkgAuthors{Pierre Alliez, Simon Giraudot, Clément Jamin, Florent Lafarge, Quentin Mérigot, Jocelyn Meyron, Laurent Saboret, Nader Salman, Shihao Wu} -\cgalPkgDesc{This \cgal component implements methods to analyze and process unorganized point sets. The input is an unorganized point set, possibly with normal attributes (unoriented or oriented). The point set can be analyzed to measure its average spacing, and processed through functions devoted to the simplification, outlier removal, smoothing, normal estimation, normal orientation and feature edges estimation.} +\cgalPkgAuthors{Pierre Alliez, Simon Giraudot, Clément Jamin, Florent Lafarge, Quentin Mérigot, Jocelyn Meyron, Laurent Saboret, Nader Salman, Shihao Wu, Necip Fazil Yildiran} +\cgalPkgDesc{This \cgal component implements methods to analyze and process unorganized point sets. The input is an unorganized point set, possibly with normal attributes (unoriented or oriented). The point set can be analyzed to measure its average spacing, and processed through functions devoted to the simplification, outlier removal, smoothing, normal estimation, normal orientation, feature edges estimation and registration.} \cgalPkgManuals{Chapter_Point_Set_Processing,PkgPointSetProcessing3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin From 1011121d77e4dc20bf95c30692fb87a927363b45 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Sun, 1 Sep 2019 21:22:31 -0400 Subject: [PATCH 40/53] Changed struct init syntax as C++20 is not supported aggregate initialization with attribute naming is changed to list initialization --- .../registration_with_pointmatcher.cpp | 22 +++++++++---------- .../compute_registration_transformation.h | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp index f285710a94e..002de4a37ed 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp @@ -60,36 +60,36 @@ int main(int argc, const char** argv) // Prepare point set 1 filters (PM::ReferenceDataPointsFilters) std::vector point_set_1_filters; - point_set_1_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); - point_set_1_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); + point_set_1_filters.push_back( ICP_config { /*.name=*/"MinDistDataPointsFilter" , /*.params=*/{ {"minDist", "0.5" }} } ); + point_set_1_filters.push_back( ICP_config { /*.name=*/"RandomSamplingDataPointsFilter", /*.params=*/{ {"prob" , "0.05"}} } ); // Prepare point set 2 filters (PM::ReadingDataPointsFilters) std::vector point_set_2_filters; - point_set_2_filters.push_back( ICP_config { .name="MinDistDataPointsFilter" , .params={ {"minDist", "0.5" }} } ); - point_set_2_filters.push_back( ICP_config { .name="RandomSamplingDataPointsFilter", .params={ {"prob" , "0.05"}} } ); + point_set_2_filters.push_back( ICP_config { /*.name=*/"MinDistDataPointsFilter" , /*.params=*/{ {"minDist", "0.5" }} } ); + point_set_2_filters.push_back( ICP_config { /*.name=*/"RandomSamplingDataPointsFilter", /*.params=*/{ {"prob" , "0.05"}} } ); // Prepare matcher function - ICP_config matcher { .name="KDTreeMatcher", .params={ {"knn", "1"}, {"epsilon", "3.16"} } }; + ICP_config matcher { /*.name=*/"KDTreeMatcher", /*.params=*/{ {"knn", "1"}, {"epsilon", "3.16"} } }; // Prepare outlier filters std::vector outlier_filters; - outlier_filters.push_back( ICP_config { .name="TrimmedDistOutlierFilter", .params={ {"ratio", "0.75" }} } ); + outlier_filters.push_back( ICP_config { /*.name=*/"TrimmedDistOutlierFilter", /*.params=*/{ {"ratio", "0.75" }} } ); // Prepare error minimizer - ICP_config error_minimizer { .name = "PointToPointErrorMinimizer"}; + ICP_config error_minimizer { /*.name=*/"PointToPointErrorMinimizer"}; // Prepare transformation checker std::vector transformation_checkers; - transformation_checkers.push_back( ICP_config { .name="CounterTransformationChecker", .params={ {"maxIterationCount", "150" }} } ); - transformation_checkers.push_back( ICP_config { .name="DifferentialTransformationChecker", .params={ {"minDiffRotErr" , "0.001" }, + transformation_checkers.push_back( ICP_config { /*.name=*/"CounterTransformationChecker", /*.params=*/{ {"maxIterationCount", "150" }} } ); + transformation_checkers.push_back( ICP_config { /*.name=*/"DifferentialTransformationChecker", /*.params=*/{ {"minDiffRotErr" , "0.001" }, {"minDiffTransErr", "0.01" }, {"smoothLength" , "4" } } } ); // Prepare inspector - ICP_config inspector { .name="NullInspector" }; + ICP_config inspector { /*.name=*/"NullInspector" }; // Prepare logger - ICP_config logger { .name= "FileLogger" }; + ICP_config logger { /*.name=*/"FileLogger" }; const K::Aff_transformation_3 identity_transform = K::Aff_transformation_3(CGAL::Identity_transformation()); diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index dd59979ffa8..7ad1b47c45c 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -85,7 +85,7 @@ construct_icp(const NamedParameters1& np1, const NamedParameters2& np2) icp.setDefault(); - const ICP_config null_config { .name = "_null_pm_config_in_cgal" }; + const ICP_config null_config { "_null_pm_config_in_cgal" }; const std::vector null_config_chain { null_config }; auto is_null_config = [&](const ICP_config& c) { return !c.name.compare(null_config.name); }; From fed52c13da16c658fa6d6a77ec8a9bd53b45cb4c Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Tue, 3 Sep 2019 23:06:46 -0400 Subject: [PATCH 41/53] Improved doc for OpenGR/PointMatcher wrappers OpenGR: param max_running_time PointMatcher: geom_traits --- .../doc/Point_set_processing_3/Point_set_processing_3.txt | 3 +-- .../include/CGAL/OpenGR/compute_registration_transformation.h | 4 ++-- .../include/CGAL/OpenGR/register_point_sets.h | 4 ++-- .../CGAL/pointmatcher/compute_registration_transformation.h | 3 +++ .../include/CGAL/pointmatcher/register_point_sets.h | 2 ++ 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt index d8525dfde5c..edc88a81bd6 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt @@ -409,8 +409,7 @@ reduce the accuracy of the result. Maximum number of seconds after which the algorithm stops. Super4PCS explores the transformation space to align the two input clouds. Since the exploration is performed -randomly, it is recommended to use a large time value to explore the whole space -(e.g., 1000). +randomly, it is recommended to use a large time value to explore the whole space. \subsection Point_set_processing_3Examples_registration_PointMatcher PointMatcher Example diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index 2a19ea4a3fa..5dad0cd4950 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -226,8 +226,8 @@ compute_registration_transformation(const PointRange1& range1, const PointRan \cgalParamBegin{maximum_running_time} maximum number of seconds after which the algorithm stops. Super4PCS explores the transformation space to align the two input clouds. Since the exploration is performed randomly, - it is recommended to use a large time value to explore the whole space - (e.g., 1000).\cgalParamEnd + it is recommended to use a large time value to explore the whole space. + \cgalParamEnd \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index 98b04179884..16f1be733ee 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -144,8 +144,8 @@ register_point_sets(const PointRange1& range1, PointRange2& range2, \cgalParamBegin{maximum_running_time} maximum number of seconds after which the algorithm stops. Super4PCS explores the transformation space to align the two input clouds. Since the exploration is performed randomly, - it is recommended to use a large time value to explore the whole space - (e.g., 1000).\cgalParamEnd + it is recommended to use a large time value to explore the whole space. + \cgalParamEnd \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index 7ad1b47c45c..9712de645d4 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -499,6 +499,9 @@ compute_registration_transformation(const PointRange1& range1, const PointRange2 If this parameter is omitted, `NullLogger` is used. \cgalParamEnd + + \cgalParamBegin{geom_traits} an instance of a geometric traits class, + model of `Kernel`\cgalParamEnd \cgalNamedParamsEnd diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h index 71bb3929678..c740067c32e 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h @@ -182,6 +182,8 @@ namespace pointmatcher { If this parameter is omitted, `NullLogger` is used. \cgalParamEnd + \cgalParamBegin{geom_traits} an instance of a geometric traits class, + model of `Kernel`\cgalParamEnd \cgalNamedParamsEnd \param np2 optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below. From 45e728f1e3be7b85b8641dd7cc7f6e0f28b65585 Mon Sep 17 00:00:00 2001 From: Necip Yildiran Date: Fri, 29 Nov 2019 13:01:53 -0500 Subject: [PATCH 42/53] typos were corrected in doc of PSP OpenGR/PointMatcher wrappers --- .../doc/Documentation/Installation.txt | 2 +- .../Point_set_processing_3.txt | 21 +++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/Documentation/doc/Documentation/Installation.txt b/Documentation/doc/Documentation/Installation.txt index 71fd8693446..e0ead1c9ca2 100644 --- a/Documentation/doc/Documentation/Installation.txt +++ b/Documentation/doc/Documentation/Installation.txt @@ -501,7 +501,7 @@ The \sc{Eigen} web site is (point_set_1, point_set_2, point_map1, point_map2, diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index abec6b8bf38..de20440c833 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -210,8 +210,7 @@ register_point_sets (const PointRange1& point_set_1, PointRange2& point_set_2, bool overlap_ok = options.configureOverlap (choose_parameter(get_parameter(np1, internal_np::overlap), 0.20)); CGAL_USE (overlap_ok); - // TODO: non-constant condition for static assertion, the value of ‘overlap_ok’ is not usable in a constant expression - // CGAL_static_assertion_msg (overlap_ok, "Invalid overlap configuration."); + CGAL_assertion_msg (overlap_ok, "Invalid overlap configuration."); return internal::register_point_sets(point_set_1, point_set_2, point_map1, point_map2, From 1646f9dba23fc16d722b4f8fa10a3dfbcc075e6d Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 11 Dec 2019 13:08:27 +0100 Subject: [PATCH 45/53] Document new parameter --- .../Point_set_processing_3/Point_set_processing_3.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt index 75d5e12fe01..63a5ac80806 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt @@ -389,6 +389,15 @@ Using too wide values will slow down the algorithm by increasing the size of the while using to small values prevents to find a solution. This parameter impacts other steps of the algorithm, see the paper \cgalCite{cgal:mam-sffgp-14} for more details. +\subsubsection Point_set_processing_3Examples_registration_OpenGR_parameter_normal Parameter: maximum normal deviation + +This parameter sets an angle threshold above which two pairs of points are discarded as candidates +for matching. It is expressed in degrees. + +The default value is 90° (no filtering). Decreasing this value allows to decrease the computation +time by being more selective on candidates. Using too small values might result in ignoring +candidates that should indeed have been matched and may thus result in a quality decrease. + \subsubsection Point_set_processing_3Examples_registration_OpenGR_parameter_overlap Parameter: overlap Ratio of expected overlap between the two point sets: it is ranging between 0 (no overlap) to 1 (100% overlap). From fd44fb278e34e49980ff89ff56e76b6cd8c1cbbc Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 11 Dec 2019 13:25:16 +0100 Subject: [PATCH 46/53] Add warning about which point set to use as reference --- .../CGAL/OpenGR/compute_registration_transformation.h | 8 ++++++++ .../include/CGAL/OpenGR/register_point_sets.h | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index 3b546e2bb3b..cf18c546c0c 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -164,6 +164,14 @@ compute_registration_transformation(const PointRange1& range1, const PointRan \note This function requires the \ref thirdpartyOpenGR library. + \warning Although this may seem counter-intuitive, if one of the + two point set matches only a small section of the other one, it is + advised to _use the small point set as reference_ instead of the + big one. The reason is that the reference point set is used to + construct a base that is sought after in the other point set: if + the big point set is used as reference, chances are the constructed + base will not be present in the small point set. + \tparam PointRange1 is a model of `Range`. The value type of its iterator is the key type of the named parameter `point_map` in `NamedParameters1`. \tparam PointRange2 is a model of `Range`. The value type of its iterator is diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index de20440c833..49f39e76bf8 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -82,6 +82,14 @@ register_point_sets(const PointRange1& range1, PointRange2& range2, \note This function requires the \ref thirdpartyOpenGR library. + \warning Although this may seem counter-intuitive, if one of the two + point set matches only a small section of the other one, it is + advised to _use the small point set as reference_ instead of the + big one. The reason is that the reference point set is used to + construct a base that is sought after in the other point set: if + the big point set is used as reference, chances are the constructed + base will not be present in the small point set. + \tparam PointRange1 is a model of `Range`. The value type of its iterator is the key type of the named parameter `point_map` in `NamedParameters1`. \tparam PointRange2 is a model of `Range`. The value type of its iterator is From 10b92bc1d5f0dbe076b08749592e23109e06d770 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 15 Jan 2020 15:26:24 +0100 Subject: [PATCH 47/53] Replace large XYZ by smaller binary PLY + fix examples --- .../examples/Point_set_processing_3/CMakeLists.txt | 4 ++-- .../registration_with_opengr_pointmatcher_pipeline.cpp | 10 +++++----- .../registration_with_pointmatcher.cpp | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt index 3b33e1d7f6c..0a1923706a6 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt +++ b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt @@ -100,8 +100,8 @@ if ( CGAL_FOUND ) # Executables that require both libpointmatcher and OpenGR if (libpointmatcher_FOUND AND OpenGR_FOUND) - # include_directories(SYSTEM ${libpointmatcher_INCLUDE_DIR}) - # include_directories(SYSTEM ${OpenGR_INCLUDE_DIR}) + include_directories(SYSTEM ${libpointmatcher_INCLUDE_DIR}) + include_directories(SYSTEM ${OpenGR_INCLUDE_DIR}) create_single_source_cgal_program( "registration_with_opengr_pointmatcher_pipeline.cpp" ) target_link_libraries(registration_with_opengr_pointmatcher_pipeline PRIVATE ${libpointmatcher_LIBRARIES}) else() diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp index 3e75c7f335e..5093ed485a8 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp @@ -13,7 +13,7 @@ #include #include -typedef CGAL::Simple_cartesian K; +typedef CGAL::Simple_cartesian K; typedef K::Point_3 Point_3; typedef K::Vector_3 Vector_3; typedef std::pair Pwn; @@ -50,7 +50,7 @@ int main(int argc, const char** argv) } input.close(); - std::cout << "Computing registration transformation using OpenGR Super4PCS.." << std::endl; + std::cerr << "Computing registration transformation using OpenGR Super4PCS.." << std::endl; // First, compute registration transformation using OpenGR Super4PCS K::Aff_transformation_3 res = std::get<0>( // get first of pair, which is the transformation @@ -60,7 +60,7 @@ int main(int argc, const char** argv) params::point_map(Point_map()).normal_map(Normal_map())) ); - std::cout << "Computing registration transformation using PointMatcher ICP, " + std::cerr << "Computing registration transformation using PointMatcher ICP, " << "taking transformation computed by OpenGR Super4PCS as initial transformation.." << std::endl; // Then, compute registration transformation using PointMatcher ICP, taking transformation computed // by OpenGR as initial transformation, and apply the transformation to pwns2 @@ -81,8 +81,8 @@ int main(int argc, const char** argv) return EXIT_FAILURE; } - std::cout << "Transformed version of " << fname2 + std::cerr << "Transformed version of " << fname2 << " written to pwn2_aligned.ply.\n"; return EXIT_SUCCESS; -} \ No newline at end of file +} diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp index 002de4a37ed..54be43b3717 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp @@ -13,7 +13,7 @@ #include #include -typedef CGAL::Simple_cartesian K; +typedef CGAL::Simple_cartesian K; typedef K::Point_3 Point_3; typedef K::Vector_3 Vector_3; typedef std::pair Pwn; @@ -147,4 +147,4 @@ int main(int argc, const char** argv) << " written to pwn2_aligned.ply.\n"; return EXIT_SUCCESS; -} \ No newline at end of file +} From 40cca6ef02bb5b8de71c7b60fe5db66647a689cc Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 15 Jan 2020 15:28:44 +0100 Subject: [PATCH 48/53] Fix BGL test --- BGL/test/BGL/test_cgal_bgl_named_params.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BGL/test/BGL/test_cgal_bgl_named_params.cpp b/BGL/test/BGL/test_cgal_bgl_named_params.cpp index 055faccf104..728f3bfddd3 100644 --- a/BGL/test/BGL/test_cgal_bgl_named_params.cpp +++ b/BGL/test/BGL/test_cgal_bgl_named_params.cpp @@ -335,7 +335,7 @@ int main() .error_minimizer(A<9030>(9030)) .transformation_checkers(A<9031>(9031)) .inspector(A<9032>(9032)) - .logger(A<9033>(9033) + .logger(A<9033>(9033)) .maximum_normal_deviation(A<9034>(9034)) ); return EXIT_SUCCESS; From f1d155045e528fda54e7bbd016fbfd7a088ef081 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Thu, 16 Jan 2020 11:00:00 +0100 Subject: [PATCH 49/53] Fix licenses --- .../OpenGR/compute_registration_transformation.h | 13 ++----------- .../include/CGAL/OpenGR/register_point_sets.h | 13 ++----------- .../compute_registration_transformation.h | 11 +---------- .../include/CGAL/pointmatcher/register_point_sets.h | 11 +---------- 4 files changed, 6 insertions(+), 42 deletions(-) diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index cf18c546c0c..23e55ff468e 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -1,20 +1,11 @@ -// Copyright (c) 2018 GeometryFactory(France). +// Copyright (c) 2019 GeometryFactory(France). // All rights reserved. // // This file is part of CGAL (www.cgal.org). -// You can redistribute it and/or modify it under the terms of the GNU -// General Public License as published by the Free Software Foundation, -// either version 3 of the License, or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // // $URL$ // $Id$ -// SPDX-License-Identifier: GPL-3.0+ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Sebastien Loriot, Necip Fazil Yildiran diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index 49f39e76bf8..16b47a37964 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -1,20 +1,11 @@ -// Copyright (c) 2018 GeometryFactory(France). +// Copyright (c) 2019 GeometryFactory(France). // All rights reserved. // // This file is part of CGAL (www.cgal.org). -// You can redistribute it and/or modify it under the terms of the GNU -// General Public License as published by the Free Software Foundation, -// either version 3 of the License, or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // // $URL$ // $Id$ -// SPDX-License-Identifier: GPL-3.0+ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Sebastien Loriot, Necip Fazil Yildiran diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index 9712de645d4..01d08b3c882 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -2,19 +2,10 @@ // All rights reserved. // // This file is part of CGAL (www.cgal.org). -// You can redistribute it and/or modify it under the terms of the GNU -// General Public License as published by the Free Software Foundation, -// either version 3 of the License, or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // // $URL$ // $Id$ -// SPDX-License-Identifier: GPL-3.0+ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Necip Fazil Yildiran diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h index c740067c32e..6ca50ac51be 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h @@ -2,19 +2,10 @@ // All rights reserved. // // This file is part of CGAL (www.cgal.org). -// You can redistribute it and/or modify it under the terms of the GNU -// General Public License as published by the Free Software Foundation, -// either version 3 of the License, or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // // $URL$ // $Id$ -// SPDX-License-Identifier: GPL-3.0+ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Necip Fazil Yildiran From 5daa73c9bc78947044e5f54858c21ed41e53e2c8 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Thu, 16 Jan 2020 16:11:20 +0100 Subject: [PATCH 50/53] Use CGAL_target_use_* mechanism for OpenGR and pointmatcher --- Installation/cmake/modules/CGAL_Common.cmake | 2 ++ .../modules/CGAL_target_use_OpenGR.cmake | 9 +++++++ .../CGAL_target_use_pointmatcher.cmake | 10 ++++++++ .../Point_set_processing_3/CMakeLists.txt | 10 ++++---- .../compute_registration_transformation.h | 4 ++++ .../include/CGAL/OpenGR/register_point_sets.h | 4 ++++ .../compute_registration_transformation.h | 4 ++++ .../CGAL/pointmatcher/register_point_sets.h | 4 ++++ .../Plugins/Point_set/CMakeLists.txt | 24 +++++-------------- 9 files changed, 47 insertions(+), 24 deletions(-) create mode 100644 Installation/cmake/modules/CGAL_target_use_OpenGR.cmake create mode 100644 Installation/cmake/modules/CGAL_target_use_pointmatcher.cmake diff --git a/Installation/cmake/modules/CGAL_Common.cmake b/Installation/cmake/modules/CGAL_Common.cmake index 51967d5f6d5..c149cefc65d 100644 --- a/Installation/cmake/modules/CGAL_Common.cmake +++ b/Installation/cmake/modules/CGAL_Common.cmake @@ -61,5 +61,7 @@ if( NOT CGAL_COMMON_FILE_INCLUDED ) # set use-file for Eigen3 (needed to have default solvers) set(EIGEN3_USE_FILE "UseEigen3") + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_target_use_OpenGR.cmake) + include(${CMAKE_CURRENT_LIST_DIR}/CGAL_target_use_pointmatcher.cmake) include(${CMAKE_CURRENT_LIST_DIR}/CGAL_target_use_TBB.cmake) endif() diff --git a/Installation/cmake/modules/CGAL_target_use_OpenGR.cmake b/Installation/cmake/modules/CGAL_target_use_OpenGR.cmake new file mode 100644 index 00000000000..dc6044f8926 --- /dev/null +++ b/Installation/cmake/modules/CGAL_target_use_OpenGR.cmake @@ -0,0 +1,9 @@ +if (CGAL_target_use_OpenGR_included) + return() +endif() +set(CGAL_target_use_OpenGR_included TRUE) + +function(CGAL_target_use_OpenGR target) + target_include_directories(${target} PUBLIC ${OpenGR_INCLUDE_DIR}) + target_compile_options( ${target} PUBLIC -DCGAL_LINKED_WITH_OPENGR) +endfunction() diff --git a/Installation/cmake/modules/CGAL_target_use_pointmatcher.cmake b/Installation/cmake/modules/CGAL_target_use_pointmatcher.cmake new file mode 100644 index 00000000000..5047815a336 --- /dev/null +++ b/Installation/cmake/modules/CGAL_target_use_pointmatcher.cmake @@ -0,0 +1,10 @@ +if (CGAL_target_use_pointmatcher_included) + return() +endif() +set(CGAL_target_use_pointmatcher_included TRUE) + +function(CGAL_target_use_pointmatcher target) + target_include_directories(${target} PUBLIC ${libpointmatcher_INCLUDE_DIR}) + target_compile_options( ${target} PUBLIC -DCGAL_LINKED_WITH_POINTMATCHER) + target_link_libraries(${target} PUBLIC ${libpointmatcher_LIBRARIES}) +endfunction() diff --git a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt index 0a1923706a6..8de75504991 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt +++ b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt @@ -82,9 +82,8 @@ if ( CGAL_FOUND ) # Executables that require libpointmatcher find_package(libpointmatcher) if (libpointmatcher_FOUND) - include_directories(SYSTEM ${libpointmatcher_INCLUDE_DIR}) create_single_source_cgal_program( "registration_with_pointmatcher.cpp" ) - target_link_libraries(registration_with_pointmatcher PRIVATE ${libpointmatcher_LIBRARIES}) + CGAL_target_use_pointmatcher(registration_with_pointmatcher) else() message(STATUS "NOTICE : the registration_with_pointmatcher test requires libpointmatcher and will not be compiled.") endif() @@ -92,18 +91,17 @@ if ( CGAL_FOUND ) # Executables that require OpenGR find_package(OpenGR) if (OpenGR_FOUND) - include_directories(SYSTEM ${OpenGR_INCLUDE_DIR}) create_single_source_cgal_program( "registration_with_OpenGR.cpp" ) + CGAL_target_use_OpenGR(registration_with_OpenGR) else() message(STATUS "NOTICE: registration_with_OpenGR requires OpenGR, and will not be compiled.") endif() # Executables that require both libpointmatcher and OpenGR if (libpointmatcher_FOUND AND OpenGR_FOUND) - include_directories(SYSTEM ${libpointmatcher_INCLUDE_DIR}) - include_directories(SYSTEM ${OpenGR_INCLUDE_DIR}) create_single_source_cgal_program( "registration_with_opengr_pointmatcher_pipeline.cpp" ) - target_link_libraries(registration_with_opengr_pointmatcher_pipeline PRIVATE ${libpointmatcher_LIBRARIES}) + CGAL_target_use_OpenGR(registration_with_opengr_pointmatcher_pipeline) + CGAL_target_use_pointmatcher(registration_with_opengr_pointmatcher_pipeline) else() message(STATUS "NOTICE: registration_with_opengr_pointmatcher_pipeline requires libpointmatcher and OpenGR, and will not be compiled.") endif() diff --git a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h index 23e55ff468e..38a33903315 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/compute_registration_transformation.h @@ -14,6 +14,8 @@ #include +#ifdef CGAL_LINKED_WITH_OPENGR + #include #include #include @@ -333,4 +335,6 @@ compute_registration_transformation(const PointRange1& point_set_1, PointRange2& } } // end of namespace CGAL::OpenGR +#endif // CGAL_LINKED_WITH_OPENGR + #endif // CGAL_OPENGR_COMPUTE_REGISTRATION_TRANSFORMATION_H diff --git a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h index 16b47a37964..c4a16d76048 100644 --- a/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/OpenGR/register_point_sets.h @@ -14,6 +14,8 @@ #include +#ifdef CGAL_LINKED_WITH_OPENGR + #include #include #include @@ -240,4 +242,6 @@ register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2) } } // end of namespace CGAL::OpenGR +#endif // CGAL_LINKED_WITH_OPENGR + #endif // CGAL_OPENGR_REGISTER_POINT_SETS_H diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h index 01d08b3c882..58350857f8a 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/compute_registration_transformation.h @@ -14,6 +14,8 @@ #include +#ifdef CGAL_LINKED_WITH_POINTMATCHER + #include #include #include @@ -621,4 +623,6 @@ compute_registration_transformation(const PointRange1& point_set_1, const PointR } } // end of namespace CGAL::pointmatcher +#endif // CGAL_LINKED_WITH_POINTMATCHER + #endif // CGAL_POINTMATCHER_COMPUTE_REGISTRATION_TRANSFORMATION_H diff --git a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h index 6ca50ac51be..3776dfcaaf1 100644 --- a/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h +++ b/Point_set_processing_3/include/CGAL/pointmatcher/register_point_sets.h @@ -14,6 +14,8 @@ #include +#ifdef CGAL_LINKED_WITH_POINTMATCHER + #include #include #include @@ -276,4 +278,6 @@ register_point_sets(const PointRange1& point_set_1, PointRange2& point_set_2) } } // end of namespace CGAL::pointmatcher +#endif // CGAL_LINKED_WITH_POINTMATCHER + #endif // CGAL_POINTMATCHER_REGISTER_POINT_SETS_H diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt index 9d4ab30bf89..613336c8e07 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt @@ -44,30 +44,18 @@ if(EIGEN3_FOUND) polyhedron_demo_plugin(point_set_shape_detection_plugin Point_set_shape_detection_plugin ${point_set_shape_detectionUI_FILES} KEYWORDS PointSetProcessing Classification) target_link_libraries(point_set_shape_detection_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item scene_polygon_soup_item scene_callback_signaler) - set(register_compile_definitions) - set(register_linked_libraries) find_package(OpenGR) - if (OpenGR_FOUND) - set(register_compile_definitions ${register_compile_definitions} "-DCGAL_LINKED_WITH_OPENGR") - include_directories(SYSTEM ${OpenGR_INCLUDE_DIR}) - else() - message(STATUS "NOTICE : OpenGR was not found. Coarse registration will not be available.") - endif() - find_package(libpointmatcher) - if (libpointmatcher_FOUND) - include_directories(SYSTEM ${libpointmatcher_INCLUDE_DIR}) - set(register_compile_definitions ${register_compile_definitions} "-DCGAL_LINKED_WITH_POINTMATCHER") - set(register_linked_libraries ${register_linked_libraries} ${libpointmatcher_LIBRARIES}) - else() - message(STATUS "NOTICE : libpointmatcher was not found. Fine registration will not be available.") - endif() if (OpenGR_FOUND OR libpointmatcher_FOUND) qt5_wrap_ui(register_point_setsUI_FILES Register_point_sets_plugin.ui) polyhedron_demo_plugin(register_point_sets_plugin Register_point_sets_plugin ${register_point_setsUI_FILES} KEYWORDS PointSetProcessing) - target_link_libraries(register_point_sets_plugin PUBLIC scene_points_with_normal_item ${register_linked_libraries}) - target_compile_definitions(register_point_sets_plugin PRIVATE ${register_compile_definitions}) + if (OpenGR_FOUND) + CGAL_target_use_OpenGR(register_point_sets_plugin) + endif() + if (libpointmatcher_FOUND) + CGAL_target_use_pointmatcher(register_point_sets_plugin) + endif() else() message(STATUS "NOTICE: OpenGR and libpointmatcher were not found. Registrationp plugin will not be available.") endif() From 3dd3affd36ee7aaf47fc5cf2a94f480b6a7e7522 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Thu, 16 Jan 2020 16:16:16 +0100 Subject: [PATCH 51/53] Document CGAL_target_use_ for OpenGR and pointmatcher --- Documentation/doc/Documentation/Third_party.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Documentation/doc/Documentation/Third_party.txt b/Documentation/doc/Documentation/Third_party.txt index 0a1bcf91b1f..820e5c5bb3c 100644 --- a/Documentation/doc/Documentation/Third_party.txt +++ b/Documentation/doc/Documentation/Third_party.txt @@ -137,7 +137,9 @@ The \sc{Eigen} web site is `https://github.com/STORM-IRIT/OpenGR`. @@ -145,9 +147,12 @@ The \sc{OpenGR} web site is `http \sc{libpointmatcher} is a modular library implementing the Iterative Closest Point (ICP) algorithm for aligning point clouds, released under a permissive BSD license. -\cgal provides wrappers for the ICP algorithm of \sc{libpointmatcher} in the \ref PkgPointSetProcessing3Ref packages. +\cgal provides wrappers for the ICP algorithm of \sc{libpointmatcher} in the \ref PkgPointSetProcessing3Ref +packages. In order to use \sc{libpointmatcher} in \cgal programs, the provided CMake function +`CGAL_target_use_pointmatcher()` should be used. -The \sc{libpointmatcher} web site is `https://github.com/ethz-asl/libpointmatcher`. +The \sc{libpointmatcher} web site is `https://github.com/ethz-asl/libpointmatcher`. \subsection thirdpartyLeda LEDA Version 6.2 or later From 2bbe1f4a2101b08cb2ce9237eef3336eb3e6b88c Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 22 Jan 2020 11:02:33 +0100 Subject: [PATCH 52/53] Fix cmake warning using QUIET --- .../examples/Point_set_processing_3/CMakeLists.txt | 4 ++-- Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt index 8de75504991..3df7e1d2692 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt +++ b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt @@ -80,7 +80,7 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "edges_example.cpp" ) # Executables that require libpointmatcher - find_package(libpointmatcher) + find_package(libpointmatcher QUIET) if (libpointmatcher_FOUND) create_single_source_cgal_program( "registration_with_pointmatcher.cpp" ) CGAL_target_use_pointmatcher(registration_with_pointmatcher) @@ -89,7 +89,7 @@ if ( CGAL_FOUND ) endif() # Executables that require OpenGR - find_package(OpenGR) + find_package(OpenGR QUIET) if (OpenGR_FOUND) create_single_source_cgal_program( "registration_with_OpenGR.cpp" ) CGAL_target_use_OpenGR(registration_with_OpenGR) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt index 613336c8e07..051e2eb0c92 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt @@ -44,8 +44,8 @@ if(EIGEN3_FOUND) polyhedron_demo_plugin(point_set_shape_detection_plugin Point_set_shape_detection_plugin ${point_set_shape_detectionUI_FILES} KEYWORDS PointSetProcessing Classification) target_link_libraries(point_set_shape_detection_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item scene_polygon_soup_item scene_callback_signaler) - find_package(OpenGR) - find_package(libpointmatcher) + find_package(OpenGR QUIET) + find_package(libpointmatcher QUIET) if (OpenGR_FOUND OR libpointmatcher_FOUND) qt5_wrap_ui(register_point_setsUI_FILES Register_point_sets_plugin.ui) From 059ed45064003b7a200e5ebe18722b11041e579a Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Thu, 13 Feb 2020 09:43:19 +0100 Subject: [PATCH 53/53] Avoid polluting testing if OpenGR/pointmatcher missing --- .../examples/Point_set_processing_3/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt index 3df7e1d2692..6a65b5f9b39 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt +++ b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt @@ -94,7 +94,7 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "registration_with_OpenGR.cpp" ) CGAL_target_use_OpenGR(registration_with_OpenGR) else() - message(STATUS "NOTICE: registration_with_OpenGR requires OpenGR, and will not be compiled.") + message(STATUS "NOTICE : registration_with_OpenGR requires OpenGR, and will not be compiled.") endif() # Executables that require both libpointmatcher and OpenGR @@ -103,7 +103,7 @@ if ( CGAL_FOUND ) CGAL_target_use_OpenGR(registration_with_opengr_pointmatcher_pipeline) CGAL_target_use_pointmatcher(registration_with_opengr_pointmatcher_pipeline) else() - message(STATUS "NOTICE: registration_with_opengr_pointmatcher_pipeline requires libpointmatcher and OpenGR, and will not be compiled.") + message(STATUS "NOTICE : registration_with_opengr_pointmatcher_pipeline requires libpointmatcher and OpenGR, and will not be compiled.") endif() else()