KudanCV
PlanarTracker Class Reference

Public Types

enum  VerifierChoiceMethod { VERIFY_FIRST, VERIFY_BEST, VERIFY_ALL }
 

Public Member Functions

CameraImage::CameraResolution getResolution (PatchMatcher &patchMatcher, std::shared_ptr< Homography > homography, std::shared_ptr< Homography > previousHomography, std::shared_ptr< Marker > marker, float *maxDistance)
 
bool trackMarker (std::shared_ptr< TrackedMarker > trackedMarker)
 
void processFrame (cv::Mat image)
 
void updateCamera (cv::Mat image)
 
bool trackAllMarkers ()
 
bool processSharedOpticalFlow ()
 
void detectMarkersNow ()
 
void detectMarkersInBackground ()
 
void detectMarkers (std::vector< std::shared_ptr< Marker > > markersToDetect, std::vector< std::vector< cv::Point2f > > maskRegions)
 
void verifyDetections (std::shared_ptr< CameraImage > cameraImage)
 
std::shared_ptr< TrackedMarkersetupNewTrackedMarker (std::shared_ptr< Marker > marker, std::shared_ptr< CameraImage > cameraImage, std::shared_ptr< Homography > homography)
 
bool setupNewTrackedMarker (TrackedMarker &trackedMarker, cv::Ptr< CameraImage > cameraImage, cv::Ptr< Homography > homography)
 
std::vector< std::shared_ptr< Marker > > getMarkersToDetect ()
 
bool addMarker (std::shared_ptr< Marker > marker)
 
void removeMarker (std::shared_ptr< Marker > marker)
 Removes this marker from the detector. Does not return anything, because it can't know about state, because it's in general queued.
 
void processMarkerQueues ()
 
int getNumberOfMarkersDetected ()
 
const MarkerDetectorResultgetDetectedMarker (int position)
 
bool hasCameraCalibration ()
 
CameraCalibration getCameraCalibration ()
 
int getNumberOfTrackedMarkers ()
 
int getNumberOfMarkers ()
 
std::shared_ptr< TrackedMarkergetTrackedMarker (int position)
 
std::vector< std::vector< cv::Point2f > > getTrackedBoundaries ()
 
cv::Mat getCameraImage ()
 
std::vector< cv::KeyPoint > getKeypoints ()
 
bool isUsingFlowRecovery ()
 
void setUseFlowRecovery (bool f)
 
int numMarkersFlowRecoverable ()
 
void prohibitFlowRecovery ()
 
void setThreading (bool t)
 
void setNumDetectionThreads (int t)
 
void setNumThreads (int t)
 
void toggleParallelDetection (bool isParallel)
 
bool isDetectorParallel ()
 
void setMarkerChoiceMethod (MarkerDetector::MarkerChoiceMethod m)
 
void setMaximumSimultaneousTracking (int t)
 
void clearTracking ()
 
void setIntrinsics (float focalX, float focalY, float prinX, float prinY)
 
void setHammingThreshold (int ham)
 
void setOrientationFilterThreshold (float angle)
 
void setNumMatchesRequired (int numMatches)
 
bool trackedMarkersUseExtensions ()
 
bool anyMarkersUseExtensions ()
 
int extendMarkers (cv::Mat image)
 
bool createExtension (cv::Mat image, std::shared_ptr< Marker > marker, std::shared_ptr< TrackedMarker > trackedMarker)
 
bool checkNewMarker (std::shared_ptr< Marker > marker)
 
void switchTrackedExtensions (cv::Mat image)
 

Public Attributes

int numDetectionsAttempted
 
int numDetectionsMade
 
int numDetectionsKept
 
int numTracksAttempted
 
std::shared_ptr< DebugStatedebugState
 

Static Public Attributes

static const int maxImageWidth = 640
 

Member Function Documentation

◆ anyMarkersUseExtensions()

bool PlanarTracker::anyMarkersUseExtensions ( )

Of ALL the markers in the detector, are any of them involved in extended marker in any way? i.e. could they be extended or switched? Probably obselete!

◆ checkNewMarker()

bool PlanarTracker::checkNewMarker ( std::shared_ptr< Marker marker)

Once a new extended marker is created, it might not necessarily be good enough (could be on a featureless region of the image for example). This makes sure the new marker fulfills various criteria

◆ createExtension()

bool PlanarTracker::createExtension ( cv::Mat  image,
std::shared_ptr< Marker marker,
std::shared_ptr< TrackedMarker trackedMarker 
)

Attempt to create a new exteded marker, from an existing marker, at its current tracked state

Parameters
imageThe current camera image (for extracting the new marker image)
markerThe marker which is to be extended
trackedMarkerRepresenting the current tracked state of the marker in the image
Returns
True iff a new marker was created and added to the tracker

◆ extendMarkers()

int PlanarTracker::extendMarkers ( cv::Mat  image)

The main function for initialising extended markers (should only be called if any of the markers currently tracked support this) This will look at tracked markers, and for those which are not extended (but could be) will try to create new extensions

Parameters
imageThe current camera image
Returns
The number of new extensions created

◆ isUsingFlowRecovery()

bool PlanarTracker::isUsingFlowRecovery ( )
inline

OPTICAL FLOW RECOVERY

◆ setHammingThreshold()

void PlanarTracker::setHammingThreshold ( int  ham)
inline

Set threshold used in hamming filter, which cuts any potential match with a higher distance than this Set to a value of 0 to skip this filter Default value: 70

◆ setNumMatchesRequired()

void PlanarTracker::setNumMatchesRequired ( int  numMatches)
inline

Set the minimum number of (post homography inlier) matches required for a marker to be considered a match Default value: 30

◆ setOrientationFilterThreshold()

void PlanarTracker::setOrientationFilterThreshold ( float  angle)
inline

Set the angle threshold used in the orientation filter, which cuts matches which do differ from the dominant orientation change in the image by more than this value. Set to a value of 0 to skip this filter Angle is in degrees Default value: 8

◆ switchTrackedExtensions()

void PlanarTracker::switchTrackedExtensions ( cv::Mat  image)

This is called during tracking when any of the markershave extensions, in order to see if for any marker, any of its other extensions (i.e. markers with the same root) would be better candidates for tracking right now. If so, it will switch to tracking these, and create new TrackedMarker objects as needed

◆ trackedMarkersUseExtensions()

bool PlanarTracker::trackedMarkersUseExtensions ( )

Of all the markers currently being tracked, are any of them involved in extended marker in any way? i.e. could they be extended or switched?


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