49 #include <gflags/gflags.h>
54 #include "../math/random_generator.h"
55 #include "../geometry/eight_point_algorithm_solver.h"
56 #include "../geometry/fundamental_matrix_solver_options.h"
64 : F_(Matrix3d::Identity()), error_(0.0) {}
68 : F_(F), error_(0.0) {}
81 double error_tolerance) {
85 if (error * error < error_tolerance) {
99 const double epipolar_condition = kp2.transpose() *
F_ * kp1;
100 return epipolar_condition;
113 unsigned int num_samples) {
115 std::random_shuffle(
data_.begin(),
data_.end());
119 if (static_cast<size_t>(num_samples) >
data_.size()) {
120 VLOG(1) <<
"Requested more RANSAC data samples than are available. "
121 "Returning all data.";
122 num_samples =
data_.size();
126 std::vector<FeatureMatch> samples(
127 data_.begin(),
data_.begin() +
static_cast<size_t>(num_samples));
134 unsigned int num_sampled_previously)
const {
137 if (num_sampled_previously >=
data_.size()) {
138 VLOG(1) <<
"No remaining RANSAC data to sample.";
139 return std::vector<FeatureMatch>();
142 return std::vector<FeatureMatch>(
143 data_.begin() + num_sampled_previously,
data_.end());
148 const std::vector<FeatureMatch>& input_data)
const {
163 for (
const auto& feature_match : input_data) {
165 model_out.
error_ += error * error;
172 model_out.
error_ = std::numeric_limits<double>::infinity();
virtual double Error() const
virtual ~FundamentalMatrixRansacProblem()
virtual std::vector< FeatureMatch > RemainingData(unsigned int num_sampled_previously) const
virtual std::vector< FeatureMatch > SampleData(unsigned int num_samples)
FundamentalMatrixRansacProblem()
virtual ~FundamentalMatrixRansacModel()
double EvaluateEpipolarCondition(const FeatureMatch &match) const
std::vector< FeatureMatch > data_
FundamentalMatrixRansacModel()
virtual bool IsGoodFit(const FeatureMatch &data_point, double error_tolerance)
virtual bool ComputeFundamentalMatrix(const FeatureMatchList &matched_features, Matrix3d &fundamental_matrix) const
virtual void SetOptions(const FundamentalMatrixSolverOptions &options)
virtual FundamentalMatrixRansacModel FitModel(const std::vector< FeatureMatch > &input_data) const