CortidQCT  1.2.2.52
DisplacementOptimizer.h
Go to the documentation of this file.
1 
13 #pragma once
14 
15 #include "MeasurementModel.h"
16 #include "MeshFitter.h"
17 #include "MeshHelpers.h"
18 #include "Sampler.h"
19 
20 #include <Eigen/Core>
21 
22 namespace CortidQCT {
23 
24 namespace Internal {
25 
26 #pragma clang diagnostic push
27 #pragma clang diagnostic ignored "-Wpadded"
28 
36 public:
37  using DisplacementsWeightsPair = std::pair<Eigen::VectorXf, Eigen::VectorXf>;
38 
39  explicit DisplacementOptimizer(MeshFitter::Configuration const &config);
40 
44  template <class DerivedN, class DerivedL, class DerivedM>
45  DisplacementsWeightsPair
46  operator()(Eigen::MatrixBase<DerivedN> const &N,
47  Eigen::MatrixBase<DerivedL> const &labels,
48  Eigen::MatrixBase<DerivedM> const &measurements,
49  std::size_t nonDecrease, float &effectiveSigmaS);
50 
54  template <class DerivedN, class DerivedL, class DerivedM>
55  Eigen::Matrix<typename DerivedM::Scalar, Eigen::Dynamic, 1>
56  logLikelihoodVector(Eigen::MatrixBase<DerivedN> const &N,
57  Eigen::MatrixBase<DerivedL> const &labels,
58  Eigen::MatrixBase<DerivedM> const &measurements);
59 
63  template <class DerivedN, class DerivedL, class DerivedM>
64  float logLikelihood(Eigen::MatrixBase<DerivedN> const &N,
65  Eigen::MatrixBase<DerivedL> const &labels,
66  Eigen::MatrixBase<DerivedM> const &measurements);
67 
71  inline auto const &modelSamplingPositions() const noexcept {
72  return modelSamplingPositions_;
73  }
74 
75 private:
76  using ModelSamplingPositionMatrix = Eigen::Matrix<float, Eigen::Dynamic, 4>;
77 
78  MeshFitter::Configuration const &config_;
79  MeasurementModel const &model_;
80  ModelSampler modelSampler_;
81  ModelSamplingPositionMatrix modelSamplingPositions_;
82  float currentSigma_;
83 };
84 #pragma clang diagnostic pop
85 
86 extern template DisplacementOptimizer::DisplacementsWeightsPair
87 DisplacementOptimizer::
88 operator()<NormalMatrix<float>, LabelVector, Eigen::VectorXf>(
89  Eigen::MatrixBase<NormalMatrix<float>> const &,
90  Eigen::MatrixBase<LabelVector> const &,
91  Eigen::MatrixBase<Eigen::VectorXf> const &, std::size_t, float &);
92 
93 extern template DisplacementOptimizer::DisplacementsWeightsPair
94 DisplacementOptimizer::
95 operator()<NormalMatrix<double>, LabelVector, Eigen::VectorXd>(
96  Eigen::MatrixBase<NormalMatrix<double>> const &,
97  Eigen::MatrixBase<LabelVector> const &,
98  Eigen::MatrixBase<Eigen::VectorXd> const &, std::size_t, float &);
99 
100 extern template DisplacementOptimizer::DisplacementsWeightsPair
101 DisplacementOptimizer::operator()<
102  Eigen::Transpose<const Eigen::Map<Eigen::Matrix<float, 3, Eigen::Dynamic>>>,
103  Eigen::Map<LabelVector>, Eigen::Map<Eigen::VectorXf>>(
104  Eigen::MatrixBase<Eigen::Transpose<
105  const Eigen::Map<Eigen::Matrix<float, 3, Eigen::Dynamic>>>> const &,
106  Eigen::MatrixBase<Eigen::Map<LabelVector>> const &,
107  Eigen::MatrixBase<Eigen::Map<Eigen::VectorXf>> const &, std::size_t,
108  float &);
109 
110 extern template DisplacementOptimizer::DisplacementsWeightsPair
111 DisplacementOptimizer::operator()<
112  Eigen::Transpose<Eigen::Map<Eigen::Matrix<float, 3, Eigen::Dynamic>>>,
113  Eigen::Map<LabelVector>, Eigen::Map<Eigen::VectorXf>>(
114  Eigen::MatrixBase<Eigen::Transpose<
115  Eigen::Map<Eigen::Matrix<float, 3, Eigen::Dynamic>>>> const &,
116  Eigen::MatrixBase<Eigen::Map<LabelVector>> const &,
117  Eigen::MatrixBase<Eigen::Map<Eigen::VectorXf>> const &, std::size_t,
118  float &);
119 
120 extern template float DisplacementOptimizer::logLikelihood<
121  Eigen::Transpose<const Eigen::Map<Eigen::Matrix<float, 3, Eigen::Dynamic>>>,
122  Eigen::Map<LabelVector>, Eigen::Map<Eigen::VectorXf>>(
123  Eigen::MatrixBase<Eigen::Transpose<
124  const Eigen::Map<Eigen::Matrix<float, 3, Eigen::Dynamic>>>> const &,
125  Eigen::MatrixBase<Eigen::Map<LabelVector>> const &,
126  Eigen::MatrixBase<Eigen::Map<Eigen::VectorXf>> const &);
127 
128 extern template Eigen::Matrix<float, Eigen::Dynamic, 1>
130  Eigen::Transpose<const Eigen::Map<Eigen::Matrix<float, 3, Eigen::Dynamic>>>,
131  Eigen::Map<LabelVector>, Eigen::Map<Eigen::VectorXf>>(
132  Eigen::MatrixBase<Eigen::Transpose<
133  const Eigen::Map<Eigen::Matrix<float, 3, Eigen::Dynamic>>>> const &,
134  Eigen::MatrixBase<Eigen::Map<LabelVector>> const &,
135  Eigen::MatrixBase<Eigen::Map<Eigen::VectorXf>> const &);
136 
137 } // namespace Internal
138 
139 } // namespace CortidQCT
Configuration type for MeshFitter.
Definition: MeshFitter.h:39
Name namespace for CortidQCT library.
Definition: CortidQCT.h:23
float logLikelihood(Eigen::MatrixBase< DerivedN > const &N, Eigen::MatrixBase< DerivedL > const &labels, Eigen::MatrixBase< DerivedM > const &measurements)
Compute the log likelihood of the current model.
Definition: DisplacementOptimizer.cpp:220
DisplacementsWeightsPair operator()(Eigen::MatrixBase< DerivedN > const &N, Eigen::MatrixBase< DerivedL > const &labels, Eigen::MatrixBase< DerivedM > const &measurements, std::size_t nonDecrease, float &effectiveSigmaS)
Compute the optimal displacement and the corresponding weights.
Definition: DisplacementOptimizer.cpp:89
This header contains mesh related helper functions.
Type representing the measurement model.
Definition: MeasurementModel.h:33
This private head contains the definition of the Sampler type.
Eigen::Matrix< typename DerivedM::Scalar, Eigen::Dynamic, 1 > logLikelihoodVector(Eigen::MatrixBase< DerivedN > const &N, Eigen::MatrixBase< DerivedL > const &labels, Eigen::MatrixBase< DerivedM > const &measurements)
Computes the per-veretx log likelihood of the current model.
Definition: DisplacementOptimizer.cpp:192
Definition: Sampler.h:133
This header contains the definition of the MeasurementModel type.
auto const & modelSamplingPositions() const noexcept
Returns the model sampling positions used by the optimizer.
Definition: DisplacementOptimizer.h:71
Definition: DisplacementOptimizer.h:35