MCPcopy Create free account
hub / github.com/PRBonn/MapClosures / ComputeMeanAndNormal

Function ComputeMeanAndNormal

cpp/map_closures/VoxelMap.cpp:42–61  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40static constexpr unsigned int min_points_for_covariance_computation = 10;
41
42std::tuple<Eigen::Vector3d, Eigen::Vector3d> ComputeMeanAndNormal(
43 const map_closures::VoxelBlock &coordinates) {
44 const double num_points = static_cast<double>(coordinates.size());
45 Eigen::Vector3d mean =
46 std::reduce(coordinates.cbegin(), coordinates.cend(), Eigen::Vector3d().setZero()) /
47 num_points;
48
49 const Eigen::Matrix3d covariance =
50 std::transform_reduce(coordinates.cbegin(), coordinates.cend(), Eigen::Matrix3d().setZero(),
51 std::plus<Eigen::Matrix3d>(),
52 [&mean](const Eigen::Vector3d &point) {
53 Eigen::Vector3d centered = point - mean;
54 Eigen::Matrix3d S = centered * centered.transpose();
55 return S;
56 }) /
57 (num_points - 1);
58 const Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> solver(covariance);
59 Eigen::Vector3d normal = solver.eigenvectors().col(0);
60 return {std::move(mean), std::move(normal)};
61}
62
63} // namespace
64

Callers 1

PerVoxelMeanAndNormalMethod · 0.85

Calls 3

sizeMethod · 0.80
cbeginMethod · 0.80
cendMethod · 0.80

Tested by

no test coverage detected