8#ifndef META_OCEAN_TRACKING_OFFLINE_SLAM_TRACKER_PLANAR_H
9#define META_OCEAN_TRACKING_OFFLINE_SLAM_TRACKER_PLANAR_H
33class SLAMPlaneTracker;
104 IterationResult onFrame(
const unsigned int previousIndex,
const unsigned int currentIndex,
const unsigned int iteration,
const unsigned int maximalIterations)
override;
110 bool onStart(
const unsigned int lowerFrameIndex,
const unsigned int initialFrameIndex,
const unsigned int upperFrameIndex)
override;
116 bool onStop(
const unsigned int lowerFrameIndex,
const unsigned int initialFrameIndex,
const unsigned int upperFrameIndex)
override;
243 IterationResult onFrame(
const unsigned int previousIndex,
const unsigned int currentIndex,
const unsigned int iteration,
const unsigned int maximalIterations)
override;
249 bool onStop(
const unsigned int lowerFrameIndex,
const unsigned int initialFrameIndex,
const unsigned int upperFrameIndex)
override;
266 unsigned int componentValidCorrespondences_[2];
326 IterationResult onFrame(
const unsigned int previousIndex,
const unsigned int currentIndex,
const unsigned int iteration,
const unsigned int maximalIterations)
override;
332 bool onStart(
const unsigned int lowerFrameIndex,
const unsigned int initialFrameIndex,
const unsigned int upperFrameIndex)
override;
338 bool onStop(
const unsigned int lowerFrameIndex,
const unsigned int initialFrameIndex,
const unsigned int upperFrameIndex)
override;
448 bool determinePlane(
const unsigned int lowerFrameIndex,
const unsigned int initialFrameIndex,
const unsigned int upperFrameIndex);
469 bool optimizePlane(
const unsigned int lowerFrameIndex,
const unsigned int initialFrameIndex,
const unsigned int upperFrameIndex);
483 bool trackPlane(
const PinholeCamera& pinholeCamera,
const Plane3& plane,
const unsigned int lowerFrameIndex,
const unsigned int initialFrameIndex,
const unsigned int upperFrameIndex,
const bool createStateEvents,
Plane3* optimizedPlane =
nullptr,
OfflinePoses* poses =
nullptr);
This class implements a frame pyramid.
Definition FramePyramid.h:37
This class implement a sub-region either defined by 2D triangles or defined by a binary mask.
Definition SubRegion.h:32
This class implements Ocean's image class.
Definition Frame.h:1808
Definition of a frame type composed by the frame dimension, pixel format and pixel origin.
Definition Frame.h:30
This class implements a generator for random numbers.
Definition RandomGenerator.h:42
This class implements a vector with shifted elements.
Definition ShiftVector.h:27
This template class implements a smart object reference which is a specialization of an ObjectRef obj...
Definition SmartObjectRef.h:90
This class implements the base class for all components of a frame tracker.
Definition FrameTracker.h:196
IterationResult
Definition of individual results for the component iterations.
Definition FrameTracker.h:62
This class implements the base class for all visual offline tracker using frames to provide the track...
Definition FrameTracker.h:46
This class implements an event stack layer object that pushes the relative progress parameters on the...
Definition OfflineTracker.h:163
This class implements the abstract base class for all plane trackers.
Definition PlaneTracker.h:42
This class implements a homography tracker component that determines an accurate homography for the p...
Definition SLAMPlaneTracker.h:68
SLAMPlaneTracker & componentParent_
The parent tracker invoking this component.
Definition SLAMPlaneTracker.h:166
Homographies componentHomographies_
The determined homographies of this component.
Definition SLAMPlaneTracker.h:181
CV::FramePyramid componentInitialFramePyramid_
Frame pyramid of the initial frame.
Definition SLAMPlaneTracker.h:193
const Scalar componentMaxPlaneAngle_
The maximal angle between two plane normals so that these normals count as similar.
Definition SLAMPlaneTracker.h:172
Frame componentIntermediateHomographyFrame_
Intermediate homography frame.
Definition SLAMPlaneTracker.h:199
HomographyTrackerComponent(SLAMPlaneTracker &parent, const PinholeCamera &pinholeCamera, Plane3 &resultingPlane, const Scalar maxPlaneAngle=Numeric::deg2rad(5), PinholeCamera *optimizedCamera=nullptr)
Creates a new homography tracking component object.
const PinholeCamera componentCamera_
The camera profile that is applied in this component.
Definition SLAMPlaneTracker.h:169
NormalPairs componentNormalPairs_
The determined pairs of plane normals, one pair for each detected homography.
Definition SLAMPlaneTracker.h:184
ImagePointsPairs componentImagePointsPairs_
The set of pairs of image points that have been used to determine the individual homographies.
Definition SLAMPlaneTracker.h:178
bool determinePlaneCandidates(NormalPair &candidatePair, const Scalar maxAngle, const unsigned int lowerFrameIndex, const unsigned int initialFrameIndex, const unsigned int upperFrameIndex)
Determines the two best matching plane candidates from the set of plane normals pairs that have been ...
ShiftVector< NormalPair > NormalPairs
Definition of a shift vector holding normal pairs.
Definition SLAMPlaneTracker.h:79
bool optimizeCamera(PinholeCamera &optimizedCamera, const unsigned int numberFrames=10u)
Optimizes the camera profile that has been used to track the homography and to create the initial pla...
bool optimizeHomography(const CV::FramePyramid &previousFramePyramid, const Frame ¤tFrame, const CV::SubRegion &previousSubRegion, const SquareMatrix3 &homography, SquareMatrix3 &optimizedHomography, Vectors2 &previousImagePoints, Vectors2 ¤tImagePoints, Worker *worker=nullptr)
Optimizes the homography between two frames.
bool frame2frameHomography(const CV::FramePyramid &previousFramePyramid, const CV::FramePyramid ¤tFramePyramid, const CV::SubRegion &previousSubRegion, SquareMatrix3 &homography, Worker *worker=nullptr)
Determines an initial homography for a planar sub-region between two frames.
IterationResult onFrame(const unsigned int previousIndex, const unsigned int currentIndex, const unsigned int iteration, const unsigned int maximalIterations) override
Applies one component step.
ScopedEventStackLayer componentScopedEventLayer_
The progress event stack layer of this component.
Definition SLAMPlaneTracker.h:202
std::pair< Vector3, Vector3 > NormalPair
Definition of a pair of normals.
Definition SLAMPlaneTracker.h:74
CV::FramePyramid componentIntermediateFramePyramid_
Intermediate frame pyramid.
Definition SLAMPlaneTracker.h:196
~HomographyTrackerComponent() override
Destructor.
Definition SLAMPlaneTracker.h:512
bool onStop(const unsigned int lowerFrameIndex, const unsigned int initialFrameIndex, const unsigned int upperFrameIndex) override
Component start event function.
PinholeCamera * componentResultingOptimizedCamera_
Optional resulting optimized camera profile.
Definition SLAMPlaneTracker.h:190
RandomGenerator componentRandomGenerator_
Random number generator.
Definition SLAMPlaneTracker.h:175
Plane3 & componentResultingPlane_
Resulting plane.
Definition SLAMPlaneTracker.h:187
bool onStart(const unsigned int lowerFrameIndex, const unsigned int initialFrameIndex, const unsigned int upperFrameIndex) override
Component start event function.
This class implements a plane tracker component that is able to track a known plane and further is ab...
Definition SLAMPlaneTracker.h:300
bool optimizePlane(Plane3 &optimizedPlane, const unsigned int numberFrames=10u)
Optimizes the plane.
~PlaneTrackerComponent() override
Destructor.
Definition SLAMPlaneTracker.h:522
const Plane3 & componentPlane_
Plane that is be used for tracking.
Definition SLAMPlaneTracker.h:375
const PinholeCamera & componentCamera_
The camera profile that is applied for tracking.
Definition SLAMPlaneTracker.h:369
const bool componentCreateStateEvents_
Statement whether this component creates state events for the individual poses.
Definition SLAMPlaneTracker.h:378
OfflinePoses * componentResultingPoses_
Optional resulting poses.
Definition SLAMPlaneTracker.h:384
bool optimizePose(const CV::FramePyramid &previousFramePyramid, const Frame ¤tFrame, const CV::SubRegion &previousSubRegion, const HomogenousMatrix4 &previousPose, const HomogenousMatrix4 ¤tPose, HomogenousMatrix4 &optimizedPose, Vectors2 &previousImagePoints, Vectors2 ¤tImagePoints, Worker *worker=nullptr)
Optimizes the pose for a given frame.
Frame componentIntermediateHomographyFrame_
Intermediate homography frame.
Definition SLAMPlaneTracker.h:402
SLAMPlaneTracker & componentParent_
Parent tracker that invokes this component.
Definition SLAMPlaneTracker.h:366
Homographies componentHomographies_
Homographies that are detected during tracking, each homography is defined in relation to the initial...
Definition SLAMPlaneTracker.h:387
bool onStop(const unsigned int lowerFrameIndex, const unsigned int initialFrameIndex, const unsigned int upperFrameIndex) override
Component start event function.
const HomogenousMatrix4 & componentInitialPose_
The initial pose that is used for the initial frame.
Definition SLAMPlaneTracker.h:372
CV::FramePyramid componentIntermediateFramePyramid_
Intermediate frame pyramid.
Definition SLAMPlaneTracker.h:399
CV::FramePyramid componentInitialFramePyramid_
Frame pyramid of the initial frame.
Definition SLAMPlaneTracker.h:396
Plane3 * componentResultingPlane_
Optional resulting optimized plane.
Definition SLAMPlaneTracker.h:381
PlaneTrackerComponent(SLAMPlaneTracker &parent, const PinholeCamera &pinholeCamera, const HomogenousMatrix4 &initialPose, const Plane3 &plane, const bool createStateEvents, OfflinePoses *poses, Plane3 *optimizedPlane)
Creates a new component object.
bool onStart(const unsigned int lowerFrameIndex, const unsigned int initialFrameIndex, const unsigned int upperFrameIndex) override
Component start event function.
OfflinePoses componentPoses_
The camera poses that are detected during tracking, one pose for each frame.
Definition SLAMPlaneTracker.h:390
IterationResult onFrame(const unsigned int previousIndex, const unsigned int currentIndex, const unsigned int iteration, const unsigned int maximalIterations) override
Applies one component step.
ImagePointsPairs componentImagePointsPairs_
The set of pairs of image points that have been used to determine the individual poses.
Definition SLAMPlaneTracker.h:393
This class implements a plane verifier component that selects the unique valid plane from a set of tw...
Definition SLAMPlaneTracker.h:210
SLAMPlaneTracker & componentParent_
Parent tracker that invokes this component.
Definition SLAMPlaneTracker.h:254
Vectors2 componentPreviousImagePoints_
The image points of the previous frame.
Definition SLAMPlaneTracker.h:290
const CV::SubRegion & componentInitialSubRegion_
Initial sub-region defining the planar area in the initial frame.
Definition SLAMPlaneTracker.h:275
const PinholeCamera componentCamera_
The camera profile that is applied.
Definition SLAMPlaneTracker.h:257
Plane3 & componentResultingPlane_
Resulting valid plane.
Definition SLAMPlaneTracker.h:287
bool onStop(const unsigned int lowerFrameIndex, const unsigned int initialFrameIndex, const unsigned int upperFrameIndex) override
Component start event function.
Vectors2 componentCurrentImagePoints_
The image points of the current frame.
Definition SLAMPlaneTracker.h:293
~ValidPlaneIdentifyComponent() override
Destructor.
Definition SLAMPlaneTracker.h:517
const Scalar componentMaximalSqrDistance_
Maximal square distance between a projected 3D plane object point and a visible camera image point.
Definition SLAMPlaneTracker.h:284
Vectors2 componentInitialImagePoints_
Initial image points lying within the planar area in the initial frame.
Definition SLAMPlaneTracker.h:278
bool onStartDecreasing() override
Component decreasing start event function.
const HomogenousMatrix4 & componentInitialPose_
Initial camera pose for the frame index for that the tracking starts.
Definition SLAMPlaneTracker.h:260
IterationResult onFrame(const unsigned int previousIndex, const unsigned int currentIndex, const unsigned int iteration, const unsigned int maximalIterations) override
Applies one component step.
ValidPlaneIdentifyComponent(SLAMPlaneTracker &parent, const PinholeCamera &pinholeCamera, const HomogenousMatrix4 &initialPose, const Plane3 planeCandidates[2], const CV::SubRegion &initialSubRegion, Plane3 &resultingPlane, const Scalar maximalSqrDistance=Scalar(3 *3))
Creates a new component object.
This class implements a SLAM tracker.
Definition SLAMPlaneTracker.h:49
bool determinePlane(const unsigned int lowerFrameIndex, const unsigned int initialFrameIndex, const unsigned int upperFrameIndex)
Determines an initial plane.
ShiftVector< Geometry::NonLinearOptimizationPlane::ImagePointsPair > ImagePointsPairs
Definition of a shift vector holding image point pairs.
Definition SLAMPlaneTracker.h:60
bool optimizePlane(const unsigned int lowerFrameIndex, const unsigned int initialFrameIndex, const unsigned int upperFrameIndex)
Optimizes the initial plane.
~SLAMPlaneTracker() override
Destructs a tracker object.
ShiftVector< SquareMatrix3 > Homographies
Definition of a shift vector holding homographies.
Definition SLAMPlaneTracker.h:55
CV::SubRegion initialSubRegion_
The user-defined sub-region for the initial tracking frame.
Definition SLAMPlaneTracker.h:509
bool setInitialTrackingArea(const Frame &yMask)
Sets an initial tracking area defined by a set of 2D triangles located in the initial camera frame.
const HomogenousMatrix4 initialPose_
The initial pose that is defined for the first frame index, this pose is the default pose: locking to...
Definition SLAMPlaneTracker.h:506
bool applyFrameTracking(const FrameType &frameType) override
Frame tracker run function.
bool updateObjectTransformation()
Updates the tracker object transformation using the current camera profile and plane of this tracker.
bool trackPlane(const PinholeCamera &pinholeCamera, const Plane3 &plane, const unsigned int lowerFrameIndex, const unsigned int initialFrameIndex, const unsigned int upperFrameIndex, const bool createStateEvents, Plane3 *optimizedPlane=nullptr, OfflinePoses *poses=nullptr)
Tracks a known plane and can determines the camera poses or/and optimize the plane.
SLAMPlaneTracker()
Creates a new tracker object.
void updatePlane(const Plane3 &plane) override
Updates the plane of this tracker and invokes the corresponding state event(s).
bool setInitialTrackingArea(const Triangles2 &triangles)
Sets an initial tracking area defined by a set of 2D triangles located in the initial camera frame.
bool determineInitialPlane(const PinholeCamera &pinholeCamera, const unsigned int lowerFrameIndex, const unsigned int initialFrameIndex, const unsigned int upperFrameIndex, Plane3 &optimizedPlane, PinholeCamera *optimizedCamera=nullptr)
Determines an initial plane.
void updateCamera(const PinholeCamera &pinholeCamera) override
Updates the camera of this tracker and invokes the corresponding state event(s).
This class implements a worker able to distribute function calls over different threads.
Definition Worker.h:33
float Scalar
Definition of a scalar type.
Definition Math.h:129
std::vector< Triangle2 > Triangles2
Definition of a vector holding 2D triangles.
Definition Triangle2.h:57
std::vector< Vector2 > Vectors2
Definition of a vector holding Vector2 objects.
Definition Vector2.h:64
std::vector< Vector3 > Vectors3
Definition of a vector holding Vector3 objects.
Definition Vector3.h:65
SmartObjectRef< SLAMPlaneTracker, OfflineTracker > SLAMPlaneTrackerRef
Definition of an object reference holding a SLAMPlaneTracker object.
Definition SLAMPlaneTracker.h:40
The namespace covering the entire Ocean framework.
Definition Accessor.h:15