diff --git a/modules/tracking/doc/tracker_algorithms.rst b/modules/tracking/doc/tracker_algorithms.rst index d20b10607..6ea96fd4d 100644 --- a/modules/tracking/doc/tracker_algorithms.rst +++ b/modules/tracking/doc/tracker_algorithms.rst @@ -9,6 +9,10 @@ The following algorithms are implemented at the moment. .. [OLB] H Grabner, M Grabner, and H Bischof, Real-time tracking via on-line boosting, In Proc. BMVC, volume 1, pages 47– 56, 2006 +.. [MedianFlow] Z. Kalal, K. Mikolajczyk, and J. Matas, “Forward-Backward Error: Automatic Detection of Tracking Failures,” International Conference on Pattern Recognition, 2010, pp. 23-26. + +.. [TLD] Z. Kalal, K. Mikolajczyk, and J. Matas, “Tracking-Learning-Detection,” Pattern Analysis and Machine Intelligence 2011. + TrackerBoosting --------------- @@ -63,7 +67,7 @@ Constructor :param parameters: BOOSTING parameters :ocv:struct:`TrackerBoosting::Params` TrackerMIL ----------- +---------------------- The MIL algorithm trains a classifier in an online manner to separate the object from the background. Multiple Instance Learning avoids the drift problem for a robust tracking. The implementation is based on [MIL]_. @@ -118,3 +122,108 @@ Constructor .. ocv:function:: Ptr TrackerMIL::createTracker(const trackerMIL::Params ¶meters=trackerMIL::Params()) :param parameters: MIL parameters :ocv:struct:`TrackerMIL::Params` + +TrackerMedianFlow +---------------------- + +Implementation of a paper "Forward-Backward Error: Automatic Detection of Tracking Failures" by Z. Kalal, K. Mikolajczyk +and Jiri Matas. The implementation is based on [MedianFlow]_. + +The tracker is suitable for very smooth and predictable movements when object is visible throughout the whole sequence. It's quite and +accurate for this type of problems (in particular, it was shown by authors to outperform MIL). During the implementation period the code at +http://www.aonsquared.co.uk/node/5, the courtesy of the author Arthur Amarra, was used for the reference purpose. + +.. ocv:class:: TrackerMedianFlow + +Implementation of TrackerMedianFlow from :ocv:class:`Tracker`:: + + class CV_EXPORTS_W TrackerMedianFlow : public Tracker + { + public: + void read( const FileNode& fn ); + void write( FileStorage& fs ) const; + static Ptr createTracker(const trackerMedianFlow::Params ¶meters=trackerMedianFlow::Params()); + virtual ~trackerMedianFlow(){}; + + protected: + bool initImpl( const Mat& image, const Rect2d& boundingBox ); + bool updateImpl( const Mat& image, Rect2d& boundingBox ); + }; + +TrackerMedianFlow::Params +------------------------------------ + +.. ocv:struct:: TrackerMedianFlow::Params + +List of MedianFlow parameters:: + + struct CV_EXPORTS Params + { + Params(); + int pointsInGrid; //square root of number of keypoints used; increase it to trade + //accurateness for speed; default value is sensible and recommended + + void read( const FileNode& fn ); + void write( FileStorage& fs ) const; + }; + +TrackerMedianFlow::createTracker +----------------------------------- + +Constructor + +.. ocv:function:: Ptr TrackerMedianFlow::createTracker(const trackerMedianFlow::Params ¶meters=trackerMedianFlow::Params()) + + :param parameters: Median Flow parameters :ocv:struct:`TrackerMedianFlow::Params` + +TrackerTLD +---------------------- + +TLD is a novel tracking framework that explicitly decomposes the long-term tracking task into tracking, learning + and detection. The tracker follows the object from frame to frame. The detector localizes all appearances that have been observed so + far and corrects the tracker if necessary. The learning estimates detector’s errors and updates it to avoid these errors in the future. +The implementation is based on [TLD]_. + +The Median Flow algorithm (see above) was chosen as a tracking component in this implementation, following authors. Tracker is supposed to be able +to handle rapid motions, partial occlusions, object absence etc. + +.. ocv:class:: TrackerTLD + +Implementation of TrackerTLD from :ocv:class:`Tracker`:: + + class CV_EXPORTS_W TrackerTLD : public Tracker + { + public: + void read( const FileNode& fn ); + void write( FileStorage& fs ) const; + static Ptr createTracker(const trackerTLD::Params ¶meters=trackerTLD::Params()); + virtual ~trackerTLD(){}; + + protected: + bool initImpl( const Mat& image, const Rect2d& boundingBox ); + bool updateImpl( const Mat& image, Rect2d& boundingBox ); + }; + +TrackerTLD::Params +------------------------ + +.. ocv:struct:: TrackerTLD::Params + +List of TLD parameters:: + + struct CV_EXPORTS Params + { + Params(); + + void read( const FileNode& fn ); + void write( FileStorage& fs ) const; + }; + +TrackerTLD::createTracker +------------------------------- + +Constructor + +.. ocv:function:: Ptr TrackerTLD::createTracker(const trackerTLD::Params ¶meters=trackerTLD::Params()) + + :param parameters: TLD parameters :ocv:struct:`TrackerTLD::Params` diff --git a/modules/tracking/include/opencv2/tracking/tracker.hpp b/modules/tracking/include/opencv2/tracking/tracker.hpp index 795753cc7..e043f53e2 100644 --- a/modules/tracking/include/opencv2/tracking/tracker.hpp +++ b/modules/tracking/include/opencv2/tracking/tracker.hpp @@ -1017,7 +1017,8 @@ class CV_EXPORTS_W TrackerMedianFlow : public Tracker struct CV_EXPORTS Params { Params(); - int pointsInGrid; + int pointsInGrid; //square root of number of keypoints used; increase it to trade + //accurateness for speed; default value is sensible and recommended void read( const FileNode& /*fn*/ ); void write( FileStorage& /*fs*/ ) const; };