 |
AliceVision
Photogrammetric Computer Vision Framework
|
9 #include <aliceVision/config.hpp>
10 #include <aliceVision/numeric/numeric.hpp>
11 #include <aliceVision/robustEstimation/conditioning.hpp>
12 #include <aliceVision/robustEstimation/ISolver.hpp>
13 #include <aliceVision/robustEstimation/IRansacKernel.hpp>
14 #include <aliceVision/robustEstimation/PointFittingKernel.hpp>
17 namespace robustEstimation {
31 template<
typename SolverT_,
typename ErrorT_,
typename ModelT_,
typename SolverLsT_ = robustEstimation::UndefinedSolver<ModelT_>>
48 std::size_t getMinimumNbRequiredSamplesLS()
const override {
return _solverLs.getMinimumNbRequiredSamples(); }
63 void fit(
const std::vector<std::size_t>& samples, std::vector<ModelT_>& models)
const override {
PFKernel::fit(samples, models); }
65 void fitLS(
const std::vector<std::size_t>& inliers, std::vector<ModelT_>& models,
const std::vector<double>* weights =
nullptr)
const override
70 if (weights ==
nullptr)
71 _solverLs.solve(x1, x2, models);
73 _solverLs.solve(x1, x2, models, *weights);
77 const std::vector<std::size_t>& inliers,
78 std::vector<double>& weights,
79 const double eps = 0.001)
const override
81 const auto numInliers = inliers.size();
82 weights.resize(numInliers);
83 for (std::size_t sample = 0; sample < numInliers; ++sample)
85 const auto idx = inliers[sample];
88 weights[sample] = 1.0 / std::pow(std::max(eps, weights[sample]), 2);
98 double error(std::size_t sample,
const ModelT_& model)
const override {
return PFKernel::error(sample, model); }
111 virtual void unnormalize(ModelT_& model)
const = 0;
125 virtual double errorVectorDimension()
const = 0;
126 virtual double unormalizeError(
double val)
const = 0;
127 virtual Mat3 normalizer1()
const = 0;
128 virtual double thresholdNormalizer()
const = 0;
131 const SolverLsT_ _solverLs{};
This is one example (targeted at solvers that operate on correspondences between two views) that show...
Definition: PointFittingKernel.hpp:48
virtual void unnormalize(ModelT_ &model) const =0
Function used to unnormalize the model.
A virtual kernel used for the ACRANSAC / LORANSAC framework.
Definition: PointFittingRansacKernel.hpp:32
virtual void errors(const ModelT &model, std::vector< double > &errors) const
Return the errors associated to the model and each sample point.
Definition: PointFittingKernel.hpp:100
std::size_t getMinimumNbRequiredSamples() const override
Return the minimum number of required samples for the solver.
Definition: PointFittingRansacKernel.hpp:46
TMat buildSubsetMatrix(const TMat &A, const TCols &columns)
It extracts the columns of given indices from the given matrix.
Definition: Container.hpp:124
std::size_t getMaximumNbModels() const override
Return the maximum number of models for the solver.
Definition: PointFittingRansacKernel.hpp:54
std::size_t getMinimumNbRequiredSamples() const
Return the minimum number of required samples.
Definition: PointFittingKernel.hpp:64
void computeWeights(const ModelT_ &model, const std::vector< std::size_t > &inliers, std::vector< double > &weights, const double eps=0.001) const override
Function used to estimate the weights, typically used by the least square algorithm.
Definition: PointFittingRansacKernel.hpp:76
Definition: checkerDetector.cpp:32
virtual double logalpha0() const =0
Get logalpha0, Alpha0 is used to make the error adaptive to the image size.
std::size_t getMaximumNbModels() const
Return the maximum number of models.
Definition: PointFittingKernel.hpp:70
std::size_t nbSamples() const
get the number of putative points
Definition: PointFittingKernel.hpp:111
const Mat & _x2
right corresponding data
Definition: PointFittingKernel.hpp:117
void fitLS(const std::vector< std::size_t > &inliers, std::vector< ModelT_ > &models, const std::vector< double > *weights=nullptr) const override
This function is called to estimate the model using a least squared algorithm from a minimum of minSa...
Definition: PointFittingRansacKernel.hpp:65
std::size_t nbSamples() const override
The number of elements in the data.
Definition: PointFittingRansacKernel.hpp:117
const ErrorT _errorEstimator
solver error estimation
Definition: PointFittingKernel.hpp:121
virtual double error(std::size_t sample, const ModelT &model) const
Return the error associated to the model and a sample point.
Definition: PointFittingKernel.hpp:90
const Mat & _x1
left corresponding data
Definition: PointFittingKernel.hpp:115
void errors(const ModelT_ &model, std::vector< double > &errors) const override
Function that computes the estimation error for a given model and all the elements.
Definition: PointFittingRansacKernel.hpp:105
double error(std::size_t sample, const ModelT_ &model) const override
Function that computes the estimation error for a given model and a given element.
Definition: PointFittingRansacKernel.hpp:98
void fit(const std::vector< std::size_t > &samples, std::vector< ModelT_ > &models) const override
This function is called to estimate the model from the minimum number of sample minSample (i....
Definition: PointFittingRansacKernel.hpp:63
A generic kernel used for the ACRANSAC / LORANSAC framework.
Definition: IRansacKernel.hpp:24
virtual void fit(const std::vector< std::size_t > &samples, std::vector< ModelT > &models) const
Extract required sample and fit model(s) to the sample.
Definition: PointFittingKernel.hpp:77