Ocean
Loading...
Searching...
No Matches
RelocalizerStereo.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8#ifndef META_OCEAN_TRACKING_MAPBUILDING_RELOCALIZER_STEREO_H
9#define META_OCEAN_TRACKING_MAPBUILDING_RELOCALIZER_STEREO_H
10
13
15#include "ocean/base/Worker.h"
16
18
20
21namespace Ocean
22{
23
24namespace Tracking
25{
26
27namespace MapBuilding
28{
29
30/**
31 * This class implements a relocalizer for stereo cameras.
32 * @ingroup trackingmapbuilding
33 */
34class OCEAN_TRACKING_MAPBUILDING_EXPORT RelocalizerStereo : public Relocalizer
35{
36 public:
37
38 /**
39 * This class implements a container for debug elements.
40 */
42 public DebugElements,
43 public Singleton<RelocalizerDebugElements>
44 {
46
47 public:
48
49 /**
50 * Definition of several debug elements.
51 */
52 enum ElementId : uint32_t
53 {
54 /// An invalid element id.
55 EI_INVALID = 0u,
56
57 /// A camera images with image features.
59
60 /// A camera images with feature correspondences.
62 };
63 };
64
65 public:
66
67 /**
68 * Creates a new relocalizer object.
69 */
70 RelocalizerStereo() = default;
71
72 /**
73 * Move constructor.
74 * @param relocalizerStereo The relocalizer to be moved
75 */
76 inline RelocalizerStereo(RelocalizerStereo&& relocalizerStereo);
77
78 /**
79 * Creates a new relocalizer object.
80 * @param imageFeaturePointDetectorFunction The feature detection and description function to be used
81 */
82 explicit RelocalizerStereo(ImageFeaturePointDetectorFunction imageFeaturePointDetectorFunction);
83
84 /**
85 * Relocalizes a given frame.
86 * @param cameraA The camera profile defining the projection of the first camera, must be valid
87 * @param cameraB The camera profile defining the projection of the second camera, must be valid
88 * @param device_T_cameraA The transformation between the first camera and the device, with default camera pose pointing towards the negative z-space and y-axis upwards, must be valid
89 * @param device_T_cameraB The transformation between the second camera and the device, with default camera pose pointing towards the negative z-space and y-axis upwards, must be valid
90 * @param yFrameA The first frame with pixel format FORMAT_Y8, must be valid
91 * @param yFrameB The second frame with pixel format FORMAT_Y8, must be valid
92 * @param world_T_device The resulting device pose transforming device to world
93 * @param minimalNumberCorrespondences The minimal number of 2D/3D correspondences so that a camera pose counts as valid, with range [4, infinity)
94 * @param maximalProjectionError The maximal projection error between 3D object points and their 2D observations, in pixels, with range [0, infinity)
95 * @param inlierRate The rate of correspondence inliers within the entire set of correspondences, e.g., 0.15 means that 15% of matched features are correct and can be used to determine a valid pose, with range (0, 1]
96 * @param world_T_roughDevice Optional rough device pose to speedup the relocalization, if known, invalid otherwise
97 * @param worker Optional worker to distribute the computation
98 * @param usedFeatureCorrespondences Optional resulting number of feature correspondences which have been used, nullptr if not of interest
99 * @param usedObjectPointIdsA Optional resulting ids of the 3D object points which have been used during relocalization in the first camera, nullptr if not of interest
100 * @param usedObjectPointIdsB Optional resulting ids of the 3D object points which have been used during relocalization in the second camera, nullptr if not of interest
101 * @param usedImagePointsA Optional resulting 2D image points that have been used during relocalization in the first camera, nullptr if not of interest
102 * @param usedImagePointsB Optional resulting 2D image points that have been used during relocalization in the second camera, nullptr if not of interest
103 * @return True, if succeeded
104 */
105 bool relocalize(const AnyCamera& cameraA, const AnyCamera& cameraB, const HomogenousMatrix4& device_T_cameraA, const HomogenousMatrix4& device_T_cameraB, const Frame& yFrameA, const Frame& yFrameB, HomogenousMatrix4& world_T_device, const unsigned int minimalNumberCorrespondences, const Scalar maximalProjectionError, const Scalar inlierRate = Scalar(0.15), const HomogenousMatrix4& world_T_roughDevice = HomogenousMatrix4(false), Worker* worker = nullptr, size_t* usedFeatureCorrespondences = nullptr, Indices32* usedObjectPointIdsA = nullptr, Indices32* usedObjectPointIdsB = nullptr, Vectors2* usedImagePointsA = nullptr, Vectors2* usedImagePointsB = nullptr);
106
107 /**
108 * Move operator.
109 * @param relocalizerStereo The relocalizer to be moved
110 * @return Reference to this object
111 */
112 inline RelocalizerStereo& operator=(RelocalizerStereo&& relocalizerStereo);
113};
114
116{
117 *this = std::move(relocalizerStereo);
118}
119
121{
122 Relocalizer::operator=(std::move(relocalizerStereo));
123
124 return *this;
125}
126
127}
128
129}
130
131}
132
133#endif // META_OCEAN_TRACKING_MAPBUILDING_RELOCALIZER_STEREO_H
This class implements the abstract base class for all AnyCamera objects.
Definition AnyCamera.h:130
This class implements the base class for a container for debug elements.
Definition DebugElements.h:29
This class implements Ocean's image class.
Definition Frame.h:1808
This template class is the base class for all singleton objects.
Definition Singleton.h:71
This class base class for all relocalizers.
Definition Relocalizer.h:31
Relocalizer & operator=(Relocalizer &&relocalizer)
Move operator.
std::function< bool(const AnyCamera &camera, const Frame &yFrame, Vectors2 &imagePoints, SharedUnifiedDescriptors &imagePointDescriptors)> ImageFeaturePointDetectorFunction
Definition of a function which detects and describes feature points in a given image.
Definition Relocalizer.h:42
This class implements a container for debug elements.
Definition RelocalizerStereo.h:44
ElementId
Definition of several debug elements.
Definition RelocalizerStereo.h:53
@ EI_CAMERA_IMAGES_WITH_FEATURES
A camera images with image features.
Definition RelocalizerStereo.h:58
@ EI_CAMERA_IMAGES_WITH_FEATURE_CORRESPONDENCES
A camera images with feature correspondences.
Definition RelocalizerStereo.h:61
This class implements a relocalizer for stereo cameras.
Definition RelocalizerStereo.h:35
RelocalizerStereo(ImageFeaturePointDetectorFunction imageFeaturePointDetectorFunction)
Creates a new relocalizer object.
RelocalizerStereo & operator=(RelocalizerStereo &&relocalizerStereo)
Move operator.
Definition RelocalizerStereo.h:120
bool relocalize(const AnyCamera &cameraA, const AnyCamera &cameraB, const HomogenousMatrix4 &device_T_cameraA, const HomogenousMatrix4 &device_T_cameraB, const Frame &yFrameA, const Frame &yFrameB, HomogenousMatrix4 &world_T_device, const unsigned int minimalNumberCorrespondences, const Scalar maximalProjectionError, const Scalar inlierRate=Scalar(0.15), const HomogenousMatrix4 &world_T_roughDevice=HomogenousMatrix4(false), Worker *worker=nullptr, size_t *usedFeatureCorrespondences=nullptr, Indices32 *usedObjectPointIdsA=nullptr, Indices32 *usedObjectPointIdsB=nullptr, Vectors2 *usedImagePointsA=nullptr, Vectors2 *usedImagePointsB=nullptr)
Relocalizes a given frame.
RelocalizerStereo()=default
Creates a new relocalizer object.
This class implements a worker able to distribute function calls over different threads.
Definition Worker.h:33
std::vector< Index32 > Indices32
Definition of a vector holding 32 bit index values.
Definition Base.h:96
float Scalar
Definition of a scalar type.
Definition Math.h:129
std::vector< Vector2 > Vectors2
Definition of a vector holding Vector2 objects.
Definition Vector2.h:64
The namespace covering the entire Ocean framework.
Definition Accessor.h:15