Berkeley SfM
Public Member Functions | Private Attributes | List of all members
bsfm::PnPRansacProblem Class Reference

#include <pnp_ransac_problem.h>

Inheritance diagram for bsfm::PnPRansacProblem:
bsfm::RansacProblem< Observation::Ptr, PnPRansacModel >

Public Member Functions

 PnPRansacProblem ()
 
virtual ~PnPRansacProblem ()
 
void SetIntrinsics (CameraIntrinsics &intrinsics)
 
virtual std::vector< Observation::PtrSampleData (unsigned int num_samples)
 
virtual std::vector< Observation::PtrRemainingData (unsigned int num_sampled_previously) const
 
virtual PnPRansacModel FitModel (const std::vector< Observation::Ptr > &input_data) const
 
- Public Member Functions inherited from bsfm::RansacProblem< Observation::Ptr, PnPRansacModel >
 RansacProblem ()
 
virtual ~RansacProblem ()
 
virtual void SetModel (const PnPRansacModel &model)
 
virtual void SetData (const std::vector< Observation::Ptr > &data)
 
virtual void SetInliers (const std::vector< Observation::Ptr > &inliers)
 
virtual void SetSolutionFound (bool solution_found)
 
virtual bool SolutionFound ()
 
virtual const PnPRansacModelModel () const
 
virtual const std::vector< Observation::Ptr > & Inliers () const
 

Private Attributes

CameraIntrinsics intrinsics_
 

Additional Inherited Members

- Protected Attributes inherited from bsfm::RansacProblem< Observation::Ptr, PnPRansacModel >
std::vector< Observation::Ptrdata_
 
std::vector< Observation::Ptrinliers_
 
PnPRansacModel model_
 
bool solution_found_
 

Detailed Description

Definition at line 94 of file pnp_ransac_problem.h.

Constructor & Destructor Documentation

bsfm::PnPRansacProblem::PnPRansacProblem ( )

Definition at line 123 of file pnp_ransac_problem.cpp.

123 {}
bsfm::PnPRansacProblem::~PnPRansacProblem ( )
virtual

Definition at line 124 of file pnp_ransac_problem.cpp.

124 {}

Member Function Documentation

PnPRansacModel bsfm::PnPRansacProblem::FitModel ( const std::vector< Observation::Ptr > &  input_data) const
virtual

Implements bsfm::RansacProblem< Observation::Ptr, PnPRansacModel >.

Definition at line 167 of file pnp_ransac_problem.cpp.

168  {
169 
170  // Extract a FeatureList and a Point3DList from input_data.
171  FeatureList points_2d;
172  Point3DList points_3d;
173  points_2d.reserve(input_data.size());
174  points_3d.reserve(input_data.size());
175 
176  for (const auto& observation : input_data) {
177  CHECK_NOTNULL(observation.get());
178 
179  // Extract feature and append.
180  points_2d.push_back(observation->Feature());
181 
182  // Extract landmark position and append.
183  Landmark::Ptr landmark = observation->GetLandmark();
184  CHECK_NOTNULL(landmark.get());
185  points_3d.push_back(landmark->Position());
186  }
187 
188  // Set up solver.
189  PoseEstimator2D3D solver;
190  solver.Initialize(points_2d, points_3d, intrinsics_);
191 
192  // Solve.
193  Pose calculated_pose;
194  if (!solver.Solve(calculated_pose)) {
195  VLOG(1) << "Could not estimate a pose using the PnP solver. "
196  << "Assuming identity pose.";
197  }
198 
199  // Generate a model from this Pose.
200  CameraExtrinsics extrinsics(calculated_pose);
201  Camera camera(extrinsics, intrinsics_);
202 
203  PnPRansacModel model(camera, input_data);
204  return model;
205 }
std::vector< Point3D > Point3DList
Definition: point_3d.h:100
CameraIntrinsics intrinsics_
std::vector< Feature > FeatureList
Definition: feature.h:65
std::shared_ptr< Landmark > Ptr
Definition: landmark.h:66
std::vector< Observation::Ptr > bsfm::PnPRansacProblem::RemainingData ( unsigned int  num_sampled_previously) const
virtual

Implements bsfm::RansacProblem< Observation::Ptr, PnPRansacModel >.

Definition at line 153 of file pnp_ransac_problem.cpp.

154  {
155  // In Sample(), the data was shuffled and we took the first
156  // 'num_sampled_previously' elements. Here, take the remaining elements.
157  if (num_sampled_previously >= data_.size()) {
158  VLOG(1) << "No remaining RANSAC data to sample.";
159  return std::vector<Observation::Ptr>();
160  }
161 
162  return std::vector<Observation::Ptr>(
163  data_.begin() + num_sampled_previously, data_.end());
164 }
std::vector< Observation::Ptr > bsfm::PnPRansacProblem::SampleData ( unsigned int  num_samples)
virtual

Implements bsfm::RansacProblem< Observation::Ptr, PnPRansacModel >.

Definition at line 132 of file pnp_ransac_problem.cpp.

133  {
134 
135  // Randomly shuffle the entire dataset and take the first elements.
136  std::random_shuffle(data_.begin(), data_.end());
137 
138  // Make sure we don't over step.
139  if (static_cast<size_t>(num_samples) > data_.size()) {
140  VLOG(1) << "Requested more RANSAC data samples than are available. "
141  << "Returning all data.";
142  num_samples = data_.size();
143  }
144 
145  // Get samples.
146  std::vector<Observation::Ptr> samples(
147  data_.begin(), data_.begin() + static_cast<size_t>(num_samples));
148 
149  return samples;
150 }
void bsfm::PnPRansacProblem::SetIntrinsics ( CameraIntrinsics intrinsics)

Definition at line 127 of file pnp_ransac_problem.cpp.

127  {
128  intrinsics_ = intrinsics;
129 }
CameraIntrinsics intrinsics_

Member Data Documentation

CameraIntrinsics bsfm::PnPRansacProblem::intrinsics_
private

Definition at line 115 of file pnp_ransac_problem.h.


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