39 #include "../sfm/view.h"
63 <<
"Landmark does not exist in registry. Returning a null pointer.";
67 return registry_element->second;
133 bool retriangulate) {
134 CHECK_NOTNULL(observation.get());
139 observation->SetIncorporatedLandmark(this->
Index());
146 std::vector<::bsfm::Descriptor> descriptors;
148 descriptors.push_back(observation->Descriptor());
152 if (distance(descriptors[0], descriptors[1]) > distance.
Max()) {
153 VLOG(1) <<
"Observation was not matched to landmark " << this->
Index();
160 std::vector<Camera> cameras;
161 std::vector<Feature> features;
163 cameras.push_back(obs->GetView()->Camera());
164 features.push_back(obs->Feature());
166 cameras.push_back(observation->GetView()->Camera());
167 features.push_back(observation->Feature());
171 if (!
Triangulate(features, cameras, new_position)) {
179 observation->SetIncorporatedLandmark(this->
Index());
188 LOG(WARNING) <<
"Landmark has not been associated with any observations, "
189 "so source view is undefined. Returning null pointer.";
199 unsigned int count = 0;
200 for (
const auto& view_index : view_indices) {
207 view->UpdateObservedLandmarks();
208 if (view->HasObservedLandmark(this->Index())) {
223 : position_(
Point3D(0.0, 0.0, 0.0)), landmark_index_(NextLandmarkIndex()) {}
std::shared_ptr< Observation > Ptr
const std::vector< Observation::Ptr > & Observations() const
static LandmarkIndex NextLandmarkIndex()
::bsfm::Descriptor descriptor_
static Landmark::Ptr GetLandmark(LandmarkIndex landmark_index)
bool SeenByAtLeastTwoViews(const std::vector< ViewIndex > &view_indices)
LandmarkIndex landmark_index_
static LandmarkIndex NumExistingLandmarks()
unsigned int LandmarkIndex
static void ResetLandmarks()
static DistanceMetric & Instance()
const Point3D & Position() const
static Landmark::Ptr Create()
std::vector< Observation::Ptr > observations_
static LandmarkIndex current_landmark_index_
LandmarkIndex Index() const
static View::Ptr GetView(ViewIndex view_index)
static std::unordered_map< LandmarkIndex, Landmark::Ptr > landmark_registry_
std::shared_ptr< Landmark > Ptr
std::shared_ptr< View > Ptr
std::shared_ptr< View > SourceView() const
static bool IsValidLandmark(LandmarkIndex landmark_index)
static bool IsValidView(ViewIndex view_index)
const ::bsfm::Descriptor & Descriptor() const
bool MaybeNormalizeDescriptors(std::vector< Descriptor > &descriptors) const
bool IncorporateObservation(const Observation::Ptr &observation, bool retriangulate=true)
::Eigen::Matrix< double, Eigen::Dynamic, 1 > Descriptor
bool Triangulate(const FeatureList &features, const std::vector< Camera > &cameras, Point3D &point)
void SetDescriptor(const ::bsfm::Descriptor &descriptor)
void SetPosition(const Point3D &position)