+
+ | |
+ 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
@@ -664,6 +962,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 43849ae022c..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
@@ -6,6 +6,9 @@
\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/registration_with_pointmatcher.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 00000000000..cd2e069f754
Binary files /dev/null and b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr.png differ
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 00000000000..be57be7c962
Binary files /dev/null and b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_opengr_pointmatcher_pipeline.png differ
diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_pointmatcher.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_pointmatcher.png
new file mode 100644
index 00000000000..6fd42c4d8dc
Binary files /dev/null and b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_pointmatcher.png differ
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 00000000000..0b3e445ab81
Binary files /dev/null and b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo1_hippo2_unregistered.png differ
diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_opengr.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_opengr.png
new file mode 100644
index 00000000000..e784a3c7bb4
Binary files /dev/null and b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_opengr.png differ
diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_opengr_pointmatcher_pipeline.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_opengr_pointmatcher_pipeline.png
new file mode 100644
index 00000000000..3a79d8d1ddb
Binary files /dev/null and b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_opengr_pointmatcher_pipeline.png differ
diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_pointmatcher.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_pointmatcher.png
new file mode 100644
index 00000000000..400c8f34035
Binary files /dev/null and b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_pointmatcher.png differ
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 00000000000..89c4be0bc00
Binary files /dev/null and b/Point_set_processing_3/doc/Point_set_processing_3/fig/registration_view1_hippo2_unregistered.png differ
diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/super4PCS_overlap.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/super4PCS_overlap.png
new file mode 100644
index 00000000000..90bebedc29b
Binary files /dev/null and b/Point_set_processing_3/doc/Point_set_processing_3/fig/super4PCS_overlap.png differ
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..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
@@ -78,6 +78,34 @@ 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 QUIET)
+ if (libpointmatcher_FOUND)
+ create_single_source_cgal_program( "registration_with_pointmatcher.cpp" )
+ CGAL_target_use_pointmatcher(registration_with_pointmatcher)
+ else()
+ message(STATUS "NOTICE : the registration_with_pointmatcher test requires libpointmatcher and will not be compiled.")
+ endif()
+
+ # Executables that require OpenGR
+ find_package(OpenGR QUIET)
+ if (OpenGR_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.")
+ endif()
+
+ # Executables that require both libpointmatcher and OpenGR
+ if (libpointmatcher_FOUND AND OpenGR_FOUND)
+ create_single_source_cgal_program( "registration_with_opengr_pointmatcher_pipeline.cpp" )
+ 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()
+
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 00000000000..3dd54ca58d9
Binary files /dev/null and b/Point_set_processing_3/examples/Point_set_processing_3/data/hippo1.ply differ
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 00000000000..4fb9e674be3
Binary files /dev/null and b/Point_set_processing_3/examples/Point_set_processing_3/data/hippo2.ply differ
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
new file mode 100644
index 00000000000..c418d78523e
--- /dev/null
+++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp
@@ -0,0 +1,87 @@
+#include