From fd2f40a156287fe185d25038f34d18537a7b75ec Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 7 Oct 2020 09:13:15 +0200 Subject: [PATCH 01/25] First version of scanline normal orientation --- .../CGAL/boost/graph/named_params_helper.h | 44 +++ .../CGAL/boost/graph/parameters_interface.h | 2 + .../Point_set_processing_3/CMakeLists.txt | 12 +- .../orient_lidar_example.cpp | 89 ++++++ .../include/CGAL/lidar_orient_normals.h | 302 ++++++++++++++++++ 5 files changed, 446 insertions(+), 3 deletions(-) create mode 100644 Point_set_processing_3/examples/Point_set_processing_3/orient_lidar_example.cpp create mode 100644 Point_set_processing_3/include/CGAL/lidar_orient_normals.h diff --git a/BGL/include/CGAL/boost/graph/named_params_helper.h b/BGL/include/CGAL/boost/graph/named_params_helper.h index 4f589134439..19efd08118b 100644 --- a/BGL/include/CGAL/boost/graph/named_params_helper.h +++ b/BGL/include/CGAL/boost/graph/named_params_helper.h @@ -503,6 +503,50 @@ CGAL_DEF_GET_INITIALIZED_INDEX_MAP(face, typename boost::graph_traits::fa > ::type type; }; + template + class GetScanAngleMap + { + public: + struct NoMap + { + typedef typename std::iterator_traits::value_type key_type; + typedef float value_type; + typedef value_type reference; + typedef boost::read_write_property_map_tag category; + + typedef NoMap Self; + friend reference get(const Self&, const key_type&) { return 0.f; } + friend void put(const Self&, const key_type&, const value_type&) { } + }; + typedef typename internal_np::Lookup_named_param_def < + internal_np::scan_angle_t, + NamedParameters, + NoMap//default + > ::type type; + }; + + template + class GetScanDirectionFlag + { + public: + struct NoMap + { + typedef typename std::iterator_traits::value_type key_type; + typedef unsigned char value_type; + typedef value_type reference; + typedef boost::read_write_property_map_tag category; + + typedef NoMap Self; + friend reference get(const Self&, const key_type&) { return 0; } + friend void put(const Self&, const key_type&, const value_type&) { } + }; + typedef typename internal_np::Lookup_named_param_def < + internal_np::scan_direction_flag_t, + NamedParameters, + NoMap//default + > ::type type; + }; + } // namespace Point_set_processing_3 template diff --git a/BGL/include/CGAL/boost/graph/parameters_interface.h b/BGL/include/CGAL/boost/graph/parameters_interface.h index 3e25ee8ff6c..2de74be459b 100644 --- a/BGL/include/CGAL/boost/graph/parameters_interface.h +++ b/BGL/include/CGAL/boost/graph/parameters_interface.h @@ -150,6 +150,8 @@ 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) CGAL_add_named_parameter(adjacencies_t, adjacencies, adjacencies) +CGAL_add_named_parameter(scan_angle_t, scan_angle, scan_angle) +CGAL_add_named_parameter(scan_direction_flag_t, scan_direction_flag, scan_direction_flag) // 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/CMakeLists.txt b/Point_set_processing_3/examples/Point_set_processing_3/CMakeLists.txt index 83253368016..bee5fc22af0 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 @@ -59,18 +59,24 @@ if ( CGAL_FOUND ) target_link_libraries(${target} ${CGAL_libs}) endforeach() + # Use Eigen + find_package(Eigen3 3.1.0) #(requires 3.1.0 or greater) + include(CGAL_Eigen_support) + find_package(LASLIB) include(CGAL_LASLIB_support) if (TARGET CGAL::LASLIB_support) add_executable( read_las_example "read_las_example.cpp" ) target_link_libraries(read_las_example ${CGAL_libs} CGAL::LASLIB_support) + if (TARGET CGAL::Eigen_support) + add_executable( orient_lidar_example "orient_lidar_example.cpp" ) + target_link_libraries(orient_lidar_example ${CGAL_libs} + CGAL::Eigen_support CGAL::LASLIB_support) + endif() else() message(STATUS "NOTICE : the LAS reader test requires LASlib and will not be compiled.") endif() - # Use Eigen - find_package(Eigen3 3.1.0) #(requires 3.1.0 or greater) - include(CGAL_Eigen_support) if (TARGET CGAL::Eigen_support) set(CGAL_libs ${CGAL_libs} CGAL::Eigen_support) diff --git a/Point_set_processing_3/examples/Point_set_processing_3/orient_lidar_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/orient_lidar_example.cpp new file mode 100644 index 00000000000..aae675e0088 --- /dev/null +++ b/Point_set_processing_3/examples/Point_set_processing_3/orient_lidar_example.cpp @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include + +using Kernel = CGAL::Simple_cartesian; +using Point_3 = Kernel::Point_3; +using Vector_3 = Kernel::Vector_3; +using Point_with_info = std::tuple; +using Point_map = CGAL::Nth_of_tuple_property_map<0, Point_with_info>; +using Normal_map = CGAL::Nth_of_tuple_property_map<1, Point_with_info>; +using Scan_angle_map = CGAL::Nth_of_tuple_property_map<2, Point_with_info>; +using Scan_direction_flag_map = CGAL::Nth_of_tuple_property_map<3, Point_with_info>; + +void dump (const char* filename, const std::vector& points) +{ + std::ofstream ofile (filename, std::ios::binary); + CGAL::set_binary_mode(ofile); + CGAL::write_ply_points + (ofile, points, + CGAL::parameters::point_map (Point_map()). + normal_map (Normal_map())); + +} + +int main (int argc, char** argv) +{ + std::string fname (argc > 1 ? argv[1] : "data/test.las"); + + std::vector points; + + std::cerr << "Reading input file " << fname << std::endl; + std::ifstream ifile (fname, std::ios::binary); + if (!ifile || + !CGAL::read_las_points_with_properties + (ifile, std::back_inserter (points), + CGAL::make_las_point_reader (Point_map()), + std::make_pair (Scan_angle_map(), + CGAL::LAS_property::Scan_angle()), + std::make_pair (Scan_direction_flag_map(), + CGAL::LAS_property::Scan_direction_flag()))) + { + std::cerr << "Can't read " << fname << std::endl; + return EXIT_FAILURE; + } + + points.resize(100000); + + std::cerr << "Estimating normals" << std::endl; + CGAL::jet_estimate_normals + (points, 12, + CGAL::parameters::point_map (Point_map()). + normal_map (Normal_map())); + + std::cerr << "Orienting normals using scan angle and direction flag" << std::endl; + CGAL::lidar_orient_normals + (points, + CGAL::parameters::point_map (Point_map()). + normal_map (Normal_map()). + scan_angle (Scan_angle_map()). + scan_direction_flag (Scan_direction_flag_map())); + dump("out_angle_and_flag.ply", points); + + std::cerr << "Orienting normals using scan direction flag only" << std::endl; + CGAL::lidar_orient_normals + (points, + CGAL::parameters::point_map (Point_map()). + normal_map (Normal_map()). + scan_direction_flag (Scan_direction_flag_map())); + dump("out_flag.ply", points); + + std::cerr << "Orienting normals using scan angle only" << std::endl; + CGAL::lidar_orient_normals + (points, + CGAL::parameters::point_map (Point_map()). + normal_map (Normal_map()). + scan_angle (Scan_angle_map())); + dump("out_angle.ply", points); + + std::cerr << "Orienting normals using no additional info" << std::endl; + CGAL::lidar_orient_normals + (points, + CGAL::parameters::point_map (Point_map()). + normal_map (Normal_map())); + dump("out_nothing.ply", points); + + return EXIT_SUCCESS; +} diff --git a/Point_set_processing_3/include/CGAL/lidar_orient_normals.h b/Point_set_processing_3/include/CGAL/lidar_orient_normals.h new file mode 100644 index 00000000000..c198c1beed7 --- /dev/null +++ b/Point_set_processing_3/include/CGAL/lidar_orient_normals.h @@ -0,0 +1,302 @@ +// Copyright (c) 2020 GeometryFactory Sarl (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// Author(s) : Simon Giraudot + +#ifndef CGAL_LIDAR_ORIENT_NORMALS_H +#define CGAL_LIDAR_ORIENT_NORMALS_H + +#include + +#include + +#include +#include + +#include + +namespace CGAL +{ + +/// \cond SKIP_IN_MANUAL +namespace Point_set_processing_3 +{ + +namespace internal +{ + +template +bool is_end_of_scanline (Iterator scanline_begin, Iterator it, + PointMap, + ScanDirectionFlagMap scan_direction_flag_map, + const Tag_false&) // no fallback +{ + return (get (scan_direction_flag_map, *scanline_begin) + != get (scan_direction_flag_map, *it)); +} + +template +bool is_end_of_scanline (Iterator scanline_begin, Iterator it, + PointMap point_map, + ScanDirectionFlagMap, + const Tag_true&) // fallback +{ + using Point_3 = typename boost::property_traits::value_type; + using Vector_3 = typename Kernel_traits::Kernel::Vector_3; + + if (std::distance (scanline_begin, it) < 3) + return false; + + Iterator n_minus_1 = it; -- n_minus_1; + Iterator n_minus_2 = n_minus_1; -- n_minus_2; + Iterator n_minus_3 = n_minus_2; -- n_minus_3; + + const Point_3& p_minus_1 = get(point_map, *n_minus_1); + const Point_3& p_minus_2 = get(point_map, *n_minus_2); + const Point_3& p_minus_3 = get(point_map, *n_minus_3); + + // End of scanline reached if inversion of direction + Vector_3 v32 (p_minus_3, p_minus_2); + v32 = Vector_3 (v32.x(), v32.y(), 0); + Vector_3 v21 (p_minus_2, p_minus_1); + v21 = Vector_3 (v21.x(), v21.y(), 0); + + return (v32 * v21 < 0); +} + +template +typename Kernel_traits::value_type>::Kernel::Vector_3 +scanline_direction (Iterator begin, Iterator end, + PointMap point_map) +{ + using Vector_3 = typename Kernel_traits::value_type>::Kernel::Vector_3; + Iterator last = end; -- last; + Vector_3 direction (get (point_map, *begin), + get (point_map, *last)); + direction = Vector_3 (direction.x(), direction.y(), 0); + direction = direction / CGAL::approximate_sqrt (direction.squared_length()); + return direction; +} + +template +void orient_scanline (Iterator begin, Iterator end, + PointMap point_map, + NormalMap normal_map, + ScanDirectionFlagMap scan_direction_flag, + ScanAngleMap scan_angle_map, + const Tag_false&, // no fallback direction flag + const Tag_false&) // no fallback scan angle +{ + using Vector_3 = typename boost::property_traits::value_type; + + static const Vector_3 vertical (0, 0, 1); + + Vector_3 direction + = Point_set_processing_3::internal::scanline_direction + (begin, end, point_map); + if (get (scan_direction_flag, *begin) == 1) + direction = -direction; + + for (Iterator it = begin; it != end; ++ it) + { + double angle = CGAL_PI * double(get (scan_angle_map, *it)) / 180.; + Vector_3 line_of_sight + = direction * std::sin(angle) + vertical * std::cos(angle); + const Vector_3& normal = get (normal_map, *it); + if (line_of_sight * normal < 0) + put (normal_map, *it, -normal); + } +} + +template +void orient_scanline (Iterator begin, Iterator end, + PointMap point_map, + NormalMap normal_map, + ScanDirectionFlagMap, + ScanAngleMap scan_angle_map, + const Tag_true&, // no fallback direction flag + const Tag_false&) // fallback scan angle +{ + using Point_3 = typename boost::property_traits::value_type; + using Vector_3 = typename boost::property_traits::value_type; + + // Estimate scanner position: + // above point with minimum scan angle + float min_scan_angle = (std::numeric_limits::max)(); + Iterator chosen = begin; + double min_z = (std::numeric_limits::max)(); + double max_z = -(std::numeric_limits::max)(); + + for (Iterator it = begin; it != end; ++ it) + { + const Point_3& p = get (point_map, *it); + min_z = (std::min(min_z, p.z())); + max_z = (std::max(max_z, p.z())); + float scan_angle = get (scan_angle_map, *it); + if (scan_angle < min_scan_angle) + { + min_scan_angle = scan_angle; + chosen = it; + } + } + + const Point_3& chosen_point = get (point_map, *chosen); + Point_3 scan_position (chosen_point.x(), + chosen_point.y(), + min_z + 10 * (max_z - min_z)); + + for (Iterator it = begin; it != end; ++ it) + { + Vector_3 line_of_sight (get(point_map, *it), scan_position); + const Vector_3& normal = get (normal_map, *it); + if (line_of_sight * normal < 0) + put (normal_map, *it, -normal); + } +} + +template +void orient_scanline (Iterator begin, Iterator end, + PointMap point_map, + NormalMap normal_map, + ScanDirectionFlagMap, + ScanAngleMap, + const FallbackFlag&, // either fallback direction flag or not + const Tag_true&) // fallback scan angle +{ + using Point_3 = typename boost::property_traits::value_type; + using Vector_3 = typename boost::property_traits::value_type; + + // Estimate scanner position: + // average XY-projected point, located above + double mean_x = 0.; + double mean_y = 0.; + double min_z = (std::numeric_limits::max)(); + double max_z = -(std::numeric_limits::max)(); + std::size_t nb = 0; + + for (Iterator it = begin; it != end; ++ it) + { + const Point_3& p = get (point_map, *it); + mean_x += p.x(); + mean_y += p.y(); + min_z = (std::min(min_z, p.z())); + max_z = (std::max(max_z, p.z())); + ++ nb; + } + + Point_3 scan_position (mean_x / nb, mean_y / nb, + min_z + 10 * (max_z - min_z)); + + for (Iterator it = begin; it != end; ++ it) + { + Vector_3 line_of_sight (get(point_map, *it), scan_position); + const Vector_3& normal = get (normal_map, *it); + if (line_of_sight * normal < 0) + put (normal_map, *it, -normal); + } +} + +} // namespace internal + +} // namespace Point_set_processing_3 +/// \endcond + +// ---------------------------------------------------------------------------- +// Public section +// ---------------------------------------------------------------------------- + +template +void lidar_orient_normals (PointRange& points, const NamedParameters& np) +{ + using parameters::choose_parameter; + using parameters::get_parameter; + + using Iterator = typename PointRange::iterator; + using PointMap = typename CGAL::GetPointMap::type; + using NormalMap = typename Point_set_processing_3::GetNormalMap::type; + using Kernel = typename Point_set_processing_3::GetK::Kernel; + using Point_3 = typename Kernel::Point_3; + using Vector_3 = typename Kernel::Vector_3; + using ScanAngleMap = typename Point_set_processing_3::GetScanAngleMap + ::type; + using ScanDirectionFlagMap = typename Point_set_processing_3::GetScanDirectionFlag + ::type; + + CGAL_static_assertion_msg(!(std::is_same::NoMap>::value), + "Error: no normal map"); + + using Fallback_scan_angle + = Boolean_tag + ::NoMap>::value>; + using Fallback_scan_direction_flag + = Boolean_tag + ::NoMap>::value>; + + + PointMap point_map = choose_parameter(get_parameter(np, internal_np::point_map)); + NormalMap normal_map = choose_parameter(get_parameter(np, internal_np::normal_map)); + ScanAngleMap scan_angle_map = choose_parameter + (get_parameter(np, internal_np::scan_angle)); + ScanDirectionFlagMap scan_direction_flag_map = choose_parameter + (get_parameter(np, internal_np::scan_direction_flag)); + + std::size_t nb_scanlines = 1; + + Iterator scanline_begin = points.begin(); + for (Iterator it = points.begin(); it != points.end(); ++ it) + { + if (Point_set_processing_3::internal::is_end_of_scanline + (scanline_begin, it, point_map, scan_direction_flag_map, + Fallback_scan_direction_flag())) + { + Point_set_processing_3::internal::orient_scanline + (scanline_begin, it, point_map, normal_map, + scan_direction_flag_map, scan_angle_map, + Fallback_scan_direction_flag(), Fallback_scan_angle()); + + scanline_begin = it; + ++ nb_scanlines; + } + } + + Point_set_processing_3::internal::orient_scanline + (scanline_begin, points.end(), point_map, normal_map, + scan_direction_flag_map, scan_angle_map, + Fallback_scan_direction_flag(), Fallback_scan_angle()); + + std::cerr << nb_scanlines << " scanline(s) identified (mean length = " + << std::size_t(points.size() / double(nb_scanlines)) + << " point(s))" << std::endl; +} + +template +void lidar_orient_normals (PointRange& points) +{ + return lidar_orient_normals (points, + CGAL::Point_set_processing_3::parameters::all_default(points)); +} + +} // namespace CGAL + + +#endif // CGAL_LIDAR_ORIENT_NORMALS_H From a7e8d52b7df792a9c2c60150c9e0ec0d299dc380 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 7 Oct 2020 09:22:32 +0200 Subject: [PATCH 02/25] Better name for function --- .../examples/Point_set_processing_3/CMakeLists.txt | 4 ++-- ...idar_example.cpp => orient_scanlines_example.cpp} | 10 +++++----- ...ar_orient_normals.h => scanline_orient_normals.h} | 12 ++++++------ 3 files changed, 13 insertions(+), 13 deletions(-) rename Point_set_processing_3/examples/Point_set_processing_3/{orient_lidar_example.cpp => orient_scanlines_example.cpp} (94%) rename Point_set_processing_3/include/CGAL/{lidar_orient_normals.h => scanline_orient_normals.h} (97%) 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 bee5fc22af0..1e55a2dda63 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 @@ -69,8 +69,8 @@ if ( CGAL_FOUND ) add_executable( read_las_example "read_las_example.cpp" ) target_link_libraries(read_las_example ${CGAL_libs} CGAL::LASLIB_support) if (TARGET CGAL::Eigen_support) - add_executable( orient_lidar_example "orient_lidar_example.cpp" ) - target_link_libraries(orient_lidar_example ${CGAL_libs} + add_executable( orient_scanlines_example "orient_scanlines_example.cpp" ) + target_link_libraries(orient_scanlines_example ${CGAL_libs} CGAL::Eigen_support CGAL::LASLIB_support) endif() else() diff --git a/Point_set_processing_3/examples/Point_set_processing_3/orient_lidar_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp similarity index 94% rename from Point_set_processing_3/examples/Point_set_processing_3/orient_lidar_example.cpp rename to Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp index aae675e0088..3d6b7fb8cb2 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/orient_lidar_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include using Kernel = CGAL::Simple_cartesian; using Point_3 = Kernel::Point_3; @@ -54,7 +54,7 @@ int main (int argc, char** argv) normal_map (Normal_map())); std::cerr << "Orienting normals using scan angle and direction flag" << std::endl; - CGAL::lidar_orient_normals + CGAL::scanline_orient_normals (points, CGAL::parameters::point_map (Point_map()). normal_map (Normal_map()). @@ -63,7 +63,7 @@ int main (int argc, char** argv) dump("out_angle_and_flag.ply", points); std::cerr << "Orienting normals using scan direction flag only" << std::endl; - CGAL::lidar_orient_normals + CGAL::scanline_orient_normals (points, CGAL::parameters::point_map (Point_map()). normal_map (Normal_map()). @@ -71,7 +71,7 @@ int main (int argc, char** argv) dump("out_flag.ply", points); std::cerr << "Orienting normals using scan angle only" << std::endl; - CGAL::lidar_orient_normals + CGAL::scanline_orient_normals (points, CGAL::parameters::point_map (Point_map()). normal_map (Normal_map()). @@ -79,7 +79,7 @@ int main (int argc, char** argv) dump("out_angle.ply", points); std::cerr << "Orienting normals using no additional info" << std::endl; - CGAL::lidar_orient_normals + CGAL::scanline_orient_normals (points, CGAL::parameters::point_map (Point_map()). normal_map (Normal_map())); diff --git a/Point_set_processing_3/include/CGAL/lidar_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h similarity index 97% rename from Point_set_processing_3/include/CGAL/lidar_orient_normals.h rename to Point_set_processing_3/include/CGAL/scanline_orient_normals.h index c198c1beed7..d092701ddce 100644 --- a/Point_set_processing_3/include/CGAL/lidar_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -9,8 +9,8 @@ // // Author(s) : Simon Giraudot -#ifndef CGAL_LIDAR_ORIENT_NORMALS_H -#define CGAL_LIDAR_ORIENT_NORMALS_H +#ifndef CGAL_SCANLINE_ORIENT_NORMALS_H +#define CGAL_SCANLINE_ORIENT_NORMALS_H #include @@ -220,7 +220,7 @@ void orient_scanline (Iterator begin, Iterator end, // ---------------------------------------------------------------------------- template -void lidar_orient_normals (PointRange& points, const NamedParameters& np) +void scanline_orient_normals (PointRange& points, const NamedParameters& np) { using parameters::choose_parameter; using parameters::get_parameter; @@ -290,13 +290,13 @@ void lidar_orient_normals (PointRange& points, const NamedParameters& np) } template -void lidar_orient_normals (PointRange& points) +void scanline_orient_normals (PointRange& points) { - return lidar_orient_normals (points, + return scanline_orient_normals (points, CGAL::Point_set_processing_3::parameters::all_default(points)); } } // namespace CGAL -#endif // CGAL_LIDAR_ORIENT_NORMALS_H +#endif // CGAL_SCANLINE_ORIENT_NORMALS_H From e86003c5c65fa09300a3fed878e1658a8ddf81cb Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 7 Oct 2020 11:06:32 +0200 Subject: [PATCH 03/25] Reference manual --- .../PackageDescription.txt | 2 +- .../orient_scanlines_example.cpp | 1 - .../include/CGAL/scanline_orient_normals.h | 91 +++++++++++++++++++ 3 files changed, 92 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 3d482fdc4f2..32e0e9f61c2 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 @@ -66,6 +66,7 @@ format. - `CGAL::jet_estimate_normals()` - `CGAL::pca_estimate_normals()` - `CGAL::mst_orient_normals()` +- `CGAL::scanline_orient_normals()` - `CGAL::edge_aware_upsample_point_set()` - `CGAL::compute_vcm()` - `CGAL::vcm_estimate_normals()` @@ -101,4 +102,3 @@ format. - `CGAL::make_las_point_writer()` */ - diff --git a/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp index 3d6b7fb8cb2..bb28ef809e0 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp @@ -45,7 +45,6 @@ int main (int argc, char** argv) return EXIT_FAILURE; } - points.resize(100000); std::cerr << "Estimating normals" << std::endl; CGAL::jet_estimate_normals diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index d092701ddce..04a08569711 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -219,6 +219,97 @@ void orient_scanline (Iterator begin, Iterator end, // Public section // ---------------------------------------------------------------------------- +/** + \ingroup PkgPointSetProcessing3Algorithms + + Orients the normals of the range of `points` by estimating a line + of sight and checking its consistency with the current normal orientation. + + \warning this function requires the input `points` to be ordered + along scanlines aligned on the XY-plane. It is typically designed + for 2.5D urban datasets acquired through, for example, airborne + LIDAR devices. + + First, scanlines are estimated as subranges of `points` by + iterating on `points`: + + - if the named parameter `scan_direction_flag` is provided, the + range is cutted everytime the flag (which tells if the scanner + was moving in the positive or negative direction) changes. + + - if no direction flag map is provided, a fallback method simply + cuts the range everytime 3 consecutive points form an acute angle + on the projected XY-plane. This fallback method gives suboptimal + results. + + Then, the line of sight (estimated vector between a point and the + position of the scanner at its time of acquisition) is estimated: + + - if both `scan_direction_flag` and `scan_angle` are provided, the + line of sight can be directly computed as a combination of the 2D + vector of the projected scanline, the vertical vector and the + scan angle. + + - if only `scan_angle` is provided, then for each scanline, the + position of the scanner is estimated as being above the point of + the scanline which has the minimum scan angle absolute + value. This method is less optimal than the one using + `scan_direction_flag`. + + - if none of these property maps are provided, then for each + scanline, the position of the scanner is estimated as being above + of the barycenter of the points of the scanline projected on the + XY-plane. This fallback method gives suboptimal results. + + Once the line of sight is estimated for each point, the normals are + oriented by checking if, for one each, the line of sight and the + normal vector give a positive scalar product. If they don't, then + the normal vector is inverted. + + \note this method gives optimal results when `scan_direction_flag` + and `scan_angle` are provided. Correct results may still be + produced in the absence of either one or both of these properties, + as long as the point set is ordered in 2.5D scanlines. + + \tparam PointRange is a model of `Range`. The value type of + its iterator is the key type of the named parameter `point_map`. + + \param points input point range. + \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below + + \cgalNamedParamsBegin + \cgalParamNBegin{point_map} + \cgalParamDescription{a property map associating points to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} + \cgalParamDefault{`CGAL::Identity_property_map`} + \cgalParamNEnd + + \cgalParamNBegin{normal_map} + \cgalParamDescription{a property map associating normals to the elements of the point set `points`} + \cgalParamType{a model of `WritablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamNEnd + + \cgalParamNBegin{scan_angle_map} + \cgalParamDescription{a property map associating the angle of acquisition to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `float`} + \cgalParamNEnd + + \cgalParamNBegin{scan_direction_flag} + \cgalParamDescription{a property map associating a flag describing the direction of the acquisition to the elements of the point set `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type + of the iterator of `PointRange` and whose value type is `unsigned char`} + \cgalParamNEnd + + \cgalParamNBegin{geom_traits} + \cgalParamDescription{an instance of a geometric traits class} + \cgalParamType{a model of `Kernel`} + \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} + \cgalParamNEnd + \cgalNamedParamsEnd +*/ template void scanline_orient_normals (PointRange& points, const NamedParameters& np) { From b26aa59049dafbcd6fd951c1c5d1696b4817f734 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 7 Oct 2020 12:03:32 +0200 Subject: [PATCH 04/25] User manual --- .../Point_set_processing_3.txt | 27 +++++++++++++++++- .../doc/Point_set_processing_3/examples.txt | 1 + .../fig/scanline_orient_normals.png | Bin 0 -> 16220 bytes 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 Point_set_processing_3/doc/Point_set_processing_3/fig/scanline_orient_normals.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 514afa2b06c..9d7f9c48d89 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 @@ -832,6 +832,8 @@ of nearest neighbors or a fixed spherical neighborhood radius. \section Point_set_processing_3NormalOrientation Normal Orientation +\subsection Point_set_processing_3Mst_orient_normals Minimum Spanning Tree + Function `mst_orient_normals()` orients the normals of a set of points with unoriented normals using the method described by Hoppe et al. in Surface reconstruction from unorganized points \cgalCite{cgal:hddms-srup-92}. @@ -846,7 +848,7 @@ the normals which cannot be successfully oriented. Normal orientation of a sampled cube surface. Left: unoriented normals. Right: orientation of right face normals is propagated to bottom face. \cgalFigureEnd -\subsection Point_set_processing_3Example_normals Example +\subsubsection Point_set_processing_3Example_normals Example The following example reads a point set from a file, estimates the normals through PCA (either over the 18 nearest neighbors or using a @@ -854,8 +856,31 @@ spherical neighborhood radius of twice the average spacing) and orients the normals: \cgalExample{Point_set_processing_3/normals_example.cpp} +\subsection Point_set_processing_3Scanline_orient_normals Scanline +The minimum spanning tree results can give suboptimal results on point +clouds with many sharp features and occlusions, which typically +happens on airborne acquired urban datasets. +`scanline_orient_normals()` is an alternative method specialized for +point sets which are ordered in scanline aligned on the XY-plane. It +can take advantage of LAS properties provided by some LIDAR scanner +and is the best choice of normal orientation when dealing with 2.5D +urban scenes. + +\cgalFigureBegin{Point_set_processing_3figmst_scanline_orient_normals,scanline_orient_normals.png} +Normal orientation of a LIDAR scanline. The point cloud is a typical +airborne LIDAR input, sampling a building without normal information +and with many occlusions (especially on vertical walls). +\cgalFigureEnd + +\subsubsection Point_set_processing_3Example_scanline_normals Example + +The following example reads a point set from a LAS file, estimates the +normals through Jet Fitting and outputs in PLY format the orientation +results of all the variants of `scanline_orient_normals()`: + +\cgalExample{Point_set_processing_3/orient_scanlines_example.cpp} \section Point_set_processing_3Upsampling Upsampling 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 2374e1ea02f..ea670af1b62 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 @@ -16,6 +16,7 @@ \example Point_set_processing_3/hierarchy_simplification_example.cpp \example Point_set_processing_3/jet_smoothing_example.cpp \example Point_set_processing_3/normals_example.cpp +\example Point_set_processing_3/orient_scanlines_example.cpp \example Point_set_processing_3/wlop_simplify_and_regularize_point_set_example.cpp \example Point_set_processing_3/bilateral_smooth_point_set_example.cpp \example Point_set_processing_3/edge_aware_upsample_point_set_example.cpp diff --git a/Point_set_processing_3/doc/Point_set_processing_3/fig/scanline_orient_normals.png b/Point_set_processing_3/doc/Point_set_processing_3/fig/scanline_orient_normals.png new file mode 100644 index 0000000000000000000000000000000000000000..2da96f7ea3f0548a37bd743be71129cae1a9def8 GIT binary patch literal 16220 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 Date: Thu, 8 Oct 2020 15:08:51 +0200 Subject: [PATCH 05/25] Scanline orientation in demo --- .../Point_set_normal_estimation_plugin.cpp | 211 ++++++++++++------ 1 file changed, 143 insertions(+), 68 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_normal_estimation_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_normal_estimation_plugin.cpp index b4050ae9e92..960adb5b9ca 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_normal_estimation_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_normal_estimation_plugin.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -306,82 +307,156 @@ void Polyhedron_demo_point_set_normal_estimation_plugin::on_actionNormalOrientat if(points == NULL) return; - // Gets options - QMultipleInputDialog dialog ("Normal Orientation", mw); - QSpinBox* neighborhood = dialog.add ("Neighborhood Size: "); - neighborhood->setRange (1, 10000000); - neighborhood->setValue (18); + // Chose method + QMultipleInputDialog method ("Normal Orientation", mw); + QRadioButton* mst = method.add ("Orient by Minimum Spanning Tree"); + mst->setChecked(true); + QRadioButton* scanline = method.add ("Orient 2.5D airborne acquired scanlines"); + scanline->setChecked(false); - QRadioButton* use_seed_points = NULL; - QRadioButton* orient_selection = NULL; - - if (points->nb_selected_points() != 0) - { - use_seed_points = dialog.add ("Use selection as seed points and orient the unselected points"); - use_seed_points->setChecked(true); - orient_selection = dialog.add ("Orient selection"); - orient_selection->setChecked(false); - } - - if(!dialog.exec()) + if (!method.exec()) return; - QApplication::setOverrideCursor(Qt::BusyCursor); - QApplication::processEvents(); - - // First point to delete - Point_set::iterator first_unoriented_point = points->end(); - - //*************************************** - // normal orientation - //*************************************** - - CGAL::Timer task_timer; task_timer.start(); - std::cerr << "Orient normals with a Minimum Spanning Tree (k=" << neighborhood->value() << ")...\n"; - - // Tries to orient normals - if (points->nb_selected_points() != 0 && use_seed_points->isChecked()) + if (mst->isChecked()) { - std::vector constrained_map (points->size(), false); + // Gets options + QMultipleInputDialog dialog ("Normal Orientation", mw); + QSpinBox* neighborhood = dialog.add ("Neighborhood Size: "); + neighborhood->setRange (1, 10000000); + neighborhood->setValue (18); - for (Point_set::iterator it = points->first_selected(); it != points->end(); ++ it) - constrained_map[*it] = true; + QRadioButton* use_seed_points = NULL; + QRadioButton* orient_selection = NULL; - first_unoriented_point = - CGAL::mst_orient_normals(*points, - std::size_t(neighborhood->value()), - points->parameters(). - point_is_constrained_map(Vector_to_pmap(&constrained_map))); + if (points->nb_selected_points() != 0) + { + use_seed_points = dialog.add ("Use selection as seed points and orient the unselected points"); + use_seed_points->setChecked(true); + orient_selection = dialog.add ("Orient selection"); + orient_selection->setChecked(false); + } + + if(!dialog.exec()) + return; + + QApplication::setOverrideCursor(Qt::BusyCursor); + QApplication::processEvents(); + + // First point to delete + Point_set::iterator first_unoriented_point = points->end(); + + //*************************************** + // normal orientation + //*************************************** + + CGAL::Timer task_timer; task_timer.start(); + std::cerr << "Orient normals with a Minimum Spanning Tree (k=" << neighborhood->value() << ")...\n"; + + // Tries to orient normals + if (points->nb_selected_points() != 0 && use_seed_points->isChecked()) + { + std::vector constrained_map (points->size(), false); + + for (Point_set::iterator it = points->first_selected(); it != points->end(); ++ it) + constrained_map[*it] = true; + + first_unoriented_point = + CGAL::mst_orient_normals(*points, + std::size_t(neighborhood->value()), + points->parameters(). + point_is_constrained_map(Vector_to_pmap(&constrained_map))); + } + else + first_unoriented_point = + CGAL::mst_orient_normals(points->all_or_selection_if_not_empty(), + std::size_t(neighborhood->value()), + points->parameters()); + + std::size_t nb_unoriented_normals = std::distance(first_unoriented_point, points->end()); + std::size_t memory = CGAL::Memory_sizer().virtual_size(); + std::cerr << "Orient normals: " << nb_unoriented_normals << " point(s) with an unoriented normal are selected (" + << task_timer.time() << " seconds, " + << (memory>>20) << " Mb allocated)" + << std::endl; + + // Selects points with an unoriented normal + points->set_first_selected (first_unoriented_point); + + // Updates scene + item->invalidateOpenGLBuffers(); + scene->itemChanged(index); + + QApplication::restoreOverrideCursor(); + + // Warns user + if (nb_unoriented_normals > 0) + { + QMessageBox::information(NULL, + tr("Points with an unoriented normal"), + tr("%1 point(s) with an unoriented normal are selected.\nPlease orient them or remove them before running Poisson reconstruction.") + .arg(nb_unoriented_normals)); + } } - else - first_unoriented_point = - CGAL::mst_orient_normals(points->all_or_selection_if_not_empty(), - std::size_t(neighborhood->value()), - points->parameters()); - - std::size_t nb_unoriented_normals = std::distance(first_unoriented_point, points->end()); - std::size_t memory = CGAL::Memory_sizer().virtual_size(); - std::cerr << "Orient normals: " << nb_unoriented_normals << " point(s) with an unoriented normal are selected (" - << task_timer.time() << " seconds, " - << (memory>>20) << " Mb allocated)" - << std::endl; - - // Selects points with an unoriented normal - points->set_first_selected (first_unoriented_point); - - // Updates scene - item->invalidateOpenGLBuffers(); - scene->itemChanged(index); - - QApplication::restoreOverrideCursor(); - - // Warns user - if (nb_unoriented_normals > 0) + else // scanline method { - QMessageBox::information(NULL, - tr("Points with an unoriented normal"), - tr("%1 point(s) with an unoriented normal are selected.\nPlease orient them or remove them before running Poisson reconstruction.") - .arg(nb_unoriented_normals)); + QApplication::setOverrideCursor(Qt::BusyCursor); + QApplication::processEvents(); + + //*************************************** + // normal orientation + //*************************************** + + CGAL::Timer task_timer; task_timer.start(); + std::cerr << "Orient normals with along 2.5D scanlines..." << std::endl; + + Point_set::Property_map scan_angle; + Point_set::Property_map scan_direction_flag; + bool angle_found = false, flag_found = false; + + std::tie (scan_angle, angle_found) + = points->property_map("scan_angle"); + std::tie (scan_direction_flag, flag_found) + = points->property_map("scan_direction_flag"); + + if (!angle_found && !flag_found) + { + std::cerr << " using no additional properties" << std::endl; + CGAL::scanline_orient_normals(points->all_or_selection_if_not_empty(), + points->parameters()); + } + else if (!angle_found && flag_found) + { + std::cerr << " using scan direction flag" << std::endl; + CGAL::scanline_orient_normals(points->all_or_selection_if_not_empty(), + points->parameters(). + scan_direction_flag (scan_direction_flag)); + } + else if (angle_found && !flag_found) + { + std::cerr << " using scan angle" << std::endl; + CGAL::scanline_orient_normals(points->all_or_selection_if_not_empty(), + points->parameters(). + scan_angle (scan_angle)); + } + else // if (angle_found && flag_found) + { + std::cerr << " using scan angle and direction flag" << std::endl; + CGAL::scanline_orient_normals(points->all_or_selection_if_not_empty(), + points->parameters(). + scan_angle (scan_angle). + scan_direction_flag (scan_direction_flag)); + } + std::size_t memory = CGAL::Memory_sizer().virtual_size(); + std::cerr << "Orient normals: " + << task_timer.time() << " seconds, " + << (memory>>20) << " Mb allocated)" + << std::endl; + + // Updates scene + item->invalidateOpenGLBuffers(); + scene->itemChanged(index); + + QApplication::restoreOverrideCursor(); } } } From 45248526cadfe4012b03d5c8c6c0b96a4f95974f Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Thu, 8 Oct 2020 15:09:01 +0200 Subject: [PATCH 06/25] Better orientation of scanlines using PCA --- .../include/CGAL/scanline_orient_normals.h | 320 +++++++++++++----- 1 file changed, 243 insertions(+), 77 deletions(-) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index 04a08569711..67bdfeef8b6 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -19,7 +19,11 @@ #include #include -#include +#include + +#include + +//#define CGAL_SCANLINE_ORIENT_VERBOSE namespace CGAL { @@ -31,6 +35,13 @@ namespace Point_set_processing_3 namespace internal { +template +const Vector_3& vertical_vector() +{ + static Vector_3 v(0, 0, 1); + return v; +} + template bool is_end_of_scanline (Iterator scanline_begin, Iterator it, @@ -73,118 +84,237 @@ bool is_end_of_scanline (Iterator scanline_begin, Iterator it, } template -typename Kernel_traits::value_type>::Kernel::Vector_3 -scanline_direction (Iterator begin, Iterator end, - PointMap point_map) +std::pair::value_type>::Kernel::Vector_3, + typename Kernel_traits::value_type>::Kernel::Vector_3> +scanline_base (Iterator begin, Iterator end, + PointMap point_map) { - using Vector_3 = typename Kernel_traits::value_type>::Kernel::Vector_3; + using Point_3 = typename boost::property_traits::value_type; + using Kernel = typename Kernel_traits::Kernel; + using Vector_3 = typename Kernel::Vector_3; + + using Line_3 = typename Kernel::Line_3; + using Plane_3 = typename Kernel::Plane_3; + + const double limit = CGAL_PI * 30. / 180.; + + Line_3 pca2; + linear_least_squares_fitting_3 + (boost::make_transform_iterator + (begin, Property_map_to_unary_function(point_map)), + boost::make_transform_iterator + (end, Property_map_to_unary_function(point_map)), + pca2, Dimension_tag<0>()); + + Vector_3 pca_direction = pca2.to_vector(); + pca_direction = Vector_3 (pca_direction.x(), pca_direction.y(), 0); + pca_direction = pca_direction / CGAL::approximate_sqrt(pca_direction.squared_length()); + + Plane_3 pca3; + linear_least_squares_fitting_3 + (boost::make_transform_iterator + (begin, Property_map_to_unary_function(point_map)), + boost::make_transform_iterator + (end, Property_map_to_unary_function(point_map)), + pca3, Dimension_tag<0>()); + + Vector_3 orthogonal = pca3.orthogonal_vector(); + Vector_3 vertical = CGAL::cross_product (pca_direction, orthogonal); + if (vertical * vertical_vector() < 0) + vertical = -vertical; + + vertical = vertical / CGAL::approximate_sqrt(vertical.squared_length()); + + if (std::acos(vertical * vertical_vector()) < limit) + return std::make_pair (pca_direction, vertical); + + // if plane diverges from the vertical more than 30 degrees, then + // fallback to 0 0 1 vertical vector + + // Dummy begin->end vector version Iterator last = end; -- last; - Vector_3 direction (get (point_map, *begin), - get (point_map, *last)); - direction = Vector_3 (direction.x(), direction.y(), 0); + const Point_3& pbegin = get (point_map, *begin); + const Point_3& plast = get (point_map, *last); + Vector_3 direction (Point_3 (pbegin.x(), pbegin.y(), 0), + Point_3 (plast.x(), plast.y(), 0)); direction = direction / CGAL::approximate_sqrt (direction.squared_length()); - return direction; + + return std::make_pair (direction, vertical_vector()); } -template -void orient_scanline (Iterator begin, Iterator end, - PointMap point_map, - NormalMap normal_map, - ScanDirectionFlagMap scan_direction_flag, - ScanAngleMap scan_angle_map, - const Tag_false&, // no fallback direction flag - const Tag_false&) // no fallback scan angle +template +bool normal_along_scanline_is_inverted +(const Vector_3& normal, const Vector_3& line_of_sight) { - using Vector_3 = typename boost::property_traits::value_type; - - static const Vector_3 vertical (0, 0, 1); - - Vector_3 direction - = Point_set_processing_3::internal::scanline_direction - (begin, end, point_map); - if (get (scan_direction_flag, *begin) == 1) - direction = -direction; - - for (Iterator it = begin; it != end; ++ it) - { - double angle = CGAL_PI * double(get (scan_angle_map, *it)) / 180.; - Vector_3 line_of_sight - = direction * std::sin(angle) + vertical * std::cos(angle); - const Vector_3& normal = get (normal_map, *it); - if (line_of_sight * normal < 0) - put (normal_map, *it, -normal); - } + return (line_of_sight * normal < 0); } +template +std::pair::value_type, bool> +estimate_scan_position (Iterator begin, Iterator end, PointMap point_map, + const std::vector& lines_of_sight) +{ + using Point_3 = typename boost::property_traits::value_type; + + typedef Eigen::Matrix3d Matrix; + typedef Eigen::Vector3d Vector; + typedef Eigen::ConjugateGradient Solver; + + Matrix R; + R << 0, 0, 0, 0, 0, 0, 0, 0, 0; + Vector Q; + Q << 0, 0, 0; + + std::size_t idx = 0; + for (Iterator it = begin; it != end; ++ it, ++ idx) + { + const Point_3& p = get (point_map, *it); + const Vector_3& v = lines_of_sight[idx]; + + Vector n; + n << v.x(), v.y(), v.z(); + + Matrix I_nnt = Matrix::Identity() - n * n.transpose(); + Vector a; + a << p.x(), p.y(), p.z(); + + R += I_nnt; + Q += I_nnt * a; + } + + Solver solver; + solver.compute(R); + if (solver.info() != Eigen::Success) + return std::make_pair (ORIGIN, false); + + Vector p = solver.solve(Q); + if (solver.info() != Eigen::Success) + return std::make_pair (ORIGIN, false); + + return std::make_pair (Point_3(p(0), p(1), p(2)), true); +} + + template + typename ScanAngleMap> void orient_scanline (Iterator begin, Iterator end, PointMap point_map, NormalMap normal_map, - ScanDirectionFlagMap, ScanAngleMap scan_angle_map, - const Tag_true&, // no fallback direction flag - const Tag_false&) // fallback scan angle + const Tag_false&) // no fallback scan angle { using Point_3 = typename boost::property_traits::value_type; using Vector_3 = typename boost::property_traits::value_type; - // Estimate scanner position: - // above point with minimum scan angle - float min_scan_angle = (std::numeric_limits::max)(); - Iterator chosen = begin; - double min_z = (std::numeric_limits::max)(); - double max_z = -(std::numeric_limits::max)(); + Vector_3 direction; + Vector_3 vertical; + std::tie (direction, vertical) + = scanline_base (begin, end, point_map); + std::vector lines_of_sight; + lines_of_sight.reserve (std::distance (begin, end)); + + double mean_z = 0; for (Iterator it = begin; it != end; ++ it) { - const Point_3& p = get (point_map, *it); - min_z = (std::min(min_z, p.z())); - max_z = (std::max(max_z, p.z())); - float scan_angle = get (scan_angle_map, *it); - if (scan_angle < min_scan_angle) + double angle = CGAL_PI * double(get (scan_angle_map, *it)) / 180.; + Vector_3 los = direction * std::sin(angle) + vertical * std::cos(angle); + lines_of_sight.push_back (los); + mean_z += get (point_map, *it).z(); + } + mean_z /= std::distance (begin, end); + +#ifdef CGAL_SCANORIENT_DUMP_RANDOM_SCANLINES + if (rand() % 1000 == 0 && std::distance(begin, end) > 10) + { + std::ofstream ofile ("scanline.polylines.txt"); + ofile.precision(18); + ofile << std::distance (begin, end); + for (Iterator it = begin; it != end; ++ it) + ofile << " " << get(point_map, *it); + ofile << std::endl; + + std::ofstream ofile2 ("base.polylines.txt"); + Point_3 orig = get (point_map, *(begin + std::distance(begin, end) / 2)); + double dist = CGAL::approximate_sqrt (CGAL::squared_distance + (get(point_map, *begin), orig)); + + ofile2.precision(18); + ofile2 << "2 " << orig << " " << orig + direction * dist << std::endl + << "2 " << orig << " " << orig + vertical * dist << std::endl; + } +#endif + + Point_3 scan_position; + bool solver_success; + std::tie (scan_position, solver_success) + = estimate_scan_position (begin, end, point_map, lines_of_sight); + + // If solver failed OR if scan position is detected under the + // scanline (obviously wrong) + if (!solver_success || scan_position.z() < mean_z) + { +#ifdef CGAL_SCANLINE_ORIENT_VERBOSE + if (!solver_success) + std::cerr << "Inverting because olver failed: "; + else + std::cerr << "Inverting because scanner under scanline: "; +#endif + + direction = -direction; + std::size_t idx = 0; + for (Iterator it = begin; it != end; ++ it, ++ idx) { - min_scan_angle = scan_angle; - chosen = it; + double angle = CGAL_PI * double(get (scan_angle_map, *it)) / 180.; + Vector_3 los = direction * std::sin(angle) + vertical * std::cos(angle); + lines_of_sight[idx] = los; } + + std::tie (scan_position, solver_success) + = estimate_scan_position (begin, end, point_map, lines_of_sight); + +#ifdef CGAL_SCANLINE_ORIENT_VERBOSE + if (solver_success && scan_position.z() > mean_z) + std::cerr << "SOLVED" << std::endl; + else if (!solver_success) + std::cerr << "FAILED, solver failure" << std::endl; + else + std::cerr << "FAILED, scanner under scanline" << std::endl; +#endif } - const Point_3& chosen_point = get (point_map, *chosen); - Point_3 scan_position (chosen_point.x(), - chosen_point.y(), - min_z + 10 * (max_z - min_z)); - - for (Iterator it = begin; it != end; ++ it) + std::size_t idx = 0; + for (Iterator it = begin; it != end; ++ it, ++ idx) { - Vector_3 line_of_sight (get(point_map, *it), scan_position); + const Vector_3 los = lines_of_sight[idx]; const Vector_3& normal = get (normal_map, *it); - if (line_of_sight * normal < 0) + if (normal_along_scanline_is_inverted (normal, los)) put (normal_map, *it, -normal); } } template + typename ScanAngleMap> void orient_scanline (Iterator begin, Iterator end, PointMap point_map, NormalMap normal_map, - ScanDirectionFlagMap, ScanAngleMap, - const FallbackFlag&, // either fallback direction flag or not const Tag_true&) // fallback scan angle { using Point_3 = typename boost::property_traits::value_type; using Vector_3 = typename boost::property_traits::value_type; + Vector_3 direction; + Vector_3 vertical; + std::tie (direction, vertical) + = scanline_base (begin, end, point_map); + // Estimate scanner position: // average XY-projected point, located above double mean_x = 0.; double mean_y = 0.; - double min_z = (std::numeric_limits::max)(); double max_z = -(std::numeric_limits::max)(); std::size_t nb = 0; @@ -193,19 +323,23 @@ void orient_scanline (Iterator begin, Iterator end, const Point_3& p = get (point_map, *it); mean_x += p.x(); mean_y += p.y(); - min_z = (std::min(min_z, p.z())); max_z = (std::max(max_z, p.z())); ++ nb; } + Iterator last = end; -- last; + double length = CGAL::approximate_sqrt (CGAL::squared_distance + (get (point_map, *begin), + get (point_map, *last))); + Point_3 scan_position (mean_x / nb, mean_y / nb, - min_z + 10 * (max_z - min_z)); + max_z + length * 2); for (Iterator it = begin; it != end; ++ it) { Vector_3 line_of_sight (get(point_map, *it), scan_position); const Vector_3& normal = get (normal_map, *it); - if (line_of_sight * normal < 0) + if (normal_along_scanline_is_inverted (normal, line_of_sight)) put (normal_map, *it, -normal); } } @@ -353,17 +487,48 @@ void scanline_orient_normals (PointRange& points, const NamedParameters& np) std::size_t nb_scanlines = 1; +#ifdef CGAL_SCANORIENT_DUMP_RANDOM_SCANLINES + std::ofstream ofile ("scanlines.polylines.txt"); + ofile.precision(18); +#endif + + CGAL::Bbox_3 bbox = CGAL::bbox_3 + (boost::make_transform_iterator + (points.begin(), Property_map_to_unary_function(point_map)), + boost::make_transform_iterator + (points.end(), Property_map_to_unary_function(point_map))); + + double bbox_diagonal + = CGAL::approximate_sqrt((bbox.xmax() - bbox.xmin()) * (bbox.xmax() - bbox.xmin()) + + (bbox.ymax() - bbox.ymin()) * (bbox.ymax() - bbox.ymin()) + + (bbox.zmax() - bbox.zmin()) * (bbox.zmax() - bbox.zmin())); + double limit = 0.05 * bbox_diagonal; + Iterator scanline_begin = points.begin(); for (Iterator it = points.begin(); it != points.end(); ++ it) { + bool force_cut = false; + if (it != points.begin()) + { + Iterator prev = it; -- prev; + force_cut = (CGAL::squared_distance (get (point_map, *prev), + get (point_map, *it)) > limit * limit); + } + if (Point_set_processing_3::internal::is_end_of_scanline (scanline_begin, it, point_map, scan_direction_flag_map, - Fallback_scan_direction_flag())) + Fallback_scan_direction_flag()) || force_cut) { Point_set_processing_3::internal::orient_scanline (scanline_begin, it, point_map, normal_map, - scan_direction_flag_map, scan_angle_map, - Fallback_scan_direction_flag(), Fallback_scan_angle()); + scan_angle_map, Fallback_scan_angle()); + +#ifdef CGAL_SCANORIENT_DUMP_RANDOM_SCANLINES + ofile << std::distance (scanline_begin, it); + for (Iterator it2 = scanline_begin; it2 != it; ++ it2) + ofile << " " << get (point_map, *it2); + ofile << std::endl; +#endif scanline_begin = it; ++ nb_scanlines; @@ -372,12 +537,13 @@ void scanline_orient_normals (PointRange& points, const NamedParameters& np) Point_set_processing_3::internal::orient_scanline (scanline_begin, points.end(), point_map, normal_map, - scan_direction_flag_map, scan_angle_map, - Fallback_scan_direction_flag(), Fallback_scan_angle()); + scan_angle_map, Fallback_scan_angle()); +#ifdef CGAL_SCANLINE_ORIENT_VERBOSE std::cerr << nb_scanlines << " scanline(s) identified (mean length = " << std::size_t(points.size() / double(nb_scanlines)) << " point(s))" << std::endl; +#endif } template From 5370a50dd6be860e7b22ac4ca364be4a7435eba0 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 12 Oct 2020 08:15:20 +0200 Subject: [PATCH 07/25] Update doc --- .../include/CGAL/scanline_orient_normals.h | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index 67bdfeef8b6..d3e2639832d 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -379,20 +379,13 @@ void orient_scanline (Iterator begin, Iterator end, Then, the line of sight (estimated vector between a point and the position of the scanner at its time of acquisition) is estimated: - - if both `scan_direction_flag` and `scan_angle` are provided, the - line of sight can be directly computed as a combination of the 2D - vector of the projected scanline, the vertical vector and the + - if `scan_angle` is provided, the line of sight can be directly + computed as a combination of the estimated scanline and of the scan angle. - - if only `scan_angle` is provided, then for each scanline, the - position of the scanner is estimated as being above the point of - the scanline which has the minimum scan angle absolute - value. This method is less optimal than the one using - `scan_direction_flag`. - - - if none of these property maps are provided, then for each - scanline, the position of the scanner is estimated as being above - of the barycenter of the points of the scanline projected on the + - if no scan angle map is provided, then for each scanline, the + position of the scanner is estimated as being above of the + barycenter of the points of the scanline projected on the XY-plane. This fallback method gives suboptimal results. Once the line of sight is estimated for each point, the normals are From 40fbfffeaabb433afcd291a82693d56a7e005b3d Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 12 Oct 2020 13:57:25 +0200 Subject: [PATCH 08/25] Update tutorial with scanline orientation --- .../Tutorials/Tutorial_reconstruction.txt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Documentation/doc/Documentation/Tutorials/Tutorial_reconstruction.txt b/Documentation/doc/Documentation/Tutorials/Tutorial_reconstruction.txt index fb60465bbc0..7a3986f3158 100644 --- a/Documentation/doc/Documentation/Tutorials/Tutorial_reconstruction.txt +++ b/Documentation/doc/Documentation/Tutorials/Tutorial_reconstruction.txt @@ -184,9 +184,21 @@ PCA is faster but jet is more accurate in the presence of high curvatures. These function only estimates the _direction_ of the normals, not their orientation (the orientation of the vectors might not be locally consistent). To properly orient the normals, the -function `mst_orient_normals()` can be used. Notice that it can also -be used directly on input normals if their orientation is not -consistent. +following functions can be used: + +- `mst_orient_normals()` +- `scanline_orient_normals()` + +The first one uses a _minimum spanning tree_ to consistently propagate +the orientation of normals in an increasingly large neighborhood. In +the case of data with many sharp features and occlusions (which are +common in airborne LIDAR data, for example), the second algorithm may +produce better results: it takes advantage of point clouds which are +ordered into scanlines to estimate the line of sight of each point and +thus to orient normals accordingly. + +Notice that these can also be used directly on input normals if their +orientation is not consistent. \snippet Poisson_surface_reconstruction_3/tutorial_example.cpp Normal estimation From c453422a53a45a97378f451e2414070f8f832c55 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 12 Oct 2020 14:27:44 +0200 Subject: [PATCH 09/25] Update from review --- .../CGAL/boost/graph/named_params_helper.h | 4 +- .../CGAL/boost/graph/parameters_interface.h | 4 +- .../orient_scanlines_example.cpp | 12 ++--- .../include/CGAL/scanline_orient_normals.h | 50 +++++++++---------- .../Point_set_normal_estimation_plugin.cpp | 8 +-- 5 files changed, 39 insertions(+), 39 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/named_params_helper.h b/BGL/include/CGAL/boost/graph/named_params_helper.h index 19efd08118b..52df567a4c8 100644 --- a/BGL/include/CGAL/boost/graph/named_params_helper.h +++ b/BGL/include/CGAL/boost/graph/named_params_helper.h @@ -526,7 +526,7 @@ CGAL_DEF_GET_INITIALIZED_INDEX_MAP(face, typename boost::graph_traits::fa }; template - class GetScanDirectionFlag + class GetScanlineIDMap { public: struct NoMap @@ -541,7 +541,7 @@ CGAL_DEF_GET_INITIALIZED_INDEX_MAP(face, typename boost::graph_traits::fa friend void put(const Self&, const key_type&, const value_type&) { } }; typedef typename internal_np::Lookup_named_param_def < - internal_np::scan_direction_flag_t, + internal_np::scanline_id_t, NamedParameters, NoMap//default > ::type type; diff --git a/BGL/include/CGAL/boost/graph/parameters_interface.h b/BGL/include/CGAL/boost/graph/parameters_interface.h index 2de74be459b..306b9cd5021 100644 --- a/BGL/include/CGAL/boost/graph/parameters_interface.h +++ b/BGL/include/CGAL/boost/graph/parameters_interface.h @@ -150,8 +150,8 @@ 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) CGAL_add_named_parameter(adjacencies_t, adjacencies, adjacencies) -CGAL_add_named_parameter(scan_angle_t, scan_angle, scan_angle) -CGAL_add_named_parameter(scan_direction_flag_t, scan_direction_flag, scan_direction_flag) +CGAL_add_named_parameter(scan_angle_t, scan_angle_map, scan_angle_map) +CGAL_add_named_parameter(scanline_id_t, scanline_id_map, scanline_id_map) // 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/orient_scanlines_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp index bb28ef809e0..e9c454119dc 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp @@ -11,7 +11,7 @@ using Point_with_info = std::tuple; using Point_map = CGAL::Nth_of_tuple_property_map<0, Point_with_info>; using Normal_map = CGAL::Nth_of_tuple_property_map<1, Point_with_info>; using Scan_angle_map = CGAL::Nth_of_tuple_property_map<2, Point_with_info>; -using Scan_direction_flag_map = CGAL::Nth_of_tuple_property_map<3, Point_with_info>; +using Scanline_id_map = CGAL::Nth_of_tuple_property_map<3, Point_with_info>; void dump (const char* filename, const std::vector& points) { @@ -38,7 +38,7 @@ int main (int argc, char** argv) CGAL::make_las_point_reader (Point_map()), std::make_pair (Scan_angle_map(), CGAL::LAS_property::Scan_angle()), - std::make_pair (Scan_direction_flag_map(), + std::make_pair (Scanline_id_map(), CGAL::LAS_property::Scan_direction_flag()))) { std::cerr << "Can't read " << fname << std::endl; @@ -57,8 +57,8 @@ int main (int argc, char** argv) (points, CGAL::parameters::point_map (Point_map()). normal_map (Normal_map()). - scan_angle (Scan_angle_map()). - scan_direction_flag (Scan_direction_flag_map())); + scan_angle_map (Scan_angle_map()). + scanline_id_map (Scanline_id_map())); dump("out_angle_and_flag.ply", points); std::cerr << "Orienting normals using scan direction flag only" << std::endl; @@ -66,7 +66,7 @@ int main (int argc, char** argv) (points, CGAL::parameters::point_map (Point_map()). normal_map (Normal_map()). - scan_direction_flag (Scan_direction_flag_map())); + scanline_id_map (Scanline_id_map())); dump("out_flag.ply", points); std::cerr << "Orienting normals using scan angle only" << std::endl; @@ -74,7 +74,7 @@ int main (int argc, char** argv) (points, CGAL::parameters::point_map (Point_map()). normal_map (Normal_map()). - scan_angle (Scan_angle_map())); + scan_angle_map (Scan_angle_map())); dump("out_angle.ply", points); std::cerr << "Orienting normals using no additional info" << std::endl; diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index d3e2639832d..a6e8ae5e216 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -43,21 +43,21 @@ const Vector_3& vertical_vector() } template + typename ScanlineIDMap> bool is_end_of_scanline (Iterator scanline_begin, Iterator it, PointMap, - ScanDirectionFlagMap scan_direction_flag_map, + ScanlineIDMap scanline_id_map, const Tag_false&) // no fallback { - return (get (scan_direction_flag_map, *scanline_begin) - != get (scan_direction_flag_map, *it)); + return (get (scanline_id_map, *scanline_begin) + != get (scanline_id_map, *it)); } template + typename ScanlineIDMap> bool is_end_of_scanline (Iterator scanline_begin, Iterator it, PointMap point_map, - ScanDirectionFlagMap, + ScanlineIDMap, const Tag_true&) // fallback { using Point_3 = typename boost::property_traits::value_type; @@ -219,7 +219,7 @@ void orient_scanline (Iterator begin, Iterator end, double mean_z = 0; for (Iterator it = begin; it != end; ++ it) { - double angle = CGAL_PI * double(get (scan_angle_map, *it)) / 180.; + double angle = CGAL_PI * static_cast(get (scan_angle_map, *it)) / 180.; Vector_3 los = direction * std::sin(angle) + vertical * std::cos(angle); lines_of_sight.push_back (los); mean_z += get (point_map, *it).z(); @@ -267,7 +267,7 @@ void orient_scanline (Iterator begin, Iterator end, std::size_t idx = 0; for (Iterator it = begin; it != end; ++ it, ++ idx) { - double angle = CGAL_PI * double(get (scan_angle_map, *it)) / 180.; + double angle = CGAL_PI * static_cast(get (scan_angle_map, *it)) / 180.; Vector_3 los = direction * std::sin(angle) + vertical * std::cos(angle); lines_of_sight[idx] = los; } @@ -367,7 +367,7 @@ void orient_scanline (Iterator begin, Iterator end, First, scanlines are estimated as subranges of `points` by iterating on `points`: - - if the named parameter `scan_direction_flag` is provided, the + - if the named parameter `scanline_id_map` is provided, the range is cutted everytime the flag (which tells if the scanner was moving in the positive or negative direction) changes. @@ -389,11 +389,11 @@ void orient_scanline (Iterator begin, Iterator end, XY-plane. This fallback method gives suboptimal results. Once the line of sight is estimated for each point, the normals are - oriented by checking if, for one each, the line of sight and the + oriented by checking, for each of them, if the line of sight and the normal vector give a positive scalar product. If they don't, then the normal vector is inverted. - \note this method gives optimal results when `scan_direction_flag` + \note this method gives optimal results when `scanline_id_map` and `scan_angle` are provided. Correct results may still be produced in the absence of either one or both of these properties, as long as the point set is ordered in 2.5D scanlines. @@ -419,15 +419,15 @@ void orient_scanline (Iterator begin, Iterator end, \cgalParamNEnd \cgalParamNBegin{scan_angle_map} - \cgalParamDescription{a property map associating the angle of acquisition to the elements of the point set `points`} + \cgalParamDescription{a property map associating the angle of acquisition (in degrees) to the elements of the point set `points`} \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type - of the iterator of `PointRange` and whose value type is `float`} + of the iterator of `PointRange` and whose value type is convertible to `double`} \cgalParamNEnd - \cgalParamNBegin{scan_direction_flag} - \cgalParamDescription{a property map associating a flag describing the direction of the acquisition to the elements of the point set `points`} + \cgalParamNBegin{scanline_id_map} + \cgalParamDescription{a property map associating a scanline ID to the elements of the point set `points`. A scanline is detected as a consecutive subrange of items in the input range `point` whose ID. IDs do not need to be unique, they just need to be different for two consecutive scanlines. The LAS property `scan_direction_flag` (whose values are either 0 or 1 depending on the direction of the scanner) can be used.} \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type - of the iterator of `PointRange` and whose value type is `unsigned char`} + of the iterator of `PointRange` and whose value type is a model of `EqualityComparable`} \cgalParamNEnd \cgalParamNBegin{geom_traits} @@ -451,7 +451,7 @@ void scanline_orient_normals (PointRange& points, const NamedParameters& np) using Vector_3 = typename Kernel::Vector_3; using ScanAngleMap = typename Point_set_processing_3::GetScanAngleMap ::type; - using ScanDirectionFlagMap = typename Point_set_processing_3::GetScanDirectionFlag + using ScanlineIDMap = typename Point_set_processing_3::GetScanlineIDMap ::type; CGAL_static_assertion_msg(!(std::is_same::NoMap>::value>; - using Fallback_scan_direction_flag + using Fallback_scanline_ID = Boolean_tag - ::NoMap>::value>; PointMap point_map = choose_parameter(get_parameter(np, internal_np::point_map)); NormalMap normal_map = choose_parameter(get_parameter(np, internal_np::normal_map)); ScanAngleMap scan_angle_map = choose_parameter - (get_parameter(np, internal_np::scan_angle)); - ScanDirectionFlagMap scan_direction_flag_map = choose_parameter - (get_parameter(np, internal_np::scan_direction_flag)); + (get_parameter(np, internal_np::scan_angle_map)); + ScanlineIDMap scanline_id_map = choose_parameter + (get_parameter(np, internal_np::scanline_id_map)); std::size_t nb_scanlines = 1; @@ -509,8 +509,8 @@ void scanline_orient_normals (PointRange& points, const NamedParameters& np) } if (Point_set_processing_3::internal::is_end_of_scanline - (scanline_begin, it, point_map, scan_direction_flag_map, - Fallback_scan_direction_flag()) || force_cut) + (scanline_begin, it, point_map, scanline_id_map, + Fallback_scanline_ID()) || force_cut) { Point_set_processing_3::internal::orient_scanline (scanline_begin, it, point_map, normal_map, diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_normal_estimation_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_normal_estimation_plugin.cpp index 960adb5b9ca..f4168605e37 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_normal_estimation_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_normal_estimation_plugin.cpp @@ -429,22 +429,22 @@ void Polyhedron_demo_point_set_normal_estimation_plugin::on_actionNormalOrientat std::cerr << " using scan direction flag" << std::endl; CGAL::scanline_orient_normals(points->all_or_selection_if_not_empty(), points->parameters(). - scan_direction_flag (scan_direction_flag)); + scanline_id_map (scan_direction_flag)); } else if (angle_found && !flag_found) { std::cerr << " using scan angle" << std::endl; CGAL::scanline_orient_normals(points->all_or_selection_if_not_empty(), points->parameters(). - scan_angle (scan_angle)); + scan_angle_map (scan_angle)); } else // if (angle_found && flag_found) { std::cerr << " using scan angle and direction flag" << std::endl; CGAL::scanline_orient_normals(points->all_or_selection_if_not_empty(), points->parameters(). - scan_angle (scan_angle). - scan_direction_flag (scan_direction_flag)); + scan_angle_map (scan_angle). + scanline_id_map (scan_direction_flag)); } std::size_t memory = CGAL::Memory_sizer().virtual_size(); std::cerr << "Orient normals: " From 43d4a5530aada990fe30117863e4401b862d8c46 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 13 Oct 2020 14:02:59 +0200 Subject: [PATCH 10/25] Use constant property maps and remove helpers --- .../CGAL/boost/graph/named_params_helper.h | 44 ------------------- .../include/CGAL/scanline_orient_normals.h | 27 +++++------- 2 files changed, 11 insertions(+), 60 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/named_params_helper.h b/BGL/include/CGAL/boost/graph/named_params_helper.h index 52df567a4c8..4f589134439 100644 --- a/BGL/include/CGAL/boost/graph/named_params_helper.h +++ b/BGL/include/CGAL/boost/graph/named_params_helper.h @@ -503,50 +503,6 @@ CGAL_DEF_GET_INITIALIZED_INDEX_MAP(face, typename boost::graph_traits::fa > ::type type; }; - template - class GetScanAngleMap - { - public: - struct NoMap - { - typedef typename std::iterator_traits::value_type key_type; - typedef float value_type; - typedef value_type reference; - typedef boost::read_write_property_map_tag category; - - typedef NoMap Self; - friend reference get(const Self&, const key_type&) { return 0.f; } - friend void put(const Self&, const key_type&, const value_type&) { } - }; - typedef typename internal_np::Lookup_named_param_def < - internal_np::scan_angle_t, - NamedParameters, - NoMap//default - > ::type type; - }; - - template - class GetScanlineIDMap - { - public: - struct NoMap - { - typedef typename std::iterator_traits::value_type key_type; - typedef unsigned char value_type; - typedef value_type reference; - typedef boost::read_write_property_map_tag category; - - typedef NoMap Self; - friend reference get(const Self&, const key_type&) { return 0; } - friend void put(const Self&, const key_type&, const value_type&) { } - }; - typedef typename internal_np::Lookup_named_param_def < - internal_np::scanline_id_t, - NamedParameters, - NoMap//default - > ::type type; - }; - } // namespace Point_set_processing_3 template diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index a6e8ae5e216..23f5b18bc4a 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -444,33 +444,28 @@ void scanline_orient_normals (PointRange& points, const NamedParameters& np) using parameters::get_parameter; using Iterator = typename PointRange::iterator; + using Value_type = typename std::iterator_traits::value_type; using PointMap = typename CGAL::GetPointMap::type; using NormalMap = typename Point_set_processing_3::GetNormalMap::type; using Kernel = typename Point_set_processing_3::GetK::Kernel; using Point_3 = typename Kernel::Point_3; using Vector_3 = typename Kernel::Vector_3; - using ScanAngleMap = typename Point_set_processing_3::GetScanAngleMap - ::type; - using ScanlineIDMap = typename Point_set_processing_3::GetScanlineIDMap - ::type; + + using No_map = Constant_property_map; + + using ScanAngleMap = typename internal_np::Lookup_named_param_def + ::type; + using Fallback_scan_angle = Boolean_tag::value>; + + using ScanlineIDMap = typename internal_np::Lookup_named_param_def + ::type; + using Fallback_scanline_ID = Boolean_tag::value>; CGAL_static_assertion_msg(!(std::is_same::NoMap>::value), "Error: no normal map"); - using Fallback_scan_angle - = Boolean_tag - ::NoMap>::value>; - using Fallback_scanline_ID - = Boolean_tag - ::NoMap>::value>; - - PointMap point_map = choose_parameter(get_parameter(np, internal_np::point_map)); NormalMap normal_map = choose_parameter(get_parameter(np, internal_np::normal_map)); ScanAngleMap scan_angle_map = choose_parameter From 613dc2ce381c2b007e925398ba2ad4119fc5950c Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 13 Oct 2020 14:05:41 +0200 Subject: [PATCH 11/25] Fix documentation --- .../include/CGAL/scanline_orient_normals.h | 51 ++++++++++++------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index 23f5b18bc4a..369e5fe7db4 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -356,10 +356,10 @@ void orient_scanline (Iterator begin, Iterator end, /** \ingroup PkgPointSetProcessing3Algorithms - Orients the normals of the range of `points` by estimating a line + orients the normals of the range of `points` by estimating a line of sight and checking its consistency with the current normal orientation. - \warning this function requires the input `points` to be ordered + \warning This function requires the input `points` to be ordered along scanlines aligned on the XY-plane. It is typically designed for 2.5D urban datasets acquired through, for example, airborne LIDAR devices. @@ -367,13 +367,12 @@ void orient_scanline (Iterator begin, Iterator end, First, scanlines are estimated as subranges of `points` by iterating on `points`: - - if the named parameter `scanline_id_map` is provided, the - range is cutted everytime the flag (which tells if the scanner - was moving in the positive or negative direction) changes. + - if the named parameter `scanline_id_map` is provided, the range + is cutted everytime the id changes. - - if no direction flag map is provided, a fallback method simply - cuts the range everytime 3 consecutive points form an acute angle - on the projected XY-plane. This fallback method gives suboptimal + - if no scanline ID map is provided, a fallback method simply cuts + the range everytime 3 consecutive points form an acute angle on + the projected XY-plane. This fallback method gives suboptimal results. Then, the line of sight (estimated vector between a point and the @@ -393,7 +392,7 @@ void orient_scanline (Iterator begin, Iterator end, normal vector give a positive scalar product. If they don't, then the normal vector is inverted. - \note this method gives optimal results when `scanline_id_map` + \note This method gives optimal results when `scanline_id_map` and `scan_angle` are provided. Correct results may still be produced in the absence of either one or both of these properties, as long as the point set is ordered in 2.5D scanlines. @@ -413,21 +412,37 @@ void orient_scanline (Iterator begin, Iterator end, \cgalParamNEnd \cgalParamNBegin{normal_map} - \cgalParamDescription{a property map associating normals to the elements of the point set `points`} - \cgalParamType{a model of `WritablePropertyMap` whose key type is the value type - of the iterator of `PointRange` and whose value type is `geom_traits::Vector_3`} + \cgalParamDescription{a property map associating normals to the + elements of the point set `points`} + \cgalParamType{a model of `WritablePropertyMap` whose key type + is the value type of the iterator of + `PointRange` and whose value type is + `geom_traits::Vector_3`} \cgalParamNEnd \cgalParamNBegin{scan_angle_map} - \cgalParamDescription{a property map associating the angle of acquisition (in degrees) to the elements of the point set `points`} - \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type - of the iterator of `PointRange` and whose value type is convertible to `double`} + \cgalParamDescription{a property map associating the angle of + acquisition (in degrees) to the elements of the point set + `points`} + \cgalParamType{a model of `ReadablePropertyMap` whose key type + is the value type of the iterator of + `PointRange` and whose value type is convertible + to `double`} \cgalParamNEnd \cgalParamNBegin{scanline_id_map} - \cgalParamDescription{a property map associating a scanline ID to the elements of the point set `points`. A scanline is detected as a consecutive subrange of items in the input range `point` whose ID. IDs do not need to be unique, they just need to be different for two consecutive scanlines. The LAS property `scan_direction_flag` (whose values are either 0 or 1 depending on the direction of the scanner) can be used.} - \cgalParamType{a model of `ReadablePropertyMap` whose key type is the value type - of the iterator of `PointRange` and whose value type is a model of `EqualityComparable`} + \cgalParamDescription{a property map associating a scanline ID + to the elements of the point set `points`. A scanline is + detected as a consecutive subrange of items in the input range + `point` whose ID is identical. IDs do not need to be unique, + they just need to be different for two consecutive + scanlines. The LAS property `scan_direction_flag` (whose values + are either 0 or 1 depending on the direction of the scanner) + can be used.} + \cgalParamType{a model of `ReadablePropertyMap` whose key type + is the value type of the iterator of + `PointRange` and whose value type is a model of + `EqualityComparable`} \cgalParamNEnd \cgalParamNBegin{geom_traits} From 1841da13f019f046d92c663a576753aaa0587410 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 13 Oct 2020 14:20:39 +0200 Subject: [PATCH 12/25] Update test --- BGL/test/BGL/test_cgal_bgl_named_params.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/BGL/test/BGL/test_cgal_bgl_named_params.cpp b/BGL/test/BGL/test_cgal_bgl_named_params.cpp index 1a2c89555b7..000cd6b7b6f 100644 --- a/BGL/test/BGL/test_cgal_bgl_named_params.cpp +++ b/BGL/test/BGL/test_cgal_bgl_named_params.cpp @@ -265,6 +265,8 @@ void test(const NamedParameters& np) check_same_type<9032>(get_parameter(np, CGAL::internal_np::inspector)); check_same_type<9033>(get_parameter(np, CGAL::internal_np::logger)); check_same_type<9034>(get_parameter(np, CGAL::internal_np::maximum_normal_deviation)); + check_same_type<9035>(get_parameter(np, CGAL::internal_np::scan_angle_map)); + check_same_type<9036>(get_parameter(np, CGAL::internal_np::scanline_id_map)); } int main() @@ -391,6 +393,8 @@ int main() .inspector(A<9032>(9032)) .logger(A<9033>(9033)) .maximum_normal_deviation(A<9034>(9034)) + .scan_angle_map(A<9035>(9035)) + .scanline_id_map(A<9036>(9036)) .maximum_number_of_faces(A<78910>(78910)) ); return EXIT_SUCCESS; From f0f93f0e7e914516c8b42b20e7a2e23cd0f8eebf Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 13 Oct 2020 14:35:41 +0200 Subject: [PATCH 13/25] Typo fix --- Point_set_processing_3/include/CGAL/scanline_orient_normals.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index 369e5fe7db4..715ce81812f 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -434,7 +434,7 @@ void orient_scanline (Iterator begin, Iterator end, \cgalParamDescription{a property map associating a scanline ID to the elements of the point set `points`. A scanline is detected as a consecutive subrange of items in the input range - `point` whose ID is identical. IDs do not need to be unique, + `point` whose ID are identical. IDs do not need to be unique, they just need to be different for two consecutive scanlines. The LAS property `scan_direction_flag` (whose values are either 0 or 1 depending on the direction of the scanner) From 16b819aec9b19534b59cbd366e0cde4750245447 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 13 Oct 2020 15:40:16 +0200 Subject: [PATCH 14/25] Add Eigen macro conditions --- Point_set_processing_3/include/CGAL/scanline_orient_normals.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index 715ce81812f..a728128db5d 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -23,6 +23,8 @@ #include +#ifdef CGAL_EIGEN3_ENABLED + //#define CGAL_SCANLINE_ORIENT_VERBOSE namespace CGAL @@ -157,7 +159,6 @@ estimate_scan_position (Iterator begin, Iterator end, PointMap point_map, const std::vector& lines_of_sight) { using Point_3 = typename boost::property_traits::value_type; - typedef Eigen::Matrix3d Matrix; typedef Eigen::Vector3d Vector; typedef Eigen::ConjugateGradient Solver; @@ -558,5 +559,6 @@ void scanline_orient_normals (PointRange& points) } // namespace CGAL +#endif // CGAL_EIGEN3_ENABLED #endif // CGAL_SCANLINE_ORIENT_NORMALS_H From e35fdf852b5f5832fbeacee48a1a299359942a55 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 19 Oct 2020 07:55:07 +0200 Subject: [PATCH 15/25] Add missing eigen include --- Point_set_processing_3/include/CGAL/scanline_orient_normals.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index a728128db5d..1a58a0dd09f 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -25,6 +25,8 @@ #ifdef CGAL_EIGEN3_ENABLED +#include + //#define CGAL_SCANLINE_ORIENT_VERBOSE namespace CGAL From c39ba1056e9ca1ecbb8cf17a6a1535be063195ed Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 20 Oct 2020 13:51:32 +0200 Subject: [PATCH 16/25] Add missing eigen include --- Point_set_processing_3/include/CGAL/scanline_orient_normals.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index 1a58a0dd09f..a5b26bfe938 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -26,6 +26,7 @@ #ifdef CGAL_EIGEN3_ENABLED #include +#include //#define CGAL_SCANLINE_ORIENT_VERBOSE From d18609cb28dec4b27f5168b8198cfccf49cc9cf2 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 4 Nov 2020 11:06:12 +0100 Subject: [PATCH 17/25] Fix max for windows --- Point_set_processing_3/include/CGAL/scanline_orient_normals.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index a5b26bfe938..ecca42d9e11 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -327,7 +327,7 @@ void orient_scanline (Iterator begin, Iterator end, const Point_3& p = get (point_map, *it); mean_x += p.x(); mean_y += p.y(); - max_z = (std::max(max_z, p.z())); + max_z = (std::max)(max_z, p.z()); ++ nb; } From 9fd32d12983df16c28177af9de3bf5b5f745b7b8 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 4 Nov 2020 11:07:26 +0100 Subject: [PATCH 18/25] Remove useless using --- Point_set_processing_3/include/CGAL/scanline_orient_normals.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index ecca42d9e11..cee8baa4378 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -467,8 +467,6 @@ void scanline_orient_normals (PointRange& points, const NamedParameters& np) using PointMap = typename CGAL::GetPointMap::type; using NormalMap = typename Point_set_processing_3::GetNormalMap::type; using Kernel = typename Point_set_processing_3::GetK::Kernel; - using Point_3 = typename Kernel::Point_3; - using Vector_3 = typename Kernel::Vector_3; using No_map = Constant_property_map; From 7f7e732745a7f991b175752085ef48313c5a66fe Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 4 Nov 2020 11:53:26 +0100 Subject: [PATCH 19/25] Add missing data set --- .../Point_set_processing_3/data/urban.las | Bin 0 -> 459601 bytes .../orient_scanlines_example.cpp | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 Point_set_processing_3/examples/Point_set_processing_3/data/urban.las diff --git a/Point_set_processing_3/examples/Point_set_processing_3/data/urban.las b/Point_set_processing_3/examples/Point_set_processing_3/data/urban.las new file mode 100644 index 0000000000000000000000000000000000000000..57da02b630106ed458b4159659f98729cb5d6aab GIT binary patch literal 459601 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

Y= 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 literal 0 HcmV?d00001 diff --git a/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp index e9c454119dc..90bb4a11917 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp @@ -26,7 +26,7 @@ void dump (const char* filename, const std::vector& points) int main (int argc, char** argv) { - std::string fname (argc > 1 ? argv[1] : "data/test.las"); + std::string fname (argc > 1 ? argv[1] : "data/urban.las"); std::vector points; From 06cce4cc90e4c7b06e10d00096938fdf12e75edd Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Thu, 5 Nov 2020 09:35:57 +0100 Subject: [PATCH 20/25] Fix Eigen error by passing matrix directly in constructor --- Point_set_processing_3/include/CGAL/scanline_orient_normals.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index cee8baa4378..160cd288207 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -188,8 +188,8 @@ estimate_scan_position (Iterator begin, Iterator end, PointMap point_map, Q += I_nnt * a; } - Solver solver; - solver.compute(R); + Solver solver(R); + if (solver.info() != Eigen::Success) return std::make_pair (ORIGIN, false); From c472257f0e51e246b0ecc8936873d90dce485f07 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Thu, 5 Nov 2020 09:36:18 +0100 Subject: [PATCH 21/25] Fix unused using --- Point_set_processing_3/include/CGAL/scanline_orient_normals.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index 160cd288207..8a365e6745b 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -466,7 +466,6 @@ void scanline_orient_normals (PointRange& points, const NamedParameters& np) using Value_type = typename std::iterator_traits::value_type; using PointMap = typename CGAL::GetPointMap::type; using NormalMap = typename Point_set_processing_3::GetNormalMap::type; - using Kernel = typename Point_set_processing_3::GetK::Kernel; using No_map = Constant_property_map; From e6c23195ed4661318d0bbd6d47e7e4325c9a16b1 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 9 Nov 2020 08:36:38 +0100 Subject: [PATCH 22/25] Update CHANGES.md --- Installation/CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index 77d00fc216a..3067e6db1a7 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -292,6 +292,7 @@ Release date: September 2020 which computes the registration transformation for two point sets using ICP algorithm implemented in the third party library [libpointmatcher](https://github.com/ethz-asl/libpointmatcher), and registers the points sets by transforming the data point set using the computed transformation. +- Added a function [`CGAL::scanline_orient_normals()`](https://doc.cgal.org/5.1/Point_set_processing_3/group__PkgPointSetProcessing3Algorithms.html#ga221d4efde44f42aefe153cb927138efe) that orients a point cloud by estimating a line of sight. ### [2D Triangulations](https://doc.cgal.org/5.1/Manual/packages.html#PkgTriangulation2) From bce99e7768a82abb4af9e805a7331a90d01b46ba Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 9 Nov 2020 08:36:45 +0100 Subject: [PATCH 23/25] Fix uncompiled doc --- Point_set_processing_3/include/CGAL/scanline_orient_normals.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h index 8a365e6745b..41cfbc15bfa 100644 --- a/Point_set_processing_3/include/CGAL/scanline_orient_normals.h +++ b/Point_set_processing_3/include/CGAL/scanline_orient_normals.h @@ -23,7 +23,7 @@ #include -#ifdef CGAL_EIGEN3_ENABLED +#if defined(CGAL_EIGEN3_ENABLED) || defined(DOXYGEN_RUNNING) #include #include From 62363704020de906aa9f55fc60598e7d529a9694 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 9 Nov 2020 14:31:42 +0100 Subject: [PATCH 24/25] Update Installation/CHANGES.md Co-authored-by: Laurent Rineau --- Installation/CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index 3067e6db1a7..9f1e16cdfa9 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -292,7 +292,7 @@ Release date: September 2020 which computes the registration transformation for two point sets using ICP algorithm implemented in the third party library [libpointmatcher](https://github.com/ethz-asl/libpointmatcher), and registers the points sets by transforming the data point set using the computed transformation. -- Added a function [`CGAL::scanline_orient_normals()`](https://doc.cgal.org/5.1/Point_set_processing_3/group__PkgPointSetProcessing3Algorithms.html#ga221d4efde44f42aefe153cb927138efe) that orients a point cloud by estimating a line of sight. +- Added a function [`CGAL::scanline_orient_normals()`](https://doc.cgal.org/5.2/Point_set_processing_3/group__PkgPointSetProcessing3Algorithms.html#ga221d4efde44f42aefe153cb927138efe) that orients a point cloud by estimating a line of sight. ### [2D Triangulations](https://doc.cgal.org/5.1/Manual/packages.html#PkgTriangulation2) From d998347f919b08ae95eb53a1457360789e70ae61 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 10 Nov 2020 08:25:48 +0100 Subject: [PATCH 25/25] Move section in CHANGES.md to the correct release --- Installation/CHANGES.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index 9f1e16cdfa9..1402e8822ab 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -43,6 +43,9 @@ Release date: December 2020 - Added an optional range parameter to `CGAL::Polygon_mesh_processing::stitch_borders()`, which can be used to specify which boundary cycles are eligible for stitching. +### [Point Set Processing](https://doc.cgal.org/5.2/Manual/packages.html#PkgPointSetProcessing3) +- Added a function [`CGAL::scanline_orient_normals()`](https://doc.cgal.org/5.2/Point_set_processing_3/group__PkgPointSetProcessing3Algorithms.html#ga221d4efde44f42aefe153cb927138efe) that orients a point cloud by estimating a line of sight. + ### [Classification](https://doc.cgal.org/5.2/Manual/packages.html#PkgClassification) - **Breaking change**: new IO format for `ETHZ::Random_Forest` (a @@ -292,7 +295,6 @@ Release date: September 2020 which computes the registration transformation for two point sets using ICP algorithm implemented in the third party library [libpointmatcher](https://github.com/ethz-asl/libpointmatcher), and registers the points sets by transforming the data point set using the computed transformation. -- Added a function [`CGAL::scanline_orient_normals()`](https://doc.cgal.org/5.2/Point_set_processing_3/group__PkgPointSetProcessing3Algorithms.html#ga221d4efde44f42aefe153cb927138efe) that orients a point cloud by estimating a line of sight. ### [2D Triangulations](https://doc.cgal.org/5.1/Manual/packages.html#PkgTriangulation2)