Berkeley SfM
Public Member Functions | List of all members
bsfm::FundamentalMatrixRansacProblem Class Reference

#include <fundamental_matrix_ransac_problem.h>

Inheritance diagram for bsfm::FundamentalMatrixRansacProblem:
bsfm::RansacProblem< FeatureMatch, FundamentalMatrixRansacModel >

Public Member Functions

 FundamentalMatrixRansacProblem ()
 
virtual ~FundamentalMatrixRansacProblem ()
 
virtual std::vector< FeatureMatchSampleData (unsigned int num_samples)
 
virtual std::vector< FeatureMatchRemainingData (unsigned int num_sampled_previously) const
 
virtual FundamentalMatrixRansacModel FitModel (const std::vector< FeatureMatch > &input_data) const
 
- Public Member Functions inherited from bsfm::RansacProblem< FeatureMatch, FundamentalMatrixRansacModel >
 RansacProblem ()
 
virtual ~RansacProblem ()
 
virtual void SetModel (const FundamentalMatrixRansacModel &model)
 
virtual void SetData (const std::vector< FeatureMatch > &data)
 
virtual void SetInliers (const std::vector< FeatureMatch > &inliers)
 
virtual void SetSolutionFound (bool solution_found)
 
virtual bool SolutionFound ()
 
virtual const FundamentalMatrixRansacModelModel () const
 
virtual const std::vector< FeatureMatch > & Inliers () const
 

Additional Inherited Members

- Protected Attributes inherited from bsfm::RansacProblem< FeatureMatch, FundamentalMatrixRansacModel >
std::vector< FeatureMatchdata_
 
std::vector< FeatureMatchinliers_
 
FundamentalMatrixRansacModel model_
 
bool solution_found_
 

Detailed Description

Definition at line 87 of file fundamental_matrix_ransac_problem.h.

Constructor & Destructor Documentation

bsfm::FundamentalMatrixRansacProblem::FundamentalMatrixRansacProblem ( )

Definition at line 106 of file fundamental_matrix_ransac_problem.cpp.

106 {}
bsfm::FundamentalMatrixRansacProblem::~FundamentalMatrixRansacProblem ( )
virtual

Definition at line 109 of file fundamental_matrix_ransac_problem.cpp.

109 {}

Member Function Documentation

FundamentalMatrixRansacModel bsfm::FundamentalMatrixRansacProblem::FitModel ( const std::vector< FeatureMatch > &  input_data) const
virtual

Implements bsfm::RansacProblem< FeatureMatch, FundamentalMatrixRansacModel >.

Definition at line 147 of file fundamental_matrix_ransac_problem.cpp.

148  {
149  // Create an empty fundamental matrix.
150  Matrix3d F;
151 
152  // Run the 8-point algorithm with default options.
153  EightPointAlgorithmSolver solver;
154  FundamentalMatrixSolverOptions options;
155  solver.SetOptions(options);
156 
157  if (solver.ComputeFundamentalMatrix(input_data, F)) {
158  // Create a new RansacModel using the computed fundamental matrix.
159  FundamentalMatrixRansacModel model_out(F);
160 
161  // Record sum of squared error over all matches.
162  model_out.error_ = 0.0;
163  for (const auto& feature_match : input_data) {
164  const double error = model_out.EvaluateEpipolarCondition(feature_match);
165  model_out.error_ += error * error;
166  }
167 
168  return model_out;
169  }
170  // Set a large error - we didn't find a model that fits the data.
171  FundamentalMatrixRansacModel model_out(Matrix3d::Identity());
172  model_out.error_ = std::numeric_limits<double>::infinity();
173  return model_out;
174 }
std::vector< FeatureMatch > bsfm::FundamentalMatrixRansacProblem::RemainingData ( unsigned int  num_sampled_previously) const
virtual

Implements bsfm::RansacProblem< FeatureMatch, FundamentalMatrixRansacModel >.

Definition at line 133 of file fundamental_matrix_ransac_problem.cpp.

134  {
135  // In Sample(), the data was shuffled and we took the first
136  // 'num_sampled_previously' elements. Here, take the remaining elements.
137  if (num_sampled_previously >= data_.size()) {
138  VLOG(1) << "No remaining RANSAC data to sample.";
139  return std::vector<FeatureMatch>();
140  }
141 
142  return std::vector<FeatureMatch>(
143  data_.begin() + num_sampled_previously, data_.end());
144 }
std::vector< FeatureMatch > bsfm::FundamentalMatrixRansacProblem::SampleData ( unsigned int  num_samples)
virtual

Implements bsfm::RansacProblem< FeatureMatch, FundamentalMatrixRansacModel >.

Definition at line 112 of file fundamental_matrix_ransac_problem.cpp.

113  {
114  // Randomly shuffle the entire dataset and take the first elements.
115  std::random_shuffle(data_.begin(), data_.end());
116 
117  // Make sure we don't over step.
118 
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();
123  }
124 
125  // Get samples.
126  std::vector<FeatureMatch> samples(
127  data_.begin(), data_.begin() + static_cast<size_t>(num_samples));
128 
129  return samples;
130 }

The documentation for this class was generated from the following files: