AliceVision
Photogrammetric Computer Vision Framework
SfMData.hpp
1 // This file is part of the AliceVision project.
2 // Copyright (c) 2016 AliceVision contributors.
3 // Copyright (c) 2012 openMVG contributors.
4 // This Source Code Form is subject to the terms of the Mozilla Public License,
5 // v. 2.0. If a copy of the MPL was not distributed with this file,
6 // You can obtain one at https://mozilla.org/MPL/2.0/.
7 
8 #pragma once
9 
10 #include <aliceVision/sfmData/SharedPtrMap.hpp>
11 #include <aliceVision/sfmData/CameraPose.hpp>
12 #include <aliceVision/sfmData/Landmark.hpp>
13 #include <aliceVision/sfmData/Constraint2D.hpp>
14 #include <aliceVision/sfmData/ConstraintPoint.hpp>
15 #include <aliceVision/sfmData/RotationPrior.hpp>
16 #include <aliceVision/sfmData/SurveyPoint.hpp>
17 #include <aliceVision/sfmData/ImageGroup.hpp>
18 #include <aliceVision/sfmData/View.hpp>
19 #include <aliceVision/sfmData/Rig.hpp>
20 #include <aliceVision/camera/camera.hpp>
21 #include <aliceVision/types.hpp>
22 
23 #include <stdexcept>
24 #include <cassert>
25 #include <random>
26 
27 namespace aliceVision {
28 namespace sfmData {
29 
31 using Views = SharedPtrMap<View>;
32 
34 using ImageGroups = SharedPtrMap<ImageGroup>;
35 
37 using ImageInfos = SharedPtrMap<ImageInfo>;
38 
40 using Poses = SharedPtrMap<CameraPose>;
41 
43 using Intrinsics = SharedPtrMap<camera::IntrinsicBase>;
44 
46 using Landmarks = std::map<IndexT, Landmark>;
47 
49 using Rigs = std::map<IndexT, Rig>;
50 
52 using PosesUncertainty = std::map<IndexT, Vec6>;
53 
55 using LandmarksUncertainty = std::map<IndexT, Vec3>;
56 
58 using Constraints2D = std::vector<Constraint2D>;
59 
61 using ConstraintsPoint = std::map<IndexT, ConstraintPoint>;
62 
64 using SurveyPoints = std::map<IndexT, std::vector<SurveyPoint>>;
65 
67 using RotationPriors = std::vector<RotationPrior>;
68 
69 
70 
75 class SfMData
76 {
77  public:
79  PosesUncertainty _posesUncertainty;
81  LandmarksUncertainty _landmarksUncertainty;
82 
83  SfMData() = default;
84 
91  SfMData(const SfMData & other, bool unused);
92 
97  SfMData(const SfMData & other, const Eigen::Vector3d & bbMin, const Eigen::Vector3d & bbMax);
98 
99  // Operators
100  bool operator==(const SfMData& other) const;
101 
102  inline bool operator!=(const SfMData& other) const { return !(*this == other); }
103 
104  // Accessors
105 
110  const Views& getViews() const { return _views; }
111  Views& getViews() { return _views; }
112 
117  const ImageInfos& getAncestors() const { return _ancestors; }
118  ImageInfos& getAncestors() { return _ancestors; }
119 
124  const Poses& getPoses() const { return _poses; }
125  Poses& getPoses() { return _poses; }
126 
131  const Rigs& getRigs() const { return _rigs; }
132  Rigs& getRigs() { return _rigs; }
133 
138  const Intrinsics& getIntrinsics() const { return _intrinsics; }
139  Intrinsics& getIntrinsics() { return _intrinsics; }
140 
145  const Landmarks& getLandmarks() const { return _landmarks; }
146  Landmarks& getLandmarks() { return _landmarks; }
147 
152  const Constraints2D& getConstraints2D() const { return _constraints2d; }
153  Constraints2D& getConstraints2D() { return _constraints2d; }
154 
159  const ConstraintsPoint& getConstraintsPoint() const { return _constraintsPoint; }
160  ConstraintsPoint& getConstraintsPoint() { return _constraintsPoint; }
161 
166  const SurveyPoints & getSurveyPoints() const { return _surveyPoints; }
167  SurveyPoints& getSurveyPoints() { return _surveyPoints; }
168 
173  const RotationPriors& getRotationPriors() const { return _rotationpriors; }
174  RotationPriors& getRotationPriors() { return _rotationpriors; }
175 
180  const ImageGroups& getImageGroups() const { return _imageGroups; }
181  ImageGroups& getImageGroups() { return _imageGroups; }
182 
187  const std::vector<std::string>& getRelativeFeaturesFolders() const { return _featuresFolders; }
188 
193  const std::vector<std::string>& getRelativeMatchesFolders() const { return _matchesFolders; }
194 
199  std::vector<std::string> getFeaturesFolders() const;
200 
205  std::vector<std::string> getMatchesFolders() const;
206 
211  std::set<IndexT> getValidViews() const;
212 
217  std::set<IndexT> getReconstructedIntrinsics() const;
218 
223  const camera::IntrinsicBase* getIntrinsicPtr(IndexT intrinsicId) const
224  {
225  if (_intrinsics.count(intrinsicId))
226  return _intrinsics.at(intrinsicId).get();
227  return nullptr;
228  }
229 
235  {
236  if (_intrinsics.count(intrinsicId))
237  return _intrinsics.at(intrinsicId).get();
238  return nullptr;
239  }
240 
245  std::shared_ptr<camera::IntrinsicBase> getIntrinsicSharedPtr(IndexT intrinsicId)
246  {
247  if (_intrinsics.count(intrinsicId))
248  return _intrinsics.at(intrinsicId);
249  return nullptr;
250  }
251 
256  std::shared_ptr<camera::IntrinsicBase> getIntrinsicSharedPtr(const View& v)
257  {
258  IndexT intrinsicId = v.getIntrinsicId();
259 
260  if (_intrinsics.count(intrinsicId))
261  return _intrinsics.at(intrinsicId);
262  return nullptr;
263  }
264 
269  const std::shared_ptr<camera::IntrinsicBase> getIntrinsicSharedPtr(IndexT intrinsicId) const
270  {
271  if (_intrinsics.count(intrinsicId))
272  return _intrinsics.at(intrinsicId);
273  return nullptr;
274  }
275 
280  const std::shared_ptr<camera::IntrinsicBase> getIntrinsicSharedPtr(const View& v) const
281  {
282  IndexT intrinsicId = v.getIntrinsicId();
283 
284  if (_intrinsics.count(intrinsicId))
285  return _intrinsics.at(intrinsicId);
286  return nullptr;
287  }
288 
294  const camera::IntrinsicBase& getIntrinsic(IndexT intrinsicId) const { return *(_intrinsics.at(intrinsicId)); }
295 
301  camera::IntrinsicBase& getIntrinsic(IndexT intrinsicId) { return *(_intrinsics.at(intrinsicId)); }
302 
307  std::set<IndexT> getViewsKeys() const
308  {
309  std::set<IndexT> viewKeys;
310  for (auto v : _views)
311  viewKeys.insert(v.first);
312  return viewKeys;
313  }
314 
320  bool isIntrinsicDefined(const View & view) const
321  {
322  return (view.getIntrinsicId() != UndefinedIndexT
323  && _intrinsics.find(view.getIntrinsicId()) != _intrinsics.end());
324  }
325 
331  bool isIntrinsicDefined(IndexT viewId) const
332  {
333  return isIntrinsicDefined(*_views.at(viewId));
334  }
335 
341  bool isPoseDefined(const View & view) const
342  {
343  const IndexT poseId = view.getPoseId();
344  if (poseId == UndefinedIndexT)
345  {
346  return false;
347  }
348 
349  auto it = _poses.find(poseId);
350  if (it == _poses.end())
351  {
352  return false;
353  }
354 
355  bool rigValid = ((!view.isPartOfRig() || view.isPoseIndependant() || getRigSubPose(view).status != ERigSubPoseStatus::UNINITIALIZED));
356  if (!rigValid)
357  {
358  return false;
359  }
360 
361  return true;
362  }
363 
369  bool isPoseDefined(IndexT viewId) const
370  {
371  return isPoseDefined(*_views.at(viewId));
372  }
373 
379  bool isPoseAndIntrinsicDefined(const View & view) const
380  {
381  const IndexT poseId = view.getPoseId();
382  if (poseId == UndefinedIndexT)
383  {
384  return false;
385  }
386 
387  const IndexT intrinsicId = view.getIntrinsicId();
388  if (intrinsicId == UndefinedIndexT)
389  {
390  return false;
391  }
392 
393  if (_intrinsics.find(view.getIntrinsicId()) == _intrinsics.end())
394  {
395  return false;
396  }
397 
398  auto it = _poses.find(poseId);
399  if (it == _poses.end())
400  {
401  return false;
402  }
403 
404  bool rigValid = ((!view.isPartOfRig() || view.isPoseIndependant() || getRigSubPose(view).status != ERigSubPoseStatus::UNINITIALIZED));
405  if (!rigValid)
406  {
407  return false;
408  }
409 
410  return true;
411  }
412 
418  bool isPoseAndIntrinsicDefined(const View* view) const
419  {
420  if (view == nullptr)
421  {
422  return false;
423  }
424 
425  return isPoseAndIntrinsicDefined(*view);
426  }
427 
433  bool isPoseAndIntrinsicDefined(IndexT viewId) const
434  {
435  if (viewId == UndefinedIndexT)
436  {
437  return false;
438  }
439 
440  if (_views.find(viewId) == _views.end())
441  {
442  return false;
443  }
444 
445  return isPoseAndIntrinsicDefined(_views.at(viewId).get());
446  }
447 
453  bool existsPose(const View& view) const { return (_poses.find(view.getPoseId()) != _poses.end()); }
454 
460  const View& getView(IndexT viewId) const { return *(_views.at(viewId)); }
461 
467  View& getView(IndexT viewId) { return *(_views.at(viewId)); }
468 
474  const View::ptr getViewPtr(IndexT viewId) const { return _views.at(viewId).get(); }
475 
481  View::ptr getViewPtr(IndexT viewId) { return _views.at(viewId).get(); }
482 
488  View::sptr getViewSharedPtr(IndexT viewId) { return _views.at(viewId); }
489 
495  const View::sptr getViewSharedPtr(IndexT viewId) const { return _views.at(viewId); }
496 
502  IndexT findView(const std::string & imageName) const;
503 
511  CameraPose getPose(const View& view) const
512  {
513  // check the view has valid pose / rig etc
514  if (!view.isPartOfRig() || view.isPoseIndependant())
515  {
516  return *_poses.at(view.getPoseId());
517  }
518 
519  // get the pose of the rig
520  CameraPose pose = getRigPose(view);
521 
522  // multiply rig pose by camera subpose
523  pose.setTransform(getRigSubPose(view).pose * pose.getTransform());
524 
525  return pose;
526  }
527 
532  const CameraPose& getAbsolutePose(IndexT poseId) const { return *_poses.at(poseId); }
533 
538  CameraPose & getAbsolutePose(IndexT poseId) { return *_poses.at(poseId); }
539 
545  const Rig& getRig(const View& view) const
546  {
547  assert(view.isPartOfRig());
548  return _rigs.at(view.getRigId());
549  }
550 
551  std::set<feature::EImageDescriberType> getLandmarkDescTypes() const
552  {
553  std::set<feature::EImageDescriberType> output;
554  for (auto s : getLandmarks())
555  {
556  output.insert(s.second.getDescType());
557  }
558  return output;
559  }
560 
561  std::map<feature::EImageDescriberType, int> getLandmarkDescTypesUsages() const
562  {
563  std::map<feature::EImageDescriberType, int> output;
564  for (auto s : getLandmarks())
565  {
566  if (output.find(s.second.getDescType()) == output.end())
567  {
568  output[s.second.getDescType()] = 1;
569  }
570  else
571  {
572  ++output[s.second.getDescType()];
573  }
574  }
575  return output;
576  }
577 
583  {
584  std::vector<ExposureSetting> cameraExposureList;
585  cameraExposureList.reserve(_views.size());
586 
587  for (const auto& view : _views)
588  {
589  const ExposureSetting ce = view.second->getImage().getCameraExposureSetting();
590  if (ce.isPartiallyDefined())
591  {
592  auto find = std::find(std::begin(cameraExposureList), std::end(cameraExposureList), ce);
593  if (find == std::end(cameraExposureList))
594  cameraExposureList.emplace_back(ce);
595  }
596  }
597 
598  std::nth_element(cameraExposureList.begin(), cameraExposureList.begin() + cameraExposureList.size() / 2, cameraExposureList.end());
599  const ExposureSetting& ceMedian = cameraExposureList[cameraExposureList.size() / 2];
600 
601  return ceMedian;
602  }
603 
610  inline void addFeaturesFolder(const std::string& folder) { addFeaturesFolders({folder}); }
611 
618  void addFeaturesFolders(const std::vector<std::string>& folders);
619 
626  inline void addMatchesFolder(const std::string& folder) { addMatchesFolders({folder}); }
627 
634  void addMatchesFolders(const std::vector<std::string>& folders);
635 
642  inline void setFeaturesFolders(const std::vector<std::string>& folders)
643  {
644  _featuresFolders.clear();
645  addFeaturesFolders(folders);
646  }
647 
654  inline void setMatchesFolders(const std::vector<std::string>& folders)
655  {
656  _matchesFolders.clear();
657  addMatchesFolders(folders);
658  }
659 
666  void setAbsolutePath(const std::string& path);
667 
674  void setPose(const View& view, const CameraPose& pose);
675 
681  void setAbsolutePose(IndexT poseId, const CameraPose& pose)
682  {
683  _poses.assign(poseId, pose);
684  }
685 
691  void erasePose(IndexT poseId, bool noThrow = false)
692  {
693  auto it = _poses.find(poseId);
694  if (it != _poses.end())
695  {
696  _poses.erase(it);
697  }
698  else if (!noThrow)
699  {
700  throw std::out_of_range(std::string("Can't erase unfind pose ") + std::to_string(poseId));
701  }
702  }
703 
707  void resetRigs()
708  {
709  for (auto rigIt : _rigs)
710  {
711  rigIt.second.reset();
712  }
713  }
714 
720  void addAncestor(IndexT ancestorId, std::shared_ptr<ImageInfo> image) { _ancestors.emplace(ancestorId, image); }
721 
727  void combine(const SfMData& sfmData);
728 
732  void clear();
733 
738 
742  void removeUnusedIntrinsics();
743 
748 
753 
757  void removeUnusedLandmarks();
758 
762  void repair();
763 
768  void resetParameterStates();
769 
775  void getBoundingBox(Eigen::Vector3d & bbMin, Eigen::Vector3d & bbMax);
776 
781  bool isFullyReconstructed() const;
782 
783  private:
785  Landmarks _landmarks;
787  Intrinsics _intrinsics;
789  Views _views;
791  ImageInfos _ancestors;
793  std::string _absolutePath;
795  std::vector<std::string> _featuresFolders;
797  std::vector<std::string> _matchesFolders;
799  Poses _poses;
801  Rigs _rigs;
803  Constraints2D _constraints2d;
805  ConstraintsPoint _constraintsPoint;
807  RotationPriors _rotationpriors;
809  SurveyPoints _surveyPoints;
811  ImageGroups _imageGroups;
812 
818  const CameraPose& getRigPose(const View& view) const
819  {
820  return *_poses.at(view.getPoseId());
821  }
822 
828  const RigSubPose& getRigSubPose(const View& view) const
829  {
830  assert(view.isPartOfRig());
831  const Rig& rig = _rigs.at(view.getRigId());
832  return rig.getSubPose(view.getSubPoseId());
833  }
834 
840  CameraPose& getRigPose(const View& view)
841  {
842  return *_poses.at(view.getPoseId());
843  }
844 
850  RigSubPose& getRigSubPose(const View& view)
851  {
852  assert(view.isPartOfRig());
853  Rig& rig = _rigs.at(view.getRigId());
854  return rig.getSubPose(view.getSubPoseId());
855  }
856 };
857 
858 using LandmarkIdSet = std::vector<std::size_t>;
859 using LandmarksPerView = stl::flat_map<std::size_t, LandmarkIdSet>;
860 
861 LandmarksPerView getLandmarksPerViews(const SfMData& sfmData);
862 
863 } // namespace sfmData
864 } // namespace aliceVision
aliceVision::sfmData::SfMData::getViewPtr
const View::ptr getViewPtr(IndexT viewId) const
Gives the view of the input view id.
Definition: SfMData.hpp:474
aliceVision::sfmData::SfMData::removeUnusedIntrinsics
void removeUnusedIntrinsics()
Remove intrinsics which are unused.
Definition: SfMData.cpp:429
aliceVision::sfmData::SfMData::getAbsolutePose
const CameraPose & getAbsolutePose(IndexT poseId) const
Gives the pose with the given pose id.
Definition: SfMData.hpp:532
aliceVision::sfmData::SfMData::getViewsKeys
std::set< IndexT > getViewsKeys() const
Get a set of views keys.
Definition: SfMData.hpp:307
aliceVision::sfmData::SfMData::getIntrinsicPtr
camera::IntrinsicBase * getIntrinsicPtr(IndexT intrinsicId)
Return a pointer to an intrinsic if available or nullptr otherwise.
Definition: SfMData.hpp:234
aliceVision::sfmData::SfMData::isIntrinsicDefined
bool isIntrinsicDefined(const View &view) const
Check if the given view has defined intrinsic and pose.
Definition: SfMData.hpp:320
aliceVision::sfmData::SfMData::getRigs
const Rigs & getRigs() const
Get rigs.
Definition: SfMData.hpp:131
aliceVision::sfmData::SfMData::getValidViews
std::set< IndexT > getValidViews() const
List the view indexes that have valid camera intrinsic and pose.
Definition: SfMData.cpp:247
aliceVision::sfmData::RigSubPose::status
ERigSubPoseStatus status
status of the sub-pose
Definition: Rig.hpp:72
aliceVision::sfmData::SfMData::getIntrinsicPtr
const camera::IntrinsicBase * getIntrinsicPtr(IndexT intrinsicId) const
Return a pointer to an intrinsic if available or nullptr otherwise.
Definition: SfMData.hpp:223
aliceVision::sfmData::SfMData::clear
void clear()
Remove everything in this sfmData.
Definition: SfMData.cpp:353
aliceVision::sfmData::SfMData::getIntrinsics
const Intrinsics & getIntrinsics() const
Get intrinsics.
Definition: SfMData.hpp:138
aliceVision::sfmData::SfMData::getAncestors
const ImageInfos & getAncestors() const
Get ancestors.
Definition: SfMData.hpp:117
aliceVision::sfmData::SfMData::getImageGroups
const ImageGroups & getImageGroups() const
Get ImageGroups.
Definition: SfMData.hpp:180
aliceVision::sfmData::SfMData::getViewPtr
View::ptr getViewPtr(IndexT viewId)
Gives the view of the input view id.
Definition: SfMData.hpp:481
aliceVision::sfmData::SfMData::getPoses
const Poses & getPoses() const
Get poses.
Definition: SfMData.hpp:124
aliceVision::sfmData::SfMData::setPose
void setPose(const View &view, const CameraPose &pose)
Set the given pose for the given view if the view is part of a rig, this method update rig pose/sub-p...
Definition: SfMData.cpp:275
aliceVision::sfmData::SfMData::getIntrinsicSharedPtr
const std::shared_ptr< camera::IntrinsicBase > getIntrinsicSharedPtr(const View &v) const
Return a shared pointer to an intrinsic if available or nullptr otherwise.
Definition: SfMData.hpp:280
aliceVision::sfmData::RigSubPose
Definition: Rig.hpp:69
aliceVision::sfmData::SfMData::getIntrinsic
camera::IntrinsicBase & getIntrinsic(IndexT intrinsicId)
Gives the intrinsic of the input intrinsic id.
Definition: SfMData.hpp:301
aliceVision::sfmData::View::getPoseId
IndexT getPoseId() const
Get the pose id.
Definition: View.hpp:137
aliceVision::sfmData::SfMData::addAncestor
void addAncestor(IndexT ancestorId, std::shared_ptr< ImageInfo > image)
Add an ancestor image.
Definition: SfMData.hpp:720
aliceVision::sfmData::SfMData::findView
IndexT findView(const std::string &imageName) const
Retrieve the view id in the sfmData from the image filename.
Definition: SfMData.cpp:408
aliceVision::sfmData::SfMData::isPoseAndIntrinsicDefined
bool isPoseAndIntrinsicDefined(IndexT viewId) const
Check if the given view has defined intrinsic and pose.
Definition: SfMData.hpp:433
aliceVision::sfmData::SfMData::getBoundingBox
void getBoundingBox(Eigen::Vector3d &bbMin, Eigen::Vector3d &bbMax)
Definition: SfMData.cpp:390
aliceVision::sfmData::SfMData::getLandmarks
const Landmarks & getLandmarks() const
Get landmarks.
Definition: SfMData.hpp:145
aliceVision::sfmData::Rig::getSubPose
const RigSubPose & getSubPose(IndexT index) const
Get the sub-pose for the given sub-pose index.
Definition: Rig.hpp:156
aliceVision::sfmData::SfMData::getViews
const Views & getViews() const
Get views.
Definition: SfMData.hpp:110
aliceVision::sfmData::SfMData::setAbsolutePose
void setAbsolutePose(IndexT poseId, const CameraPose &pose)
Set the given pose for the given poseId.
Definition: SfMData.hpp:681
aliceVision::sfmData::SfMData::_landmarksUncertainty
LandmarksUncertainty _landmarksUncertainty
Uncertainty per landmark.
Definition: SfMData.hpp:81
aliceVision::sfmData::SfMData::getAbsolutePose
CameraPose & getAbsolutePose(IndexT poseId)
Gives the pose with the given pose id.
Definition: SfMData.hpp:538
aliceVision
Definition: checkerDetector.cpp:32
aliceVision::sfmData::View
A view define an image by a string and unique indexes for the view, the camera intrinsic,...
Definition: View.hpp:32
aliceVision::sfmData::SfMData::addMatchesFolders
void addMatchesFolders(const std::vector< std::string > &folders)
Add the given folders to matches folders.
Definition: SfMData.cpp:232
aliceVision::sfmData::SfMData::getIntrinsic
const camera::IntrinsicBase & getIntrinsic(IndexT intrinsicId) const
Gives the intrinsic of the input intrinsic id.
Definition: SfMData.hpp:294
aliceVision::sfmData::View::isPoseIndependant
bool isPoseIndependant() const
If the view is part of a camera rig, the camera can be a sub-pose of the rig pose but can also be tem...
Definition: View.hpp:175
aliceVision::sfmData::SfMData::getRig
const Rig & getRig(const View &view) const
Get the rig of the given view.
Definition: SfMData.hpp:545
aliceVision::sfmData::SfMData::getRotationPriors
const RotationPriors & getRotationPriors() const
Get RotationPriors.
Definition: SfMData.hpp:173
aliceVision::sfmData::SfMData::setFeaturesFolders
void setFeaturesFolders(const std::vector< std::string > &folders)
Replace the current features folders by the given ones.
Definition: SfMData.hpp:642
aliceVision::sfmData::SfMData::addFeaturesFolders
void addFeaturesFolders(const std::vector< std::string > &folders)
Add the given folders to features folders.
Definition: SfMData.cpp:230
aliceVision::sfmData::SfMData::getRelativeFeaturesFolders
const std::vector< std::string > & getRelativeFeaturesFolders() const
Get relative features folder paths.
Definition: SfMData.hpp:187
aliceVision::sfmData::SfMData::removeInvalidObservations
void removeInvalidObservations()
Remove observations pointing to invalid views.
Definition: SfMData.cpp:461
aliceVision::sfmData::View::getRigId
IndexT getRigId() const
Get the rig id.
Definition: View.hpp:143
aliceVision::sfmData::View::isPartOfRig
bool isPartOfRig() const
Return if true or false the view is part of a rig.
Definition: View.hpp:167
aliceVision::sfmData::SharedPtrMap< View >
aliceVision::sfmData::SfMData::getConstraints2D
const Constraints2D & getConstraints2D() const
Get Constraints2D.
Definition: SfMData.hpp:152
aliceVision::sfmData::SfMData::getViewSharedPtr
const View::sptr getViewSharedPtr(IndexT viewId) const
Gives the view of the input view id.
Definition: SfMData.hpp:495
aliceVision::sfmData::View::getIntrinsicId
IndexT getIntrinsicId() const
Get the intrinsic id.
Definition: View.hpp:131
aliceVision::sfmData::SfMData::removeUnusedLandmarks
void removeUnusedLandmarks()
Remove landmarks without any observations.
Definition: SfMData.cpp:484
aliceVision::sfmData::SfMData::getReconstructedIntrinsics
std::set< IndexT > getReconstructedIntrinsics() const
List the intrinsic indexes that have valid camera intrinsic and pose.
Definition: SfMData.cpp:261
aliceVision::sfmData::SfMData::getRelativeMatchesFolders
const std::vector< std::string > & getRelativeMatchesFolders() const
Get relative matches folder paths.
Definition: SfMData.hpp:193
aliceVision::sfmData::SfMData::getMedianCameraExposureSetting
ExposureSetting getMedianCameraExposureSetting() const
Get the median Camera Exposure Setting.
Definition: SfMData.hpp:582
aliceVision::sfmData::SfMData::getIntrinsicSharedPtr
const std::shared_ptr< camera::IntrinsicBase > getIntrinsicSharedPtr(IndexT intrinsicId) const
Return a shared pointer to an intrinsic if available or nullptr otherwise.
Definition: SfMData.hpp:269
aliceVision::sfmData::SfMData::_posesUncertainty
PosesUncertainty _posesUncertainty
Uncertainty per pose.
Definition: SfMData.hpp:79
aliceVision::sfmData::SfMData::isPoseDefined
bool isPoseDefined(IndexT viewId) const
Check if the given view has a defined pose.
Definition: SfMData.hpp:369
aliceVision::sfmData::SfMData
SfMData container Store structure and camera properties.
Definition: SfMData.hpp:75
aliceVision::sfmData::SfMData::getView
const View & getView(IndexT viewId) const
Gives the view of the input view id.
Definition: SfMData.hpp:460
aliceVision::sfmData::SfMData::addFeaturesFolder
void addFeaturesFolder(const std::string &folder)
Add the given folder to features folders.
Definition: SfMData.hpp:610
aliceVision::sfmData::SfMData::resetRigs
void resetRigs()
Reset rigs sub-poses parameters.
Definition: SfMData.hpp:707
aliceVision::sfmData::CameraPose
Definition: CameraPose.hpp:15
aliceVision::sfmData::SfMData::existsPose
bool existsPose(const View &view) const
Check if the given view has an existing pose.
Definition: SfMData.hpp:453
aliceVision::sfmData::SfMData::erasePose
void erasePose(IndexT poseId, bool noThrow=false)
Erase the pose for the given poseId.
Definition: SfMData.hpp:691
aliceVision::sfmData::Rig
Definition: Rig.hpp:94
aliceVision::sfmData::SfMData::repair
void repair()
repair the sfmData by removing everything that is unused or invalid
Definition: SfMData.cpp:511
aliceVision::sfmData::SfMData::setAbsolutePath
void setAbsolutePath(const std::string &path)
Set the SfMData file absolute path.
Definition: SfMData.cpp:234
aliceVision::sfmData::SfMData::isFullyReconstructed
bool isFullyReconstructed() const
Definition: SfMData.cpp:520
aliceVision::sfmData::SfMData::getFeaturesFolders
std::vector< std::string > getFeaturesFolders() const
Get absolute features folder paths.
Definition: SfMData.cpp:226
aliceVision::sfmData::SfMData::getIntrinsicSharedPtr
std::shared_ptr< camera::IntrinsicBase > getIntrinsicSharedPtr(IndexT intrinsicId)
Return a shared pointer to an intrinsic if available or nullptr otherwise.
Definition: SfMData.hpp:245
aliceVision::camera::IntrinsicBase
Basis class for all intrinsic parameters of a camera.
Definition: IntrinsicBase.hpp:27
aliceVision::sfmData::SfMData::getIntrinsicSharedPtr
std::shared_ptr< camera::IntrinsicBase > getIntrinsicSharedPtr(const View &v)
Return a shared pointer to an intrinsic if available or nullptr otherwise.
Definition: SfMData.hpp:256
aliceVision::sfmData::SfMData::isIntrinsicDefined
bool isIntrinsicDefined(IndexT viewId) const
Check if the given view has defined intrinsic and pose.
Definition: SfMData.hpp:331
aliceVision::sfmData::SfMData::removeUnusedCameraPoses
void removeUnusedCameraPoses()
Remove poses which are unused.
Definition: SfMData.cpp:445
aliceVision::sfmData::SfMData::getMatchesFolders
std::vector< std::string > getMatchesFolders() const
Get absolute matches folder paths.
Definition: SfMData.cpp:228
aliceVision::sfmData::SfMData::setMatchesFolders
void setMatchesFolders(const std::vector< std::string > &folders)
Replace the current matches folders by the given ones.
Definition: SfMData.hpp:654
aliceVision::sfmData::SfMData::isPoseAndIntrinsicDefined
bool isPoseAndIntrinsicDefined(const View *view) const
Check if the given view has defined intrinsic.
Definition: SfMData.hpp:418
aliceVision::sfmData::SfMData::getView
View & getView(IndexT viewId)
Gives the view of the input view id.
Definition: SfMData.hpp:467
aliceVision::sfmData::ExposureSetting
Definition: ExposureSetting.hpp:15
aliceVision::sfmData::SfMData::combine
void combine(const SfMData &sfmData)
Insert data from the given sfmData if possible. note: This operation doesn't override existing data.
Definition: SfMData.cpp:309
aliceVision::sfmData::SfMData::getConstraintsPoint
const ConstraintsPoint & getConstraintsPoint() const
Get ConstraintsPoints.
Definition: SfMData.hpp:159
aliceVision::sfmData::SfMData::getViewSharedPtr
View::sptr getViewSharedPtr(IndexT viewId)
Gives the view of the input view id.
Definition: SfMData.hpp:488
aliceVision::sfmData::SfMData::addMatchesFolder
void addMatchesFolder(const std::string &folder)
Add the given folder to matches folders.
Definition: SfMData.hpp:626
aliceVision::sfmData::View::getSubPoseId
IndexT getSubPoseId() const
Get the sub-pose id.
Definition: View.hpp:149
aliceVision::sfmData::SfMData::resetParameterStates
void resetParameterStates()
Definition: SfMData.cpp:371
aliceVision::sfmData::SfMData::isPoseAndIntrinsicDefined
bool isPoseAndIntrinsicDefined(const View &view) const
Check if the given view has defined intrinsic.
Definition: SfMData.hpp:379
aliceVision::sfmData::SfMData::removeUnusedImageGroups
void removeUnusedImageGroups()
Remove image groups which are unused.
Definition: SfMData.cpp:492
aliceVision::sfmData::SfMData::getSurveyPoints
const SurveyPoints & getSurveyPoints() const
Get SurveyPoints.
Definition: SfMData.hpp:166
aliceVision::sfmData::SfMData::isPoseDefined
bool isPoseDefined(const View &view) const
Check if the given view has a valid pose.
Definition: SfMData.hpp:341
aliceVision::sfmData::SfMData::getPose
CameraPose getPose(const View &view) const
Gives the pose of the input view. If this view is part of a rig, it returns rigPose + rigSubPose.
Definition: SfMData.hpp:511