21 #ifndef __RANSACEvaluatorInterface_hh__
22 #define __RANSACEvaluatorInterface_hh__
24 #include <Base/Math/Random.hh>
43 template <
class SolutionType>
58 virtual bool IsInlier(
const SolutionType& solution,
59 const unsigned data_index,
68 std::vector<SolutionType> &solutions)= 0;
72 SolutionType& solution) = 0;
79 const unsigned sample_size,
80 const unsigned data_size,
81 std::vector<unsigned>& which_samples);
86 const unsigned sample_size,
87 const unsigned data_size,
88 std::vector<unsigned>& which_samples);
96 template <
class SolutionType>
99 const unsigned sample_size,
100 const unsigned data_size,
101 std::vector<unsigned>& which_samples)
103 return GenerateSamplesRandom_(sample_index, sample_size, data_size,
108 template <
class SolutionType>
111 const unsigned sample_size,
112 const unsigned data_size,
113 std::vector<unsigned>& which_samples)
115 BIASASSERT(sample_size<=data_size);
116 BIASASSERT(data_size>0);
123 which_samples.clear();
124 which_samples.reserve(sample_size);
125 const unsigned max_tries = 10000;
128 if (std::find(which_samples.begin(), which_samples.end(), index)==
129 which_samples.end()){
130 which_samples.push_back(index);
134 }
while (count<sample_size && count<max_tries);
136 if (count>=max_tries){
137 BIASERR(
"error generating samples (max_tries reached)");
145 #endif // __RANSACEvaluatorInterface_hh__
Interface for computation of solutions and evaluation of measurements.
virtual bool RefineSolution(const std::vector< bool > &inliers, SolutionType &solution)=0
Refine a solution based on the inliers vector.
virtual bool IsInlier(const SolutionType &solution, const unsigned data_index, double &score)=0
Checks whether a certain sample (i.e.
int GetUniformDistributedInt(const int min, const int max)
get uniform distributed random variable including min/max
virtual unsigned GetMinNumSamplesForSolutionComputation() const =0
Returns the minimum required samples for computation of a solution.
virtual bool GenerateSamples(const unsigned sample_index, const unsigned sample_size, const unsigned data_size, std::vector< unsigned > &which_samples)
randomly generates the indizes of the samples used for computation of the solution.
virtual int GetSampleSolutions(const std::vector< unsigned > &which_samples, std::vector< SolutionType > &solutions)=0
Compute solution(s) for the given set of samples.
virtual unsigned GetNumMeasurements() const =0
Returns the number of available measurements.
bool GenerateSamplesRandom_(const unsigned sample_index, const unsigned sample_size, const unsigned data_size, std::vector< unsigned > &which_samples)
purely random generation of sample indizes
class for producing random numbers from different distributions