| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451 | 
							- /*M///////////////////////////////////////////////////////////////////////////////////////
 
-  //
 
-  //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 
-  //
 
-  //  By downloading, copying, installing or using the software you agree to this license.
 
-  //  If you do not agree to this license, do not download, install,
 
-  //  copy or use the software.
 
-  //
 
-  //
 
-  //                           License Agreement
 
-  //                For Open Source Computer Vision Library
 
-  //
 
-  // Copyright (C) 2013, OpenCV Foundation, all rights reserved.
 
-  // Third party copyrights are property of their respective owners.
 
-  //
 
-  // Redistribution and use in source and binary forms, with or without modification,
 
-  // are permitted provided that the following conditions are met:
 
-  //
 
-  //   * Redistribution's of source code must retain the above copyright notice,
 
-  //     this list of conditions and the following disclaimer.
 
-  //
 
-  //   * Redistribution's in binary form must reproduce the above copyright notice,
 
-  //     this list of conditions and the following disclaimer in the documentation
 
-  //     and/or other materials provided with the distribution.
 
-  //
 
-  //   * The name of the copyright holders may not be used to endorse or promote products
 
-  //     derived from this software without specific prior written permission.
 
-  //
 
-  // This software is provided by the copyright holders and contributors "as is" and
 
-  // any express or implied warranties, including, but not limited to, the implied
 
-  // warranties of merchantability and fitness for a particular purpose are disclaimed.
 
-  // In no event shall the Intel Corporation or contributors be liable for any direct,
 
-  // indirect, incidental, special, exemplary, or consequential damages
 
-  // (including, but not limited to, procurement of substitute goods or services;
 
-  // loss of use, data, or profits; or business interruption) however caused
 
-  // and on any theory of liability, whether in contract, strict liability,
 
-  // or tort (including negligence or otherwise) arising in any way out of
 
-  // the use of this software, even if advised of the possibility of such damage.
 
-  //
 
-  //M*/
 
- #ifndef __OPENCV_TRACKER_HPP__
 
- #define __OPENCV_TRACKER_HPP__
 
- #include "opencv2/core.hpp"
 
- #include "opencv2/imgproc/types_c.h"
 
- #include "feature.hpp"
 
- #include "onlineMIL.hpp"
 
- #include "onlineBoosting.hpp"
 
- /*
 
-  * Partially based on:
 
-  * ====================================================================================================================
 
-  *   - [AAM] S. Salti, A. Cavallaro, L. Di Stefano, Adaptive Appearance Modeling for Video Tracking: Survey and Evaluation
 
-  *  - [AMVOT] X. Li, W. Hu, C. Shen, Z. Zhang, A. Dick, A. van den Hengel, A Survey of Appearance Models in Visual Object Tracking
 
-  *
 
-  * This Tracking API has been designed with PlantUML. If you modify this API please change UML files under modules/tracking/doc/uml
 
-  *
 
-  */
 
- namespace cv
 
- {
 
- //! @addtogroup tracking
 
- //! @{
 
- /************************************ TrackerFeature Base Classes ************************************/
 
- /** @brief Abstract base class for TrackerFeature that represents the feature.
 
-  */
 
- class CV_EXPORTS TrackerFeature
 
- {
 
-  public:
 
-   virtual ~TrackerFeature();
 
-   /** @brief Compute the features in the images collection
 
-     @param images The images
 
-     @param response The output response
 
-      */
 
-   void compute( const std::vector<Mat>& images, Mat& response );
 
-   /** @brief Create TrackerFeature by tracker feature type
 
-     @param trackerFeatureType The TrackerFeature name
 
-     The modes available now:
 
-     -   "HAAR" -- Haar Feature-based
 
-     The modes that will be available soon:
 
-     -   "HOG" -- Histogram of Oriented Gradients features
 
-     -   "LBP" -- Local Binary Pattern features
 
-     -   "FEATURE2D" -- All types of Feature2D
 
-      */
 
-   static Ptr<TrackerFeature> create( const String& trackerFeatureType );
 
-   /** @brief Identify most effective features
 
-     @param response Collection of response for the specific TrackerFeature
 
-     @param npoints Max number of features
 
-     @note This method modifies the response parameter
 
-      */
 
-   virtual void selection( Mat& response, int npoints ) = 0;
 
-   /** @brief Get the name of the specific TrackerFeature
 
-      */
 
-   String getClassName() const;
 
-  protected:
 
-   virtual bool computeImpl( const std::vector<Mat>& images, Mat& response ) = 0;
 
-   String className;
 
- };
 
- /** @brief Class that manages the extraction and selection of features
 
- @cite AAM Feature Extraction and Feature Set Refinement (Feature Processing and Feature Selection).
 
- See table I and section III C @cite AMVOT Appearance modelling -\> Visual representation (Table II,
 
- section 3.1 - 3.2)
 
- TrackerFeatureSet is an aggregation of TrackerFeature
 
- @sa
 
-    TrackerFeature
 
-  */
 
- class CV_EXPORTS TrackerFeatureSet
 
- {
 
-  public:
 
-   TrackerFeatureSet();
 
-   ~TrackerFeatureSet();
 
-   /** @brief Extract features from the images collection
 
-     @param images The input images
 
-      */
 
-   void extraction( const std::vector<Mat>& images );
 
-   /** @brief Identify most effective features for all feature types (optional)
 
-      */
 
-   void selection();
 
-   /** @brief Remove outliers for all feature types (optional)
 
-      */
 
-   void removeOutliers();
 
-   /** @brief Add TrackerFeature in the collection. Return true if TrackerFeature is added, false otherwise
 
-     @param trackerFeatureType The TrackerFeature name
 
-     The modes available now:
 
-     -   "HAAR" -- Haar Feature-based
 
-     The modes that will be available soon:
 
-     -   "HOG" -- Histogram of Oriented Gradients features
 
-     -   "LBP" -- Local Binary Pattern features
 
-     -   "FEATURE2D" -- All types of Feature2D
 
-     Example TrackerFeatureSet::addTrackerFeature : :
 
-     @code
 
-         //sample usage:
 
-         Ptr<TrackerFeature> trackerFeature = new TrackerFeatureHAAR( HAARparameters );
 
-         featureSet->addTrackerFeature( trackerFeature );
 
-         //or add CSC sampler with default parameters
 
-         //featureSet->addTrackerFeature( "HAAR" );
 
-     @endcode
 
-     @note If you use the second method, you must initialize the TrackerFeature
 
-      */
 
-   bool addTrackerFeature( String trackerFeatureType );
 
-   /** @overload
 
-     @param feature The TrackerFeature class
 
-     */
 
-   bool addTrackerFeature( Ptr<TrackerFeature>& feature );
 
-   /** @brief Get the TrackerFeature collection (TrackerFeature name, TrackerFeature pointer)
 
-      */
 
-   const std::vector<std::pair<String, Ptr<TrackerFeature> > >& getTrackerFeature() const;
 
-   /** @brief Get the responses
 
-     @note Be sure to call extraction before getResponses Example TrackerFeatureSet::getResponses : :
 
-      */
 
-   const std::vector<Mat>& getResponses() const;
 
-  private:
 
-   void clearResponses();
 
-   bool blockAddTrackerFeature;
 
-   std::vector<std::pair<String, Ptr<TrackerFeature> > > features;  //list of features
 
-   std::vector<Mat> responses;        //list of response after compute
 
- };
 
- /************************************ TrackerSampler Base Classes ************************************/
 
- /** @brief Abstract base class for TrackerSamplerAlgorithm that represents the algorithm for the specific
 
- sampler.
 
-  */
 
- class CV_EXPORTS TrackerSamplerAlgorithm
 
- {
 
-  public:
 
-   /**
 
-    * \brief Destructor
 
-    */
 
-   virtual ~TrackerSamplerAlgorithm();
 
-   /** @brief Create TrackerSamplerAlgorithm by tracker sampler type.
 
-     @param trackerSamplerType The trackerSamplerType name
 
-     The modes available now:
 
-     -   "CSC" -- Current State Center
 
-     -   "CS" -- Current State
 
-      */
 
-   static Ptr<TrackerSamplerAlgorithm> create( const String& trackerSamplerType );
 
-   /** @brief Computes the regions starting from a position in an image.
 
-     Return true if samples are computed, false otherwise
 
-     @param image The current frame
 
-     @param boundingBox The bounding box from which regions can be calculated
 
-     @param sample The computed samples @cite AAM Fig. 1 variable Sk
 
-      */
 
-   bool sampling( const Mat& image, Rect boundingBox, std::vector<Mat>& sample );
 
-   /** @brief Get the name of the specific TrackerSamplerAlgorithm
 
-     */
 
-   String getClassName() const;
 
-  protected:
 
-   String className;
 
-   virtual bool samplingImpl( const Mat& image, Rect boundingBox, std::vector<Mat>& sample ) = 0;
 
- };
 
- /**
 
-  * \brief Class that manages the sampler in order to select regions for the update the model of the tracker
 
-  * [AAM] Sampling e Labeling. See table I and section III B
 
-  */
 
- /** @brief Class that manages the sampler in order to select regions for the update the model of the tracker
 
- @cite AAM Sampling e Labeling. See table I and section III B
 
- TrackerSampler is an aggregation of TrackerSamplerAlgorithm
 
- @sa
 
-    TrackerSamplerAlgorithm
 
-  */
 
- class CV_EXPORTS TrackerSampler
 
- {
 
-  public:
 
-   /**
 
-    * \brief Constructor
 
-    */
 
-   TrackerSampler();
 
-   /**
 
-    * \brief Destructor
 
-    */
 
-   ~TrackerSampler();
 
-   /** @brief Computes the regions starting from a position in an image
 
-     @param image The current frame
 
-     @param boundingBox The bounding box from which regions can be calculated
 
-      */
 
-   void sampling( const Mat& image, Rect boundingBox );
 
-   /** @brief Return the collection of the TrackerSamplerAlgorithm
 
-     */
 
-   const std::vector<std::pair<String, Ptr<TrackerSamplerAlgorithm> > >& getSamplers() const;
 
-   /** @brief Return the samples from all TrackerSamplerAlgorithm, @cite AAM Fig. 1 variable Sk
 
-     */
 
-   const std::vector<Mat>& getSamples() const;
 
-   /** @brief Add TrackerSamplerAlgorithm in the collection. Return true if sampler is added, false otherwise
 
-     @param trackerSamplerAlgorithmType The TrackerSamplerAlgorithm name
 
-     The modes available now:
 
-     -   "CSC" -- Current State Center
 
-     -   "CS" -- Current State
 
-     -   "PF" -- Particle Filtering
 
-     Example TrackerSamplerAlgorithm::addTrackerSamplerAlgorithm : :
 
-     @code
 
-          TrackerSamplerCSC::Params CSCparameters;
 
-          Ptr<TrackerSamplerAlgorithm> CSCSampler = new TrackerSamplerCSC( CSCparameters );
 
-          if( !sampler->addTrackerSamplerAlgorithm( CSCSampler ) )
 
-            return false;
 
-          //or add CSC sampler with default parameters
 
-          //sampler->addTrackerSamplerAlgorithm( "CSC" );
 
-     @endcode
 
-     @note If you use the second method, you must initialize the TrackerSamplerAlgorithm
 
-      */
 
-   bool addTrackerSamplerAlgorithm( String trackerSamplerAlgorithmType );
 
-   /** @overload
 
-     @param sampler The TrackerSamplerAlgorithm
 
-     */
 
-   bool addTrackerSamplerAlgorithm( Ptr<TrackerSamplerAlgorithm>& sampler );
 
-  private:
 
-   std::vector<std::pair<String, Ptr<TrackerSamplerAlgorithm> > > samplers;
 
-   std::vector<Mat> samples;
 
-   bool blockAddTrackerSampler;
 
-   void clearSamples();
 
- };
 
- /************************************ TrackerModel Base Classes ************************************/
 
- /** @brief Abstract base class for TrackerTargetState that represents a possible state of the target.
 
- See @cite AAM \f$\hat{x}^{i}_{k}\f$ all the states candidates.
 
- Inherits this class with your Target state, In own implementation you can add scale variation,
 
- width, height, orientation, etc.
 
-  */
 
- class CV_EXPORTS TrackerTargetState
 
- {
 
-  public:
 
-   virtual ~TrackerTargetState()
 
-   {
 
-   }
 
-   ;
 
-   /**
 
-    * \brief Get the position
 
-    * \return The position
 
-    */
 
-   Point2f getTargetPosition() const;
 
-   /**
 
-    * \brief Set the position
 
-    * \param position The position
 
-    */
 
-   void setTargetPosition( const Point2f& position );
 
-   /**
 
-    * \brief Get the width of the target
 
-    * \return The width of the target
 
-    */
 
-   int getTargetWidth() const;
 
-   /**
 
-    * \brief Set the width of the target
 
-    * \param width The width of the target
 
-    */
 
-   void setTargetWidth( int width );
 
-   /**
 
-    * \brief Get the height of the target
 
-    * \return The height of the target
 
-    */
 
-   int getTargetHeight() const;
 
-   /**
 
-    * \brief Set the height of the target
 
-    * \param height The height of the target
 
-    */
 
-   void setTargetHeight( int height );
 
-  protected:
 
-   Point2f targetPosition;
 
-   int targetWidth;
 
-   int targetHeight;
 
- };
 
- /** @brief Represents the model of the target at frame \f$k\f$ (all states and scores)
 
- See @cite AAM The set of the pair \f$\langle \hat{x}^{i}_{k}, C^{i}_{k} \rangle\f$
 
- @sa TrackerTargetState
 
-  */
 
- typedef std::vector<std::pair<Ptr<TrackerTargetState>, float> > ConfidenceMap;
 
- /** @brief Represents the estimate states for all frames
 
- @cite AAM \f$x_{k}\f$ is the trajectory of the target up to time \f$k\f$
 
- @sa TrackerTargetState
 
-  */
 
- typedef std::vector<Ptr<TrackerTargetState> > Trajectory;
 
- /** @brief Abstract base class for TrackerStateEstimator that estimates the most likely target state.
 
- See @cite AAM State estimator
 
- See @cite AMVOT Statistical modeling (Fig. 3), Table III (generative) - IV (discriminative) - V (hybrid)
 
-  */
 
- class CV_EXPORTS TrackerStateEstimator
 
- {
 
-  public:
 
-   virtual ~TrackerStateEstimator();
 
-   /** @brief Estimate the most likely target state, return the estimated state
 
-     @param confidenceMaps The overall appearance model as a list of :cConfidenceMap
 
-      */
 
-   Ptr<TrackerTargetState> estimate( const std::vector<ConfidenceMap>& confidenceMaps );
 
-   /** @brief Update the ConfidenceMap with the scores
 
-     @param confidenceMaps The overall appearance model as a list of :cConfidenceMap
 
-      */
 
-   void update( std::vector<ConfidenceMap>& confidenceMaps );
 
-   /** @brief Create TrackerStateEstimator by tracker state estimator type
 
-     @param trackeStateEstimatorType The TrackerStateEstimator name
 
-     The modes available now:
 
-     -   "BOOSTING" -- Boosting-based discriminative appearance models. See @cite AMVOT section 4.4
 
-     The modes available soon:
 
-     -   "SVM" -- SVM-based discriminative appearance models. See @cite AMVOT section 4.5
 
-      */
 
-   static Ptr<TrackerStateEstimator> create( const String& trackeStateEstimatorType );
 
-   /** @brief Get the name of the specific TrackerStateEstimator
 
-      */
 
-   String getClassName() const;
 
-  protected:
 
-   virtual Ptr<TrackerTargetState> estimateImpl( const std::vector<ConfidenceMap>& confidenceMaps ) = 0;
 
-   virtual void updateImpl( std::vector<ConfidenceMap>& confidenceMaps ) = 0;
 
-   String className;
 
- };
 
- /** @brief Abstract class that represents the model of the target. It must be instantiated by specialized
 
- tracker
 
- See @cite AAM Ak
 
- Inherits this with your TrackerModel
 
-  */
 
- class CV_EXPORTS TrackerModel
 
- {
 
-  public:
 
-   /**
 
-    * \brief Constructor
 
-    */
 
-   TrackerModel();
 
-   /**
 
-    * \brief Destructor
 
-    */
 
-   virtual ~TrackerModel();
 
-   /** @brief Set TrackerEstimator, return true if the tracker state estimator is added, false otherwise
 
-     @param trackerStateEstimator The TrackerStateEstimator
 
-     @note You can add only one TrackerStateEstimator
 
-      */
 
-   bool setTrackerStateEstimator( Ptr<TrackerStateEstimator> trackerStateEstimator );
 
-   /** @brief Estimate the most likely target location
 
-     @cite AAM ME, Model Estimation table I
 
-     @param responses Features extracted from TrackerFeatureSet
 
-      */
 
-   void modelEstimation( const std::vector<Mat>& responses );
 
-   /** @brief Update the model
 
-     @cite AAM MU, Model Update table I
 
-      */
 
-   void modelUpdate();
 
-   /** @brief Run the TrackerStateEstimator, return true if is possible to estimate a new state, false otherwise
 
-     */
 
-   bool runStateEstimator();
 
-   /** @brief Set the current TrackerTargetState in the Trajectory
 
-     @param lastTargetState The current TrackerTargetState
 
-      */
 
-   void setLastTargetState( const Ptr<TrackerTargetState>& lastTargetState );
 
-   /** @brief Get the last TrackerTargetState from Trajectory
 
-     */
 
-   Ptr<TrackerTargetState> getLastTargetState() const;
 
-   /** @brief Get the list of the ConfidenceMap
 
-     */
 
-   const std::vector<ConfidenceMap>& getConfidenceMaps() const;
 
-   /** @brief Get the last ConfidenceMap for the current frame
 
-      */
 
-   const ConfidenceMap& getLastConfidenceMap() const;
 
-   /** @brief Get the TrackerStateEstimator
 
-     */
 
-   Ptr<TrackerStateEstimator> getTrackerStateEstimator() const;
 
-  private:
 
-   void clearCurrentConfidenceMap();
 
-  protected:
 
-   std::vector<ConfidenceMap> confidenceMaps;
 
-   Ptr<TrackerStateEstimator> stateEstimator;
 
-   ConfidenceMap currentConfidenceMap;
 
-   Trajectory trajectory;
 
-   int maxCMLength;
 
-   virtual void modelEstimationImpl( const std::vector<Mat>& responses ) = 0;
 
-   virtual void modelUpdateImpl() = 0;
 
- };
 
- /************************************ Tracker Base Class ************************************/
 
- /** @brief Base abstract class for the long-term tracker:
 
-  */
 
- class CV_EXPORTS_W Tracker : public virtual Algorithm
 
- {
 
-  public:
 
-   virtual ~Tracker();
 
-   /** @brief Initialize the tracker with a know bounding box that surrounding the target
 
-     @param image The initial frame
 
-     @param boundingBox The initial boundig box
 
-     @return True if initialization went succesfully, false otherwise
 
-      */
 
-   CV_WRAP bool init( InputArray image, const Rect2d& boundingBox );
 
-   /** @brief Update the tracker, find the new most likely bounding box for the target
 
-     @param image The current frame
 
-     @param boundingBox The boundig box that represent the new target location, if true was returned, not
 
-     modified otherwise
 
-     @return True means that target was located and false means that tracker cannot locate target in
 
-     current frame. Note, that latter *does not* imply that tracker has failed, maybe target is indeed
 
-     missing from the frame (say, out of sight)
 
-      */
 
-   CV_WRAP bool update( InputArray image, CV_OUT Rect2d& boundingBox );
 
-   virtual void read( const FileNode& fn )=0;
 
-   virtual void write( FileStorage& fs ) const=0;
 
-  protected:
 
-   virtual bool initImpl( const Mat& image, const Rect2d& boundingBox ) = 0;
 
-   virtual bool updateImpl( const Mat& image, Rect2d& boundingBox ) = 0;
 
-   bool isInit;
 
-   Ptr<TrackerFeatureSet> featureSet;
 
-   Ptr<TrackerSampler> sampler;
 
-   Ptr<TrackerModel> model;
 
- };
 
- /************************************ Specific TrackerStateEstimator Classes ************************************/
 
- /** @brief TrackerStateEstimator based on Boosting
 
-     */
 
- class CV_EXPORTS TrackerStateEstimatorMILBoosting : public TrackerStateEstimator
 
- {
 
-  public:
 
-   /**
 
-    * Implementation of the target state for TrackerStateEstimatorMILBoosting
 
-    */
 
-   class TrackerMILTargetState : public TrackerTargetState
 
-   {
 
-    public:
 
-     /**
 
-      * \brief Constructor
 
-      * \param position Top left corner of the bounding box
 
-      * \param width Width of the bounding box
 
-      * \param height Height of the bounding box
 
-      * \param foreground label for target or background
 
-      * \param features features extracted
 
-      */
 
-     TrackerMILTargetState( const Point2f& position, int width, int height, bool foreground, const Mat& features );
 
-     /**
 
-      * \brief Destructor
 
-      */
 
-     ~TrackerMILTargetState()
 
-     {
 
-     }
 
-     ;
 
-     /** @brief Set label: true for target foreground, false for background
 
-     @param foreground Label for background/foreground
 
-      */
 
-     void setTargetFg( bool foreground );
 
-     /** @brief Set the features extracted from TrackerFeatureSet
 
-     @param features The features extracted
 
-      */
 
-     void setFeatures( const Mat& features );
 
-     /** @brief Get the label. Return true for target foreground, false for background
 
-      */
 
-     bool isTargetFg() const;
 
-     /** @brief Get the features extracted
 
-      */
 
-     Mat getFeatures() const;
 
-    private:
 
-     bool isTarget;
 
-     Mat targetFeatures;
 
-   };
 
-   /** @brief Constructor
 
-     @param nFeatures Number of features for each sample
 
-      */
 
-   TrackerStateEstimatorMILBoosting( int nFeatures = 250 );
 
-   ~TrackerStateEstimatorMILBoosting();
 
-   /** @brief Set the current confidenceMap
 
-     @param confidenceMap The current :cConfidenceMap
 
-      */
 
-   void setCurrentConfidenceMap( ConfidenceMap& confidenceMap );
 
-  protected:
 
-   Ptr<TrackerTargetState> estimateImpl( const std::vector<ConfidenceMap>& confidenceMaps );
 
-   void updateImpl( std::vector<ConfidenceMap>& confidenceMaps );
 
-  private:
 
-   uint max_idx( const std::vector<float> &v );
 
-   void prepareData( const ConfidenceMap& confidenceMap, Mat& positive, Mat& negative );
 
-   ClfMilBoost boostMILModel;
 
-   bool trained;
 
-   int numFeatures;
 
-   ConfidenceMap currentConfidenceMap;
 
- };
 
- /** @brief TrackerStateEstimatorAdaBoosting based on ADA-Boosting
 
-  */
 
- class CV_EXPORTS TrackerStateEstimatorAdaBoosting : public TrackerStateEstimator
 
- {
 
-  public:
 
-   /** @brief Implementation of the target state for TrackerAdaBoostingTargetState
 
-     */
 
-   class TrackerAdaBoostingTargetState : public TrackerTargetState
 
-   {
 
-    public:
 
-     /**
 
-      * \brief Constructor
 
-      * \param position Top left corner of the bounding box
 
-      * \param width Width of the bounding box
 
-      * \param height Height of the bounding box
 
-      * \param foreground label for target or background
 
-      * \param responses list of features
 
-      */
 
-     TrackerAdaBoostingTargetState( const Point2f& position, int width, int height, bool foreground, const Mat& responses );
 
-     /**
 
-      * \brief Destructor
 
-      */
 
-     ~TrackerAdaBoostingTargetState()
 
-     {
 
-     }
 
-     ;
 
-     /** @brief Set the features extracted from TrackerFeatureSet
 
-     @param responses The features extracted
 
-      */
 
-     void setTargetResponses( const Mat& responses );
 
-     /** @brief Set label: true for target foreground, false for background
 
-     @param foreground Label for background/foreground
 
-      */
 
-     void setTargetFg( bool foreground );
 
-     /** @brief Get the features extracted
 
-      */
 
-     Mat getTargetResponses() const;
 
-     /** @brief Get the label. Return true for target foreground, false for background
 
-     */
 
-     bool isTargetFg() const;
 
-    private:
 
-     bool isTarget;
 
-     Mat targetResponses;
 
-   };
 
-   /** @brief Constructor
 
-     @param numClassifer Number of base classifiers
 
-     @param initIterations Number of iterations in the initialization
 
-     @param nFeatures Number of features/weak classifiers
 
-     @param patchSize tracking rect
 
-     @param ROI initial ROI
 
-      */
 
-   TrackerStateEstimatorAdaBoosting( int numClassifer, int initIterations, int nFeatures, Size patchSize, const Rect& ROI );
 
-   /**
 
-    * \brief Destructor
 
-    */
 
-   ~TrackerStateEstimatorAdaBoosting();
 
-   /** @brief Get the sampling ROI
 
-      */
 
-   Rect getSampleROI() const;
 
-   /** @brief Set the sampling ROI
 
-     @param ROI the sampling ROI
 
-      */
 
-   void setSampleROI( const Rect& ROI );
 
-   /** @brief Set the current confidenceMap
 
-     @param confidenceMap The current :cConfidenceMap
 
-      */
 
-   void setCurrentConfidenceMap( ConfidenceMap& confidenceMap );
 
-   /** @brief Get the list of the selected weak classifiers for the classification step
 
-      */
 
-   std::vector<int> computeSelectedWeakClassifier();
 
-   /** @brief Get the list of the weak classifiers that should be replaced
 
-      */
 
-   std::vector<int> computeReplacedClassifier();
 
-   /** @brief Get the list of the weak classifiers that replace those to be replaced
 
-      */
 
-   std::vector<int> computeSwappedClassifier();
 
-  protected:
 
-   Ptr<TrackerTargetState> estimateImpl( const std::vector<ConfidenceMap>& confidenceMaps );
 
-   void updateImpl( std::vector<ConfidenceMap>& confidenceMaps );
 
-   Ptr<StrongClassifierDirectSelection> boostClassifier;
 
-  private:
 
-   int numBaseClassifier;
 
-   int iterationInit;
 
-   int numFeatures;
 
-   bool trained;
 
-   Size initPatchSize;
 
-   Rect sampleROI;
 
-   std::vector<int> replacedClassifier;
 
-   std::vector<int> swappedClassifier;
 
-   ConfidenceMap currentConfidenceMap;
 
- };
 
- /**
 
-  * \brief TrackerStateEstimator based on SVM
 
-  */
 
- class CV_EXPORTS TrackerStateEstimatorSVM : public TrackerStateEstimator
 
- {
 
-  public:
 
-   TrackerStateEstimatorSVM();
 
-   ~TrackerStateEstimatorSVM();
 
-  protected:
 
-   Ptr<TrackerTargetState> estimateImpl( const std::vector<ConfidenceMap>& confidenceMaps );
 
-   void updateImpl( std::vector<ConfidenceMap>& confidenceMaps );
 
- };
 
- /************************************ Specific TrackerSamplerAlgorithm Classes ************************************/
 
- /** @brief TrackerSampler based on CSC (current state centered), used by MIL algorithm TrackerMIL
 
-  */
 
- class CV_EXPORTS TrackerSamplerCSC : public TrackerSamplerAlgorithm
 
- {
 
-  public:
 
-   enum
 
-   {
 
-     MODE_INIT_POS = 1,  //!< mode for init positive samples
 
-     MODE_INIT_NEG = 2,  //!< mode for init negative samples
 
-     MODE_TRACK_POS = 3,  //!< mode for update positive samples
 
-     MODE_TRACK_NEG = 4,  //!< mode for update negative samples
 
-     MODE_DETECT = 5   //!< mode for detect samples
 
-   };
 
-   struct CV_EXPORTS Params
 
-   {
 
-     Params();
 
-     float initInRad;        //!< radius for gathering positive instances during init
 
-     float trackInPosRad;    //!< radius for gathering positive instances during tracking
 
-     float searchWinSize;  //!< size of search window
 
-     int initMaxNegNum;      //!< # negative samples to use during init
 
-     int trackMaxPosNum;     //!< # positive samples to use during training
 
-     int trackMaxNegNum;     //!< # negative samples to use during training
 
-   };
 
-   /** @brief Constructor
 
-     @param parameters TrackerSamplerCSC parameters TrackerSamplerCSC::Params
 
-      */
 
-   TrackerSamplerCSC( const TrackerSamplerCSC::Params ¶meters = TrackerSamplerCSC::Params() );
 
-   /** @brief Set the sampling mode of TrackerSamplerCSC
 
-     @param samplingMode The sampling mode
 
-     The modes are:
 
-     -   "MODE_INIT_POS = 1" -- for the positive sampling in initialization step
 
-     -   "MODE_INIT_NEG = 2" -- for the negative sampling in initialization step
 
-     -   "MODE_TRACK_POS = 3" -- for the positive sampling in update step
 
-     -   "MODE_TRACK_NEG = 4" -- for the negative sampling in update step
 
-     -   "MODE_DETECT = 5" -- for the sampling in detection step
 
-      */
 
-   void setMode( int samplingMode );
 
-   ~TrackerSamplerCSC();
 
-  protected:
 
-   bool samplingImpl( const Mat& image, Rect boundingBox, std::vector<Mat>& sample );
 
-  private:
 
-   Params params;
 
-   int mode;
 
-   RNG rng;
 
-   std::vector<Mat> sampleImage( const Mat& img, int x, int y, int w, int h, float inrad, float outrad = 0, int maxnum = 1000000 );
 
- };
 
- /** @brief TrackerSampler based on CS (current state), used by algorithm TrackerBoosting
 
-  */
 
- class CV_EXPORTS TrackerSamplerCS : public TrackerSamplerAlgorithm
 
- {
 
-  public:
 
-   enum
 
-   {
 
-     MODE_POSITIVE = 1,  //!< mode for positive samples
 
-     MODE_NEGATIVE = 2,  //!< mode for negative samples
 
-     MODE_CLASSIFY = 3  //!< mode for classify samples
 
-   };
 
-   struct CV_EXPORTS Params
 
-   {
 
-     Params();
 
-     float overlap;  //!<overlapping for the search windows
 
-     float searchFactor;  //!<search region parameter
 
-   };
 
-   /** @brief Constructor
 
-     @param parameters TrackerSamplerCS parameters TrackerSamplerCS::Params
 
-      */
 
-   TrackerSamplerCS( const TrackerSamplerCS::Params ¶meters = TrackerSamplerCS::Params() );
 
-   /** @brief Set the sampling mode of TrackerSamplerCS
 
-     @param samplingMode The sampling mode
 
-     The modes are:
 
-     -   "MODE_POSITIVE = 1" -- for the positive sampling
 
-     -   "MODE_NEGATIVE = 2" -- for the negative sampling
 
-     -   "MODE_CLASSIFY = 3" -- for the sampling in classification step
 
-      */
 
-   void setMode( int samplingMode );
 
-   ~TrackerSamplerCS();
 
-   bool samplingImpl( const Mat& image, Rect boundingBox, std::vector<Mat>& sample );
 
-   Rect getROI() const;
 
-  private:
 
-   Rect getTrackingROI( float searchFactor );
 
-   Rect RectMultiply( const Rect & rect, float f );
 
-   std::vector<Mat> patchesRegularScan( const Mat& image, Rect trackingROI, Size patchSize );
 
-   void setCheckedROI( Rect imageROI );
 
-   Params params;
 
-   int mode;
 
-   Rect trackedPatch;
 
-   Rect validROI;
 
-   Rect ROI;
 
- };
 
- /** @brief This sampler is based on particle filtering.
 
- In principle, it can be thought of as performing some sort of optimization (and indeed, this
 
- tracker uses opencv's optim module), where tracker seeks to find the rectangle in given frame,
 
- which is the most *"similar"* to the initial rectangle (the one, given through the constructor).
 
- The optimization performed is stochastic and somehow resembles genetic algorithms, where on each new
 
- image received (submitted via TrackerSamplerPF::sampling()) we start with the region bounded by
 
- boundingBox, then generate several "perturbed" boxes, take the ones most similar to the original.
 
- This selection round is repeated several times. At the end, we hope that only the most promising box
 
- remaining, and these are combined to produce the subrectangle of image, which is put as a sole
 
- element in array sample.
 
- It should be noted, that the definition of "similarity" between two rectangles is based on comparing
 
- their histograms. As experiments show, tracker is *not* very succesfull if target is assumed to
 
- strongly change its dimensions.
 
-  */
 
- class CV_EXPORTS TrackerSamplerPF : public TrackerSamplerAlgorithm
 
- {
 
- public:
 
-   /** @brief This structure contains all the parameters that can be varied during the course of sampling
 
-     algorithm. Below is the structure exposed, together with its members briefly explained with
 
-     reference to the above discussion on algorithm's working.
 
-  */
 
-   struct CV_EXPORTS Params
 
-   {
 
-     Params();
 
-     int iterationNum; //!< number of selection rounds
 
-     int particlesNum; //!< number of "perturbed" boxes on each round
 
-     double alpha; //!< with each new round we exponentially decrease the amount of "perturbing" we allow (like in simulated annealing)
 
-                   //!< and this very alpha controls how fast annealing happens, ie. how fast perturbing decreases
 
-     Mat_<double> std; //!< initial values for perturbing (1-by-4 array, as each rectangle is given by 4 values -- coordinates of opposite vertices,
 
-                       //!< hence we have 4 values to perturb)
 
-   };
 
-   /** @brief Constructor
 
-     @param chosenRect Initial rectangle, that is supposed to contain target we'd like to track.
 
-     @param parameters
 
-      */
 
-   TrackerSamplerPF(const Mat& chosenRect,const TrackerSamplerPF::Params ¶meters = TrackerSamplerPF::Params());
 
- protected:
 
-   bool samplingImpl( const Mat& image, Rect boundingBox, std::vector<Mat>& sample );
 
- private:
 
-   Params params;
 
-   Ptr<MinProblemSolver> _solver;
 
-   Ptr<MinProblemSolver::Function> _function;
 
- };
 
- /************************************ Specific TrackerFeature Classes ************************************/
 
- /**
 
-  * \brief TrackerFeature based on Feature2D
 
-  */
 
- class CV_EXPORTS TrackerFeatureFeature2d : public TrackerFeature
 
- {
 
-  public:
 
-   /**
 
-    * \brief Constructor
 
-    * \param detectorType string of FeatureDetector
 
-    * \param descriptorType string of DescriptorExtractor
 
-    */
 
-   TrackerFeatureFeature2d( String detectorType, String descriptorType );
 
-   ~TrackerFeatureFeature2d();
 
-   void selection( Mat& response, int npoints );
 
-  protected:
 
-   bool computeImpl( const std::vector<Mat>& images, Mat& response );
 
-  private:
 
-   std::vector<KeyPoint> keypoints;
 
- };
 
- /**
 
-  * \brief TrackerFeature based on HOG
 
-  */
 
- class CV_EXPORTS TrackerFeatureHOG : public TrackerFeature
 
- {
 
-  public:
 
-   TrackerFeatureHOG();
 
-   ~TrackerFeatureHOG();
 
-   void selection( Mat& response, int npoints );
 
-  protected:
 
-   bool computeImpl( const std::vector<Mat>& images, Mat& response );
 
- };
 
- /** @brief TrackerFeature based on HAAR features, used by TrackerMIL and many others algorithms
 
- @note HAAR features implementation is copied from apps/traincascade and modified according to MIL
 
-  */
 
- class CV_EXPORTS TrackerFeatureHAAR : public TrackerFeature
 
- {
 
-  public:
 
-   struct CV_EXPORTS Params
 
-   {
 
-     Params();
 
-     int numFeatures;  //!< # of rects
 
-     Size rectSize;    //!< rect size
 
-     bool isIntegral;  //!< true if input images are integral, false otherwise
 
-   };
 
-   /** @brief Constructor
 
-     @param parameters TrackerFeatureHAAR parameters TrackerFeatureHAAR::Params
 
-      */
 
-   TrackerFeatureHAAR( const TrackerFeatureHAAR::Params ¶meters = TrackerFeatureHAAR::Params() );
 
-   ~TrackerFeatureHAAR();
 
-   /** @brief Compute the features only for the selected indices in the images collection
 
-     @param selFeatures indices of selected features
 
-     @param images The images
 
-     @param response Collection of response for the specific TrackerFeature
 
-      */
 
-   bool extractSelected( const std::vector<int> selFeatures, const std::vector<Mat>& images, Mat& response );
 
-   /** @brief Identify most effective features
 
-     @param response Collection of response for the specific TrackerFeature
 
-     @param npoints Max number of features
 
-     @note This method modifies the response parameter
 
-      */
 
-   void selection( Mat& response, int npoints );
 
-   /** @brief Swap the feature in position source with the feature in position target
 
-   @param source The source position
 
-   @param target The target position
 
-  */
 
-   bool swapFeature( int source, int target );
 
-   /** @brief   Swap the feature in position id with the feature input
 
-   @param id The position
 
-   @param feature The feature
 
-  */
 
-   bool swapFeature( int id, CvHaarEvaluator::FeatureHaar& feature );
 
-   /** @brief Get the feature in position id
 
-     @param id The position
 
-      */
 
-   CvHaarEvaluator::FeatureHaar& getFeatureAt( int id );
 
-  protected:
 
-   bool computeImpl( const std::vector<Mat>& images, Mat& response );
 
-  private:
 
-   Params params;
 
-   Ptr<CvHaarEvaluator> featureEvaluator;
 
- };
 
- /**
 
-  * \brief TrackerFeature based on LBP
 
-  */
 
- class CV_EXPORTS TrackerFeatureLBP : public TrackerFeature
 
- {
 
-  public:
 
-   TrackerFeatureLBP();
 
-   ~TrackerFeatureLBP();
 
-   void selection( Mat& response, int npoints );
 
-  protected:
 
-   bool computeImpl( const std::vector<Mat>& images, Mat& response );
 
- };
 
- /************************************ Specific Tracker Classes ************************************/
 
- /** @brief 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 @cite MIL .
 
- Original code can be found here <http://vision.ucsd.edu/~bbabenko/project_miltrack.shtml>
 
-  */
 
- class CV_EXPORTS_W TrackerMIL : public Tracker
 
- {
 
-  public:
 
-   struct CV_EXPORTS Params
 
-   {
 
-     Params();
 
-     //parameters for sampler
 
-     float samplerInitInRadius;  //!< radius for gathering positive instances during init
 
-     int samplerInitMaxNegNum;  //!< # negative samples to use during init
 
-     float samplerSearchWinSize;  //!< size of search window
 
-     float samplerTrackInRadius;  //!< radius for gathering positive instances during tracking
 
-     int samplerTrackMaxPosNum;  //!< # positive samples to use during tracking
 
-     int samplerTrackMaxNegNum;  //!< # negative samples to use during tracking
 
-     int featureSetNumFeatures;  //!< # features
 
-     void read( const FileNode& fn );
 
-     void write( FileStorage& fs ) const;
 
-   };
 
-   /** @brief Constructor
 
-     @param parameters MIL parameters TrackerMIL::Params
 
-      */
 
-   static Ptr<TrackerMIL> create(const TrackerMIL::Params ¶meters);
 
-   CV_WRAP static Ptr<TrackerMIL> create();
 
-   virtual ~TrackerMIL() {}
 
- };
 
- /** @brief This is a real-time object tracking based on a novel on-line version of the AdaBoost algorithm.
 
- The classifier uses the surrounding background as negative examples in update step to avoid the
 
- drifting problem. The implementation is based on @cite OLB .
 
-  */
 
- class CV_EXPORTS_W TrackerBoosting : public Tracker
 
- {
 
-  public:
 
-   struct CV_EXPORTS Params
 
-   {
 
-     Params();
 
-     int numClassifiers;  //!<the number of classifiers to use in a OnlineBoosting algorithm
 
-     float samplerOverlap;  //!<search region parameters to use in a OnlineBoosting algorithm
 
-     float samplerSearchFactor;  //!< search region parameters to use in a OnlineBoosting algorithm
 
-     int iterationInit;  //!<the initial iterations
 
-     int featureSetNumFeatures;  //!< # features
 
-     /**
 
-      * \brief Read parameters from file
 
-      */
 
-     void read( const FileNode& fn );
 
-     /**
 
-      * \brief Write parameters in a file
 
-      */
 
-     void write( FileStorage& fs ) const;
 
-   };
 
-   /** @brief Constructor
 
-     @param parameters BOOSTING parameters TrackerBoosting::Params
 
-      */
 
-   static Ptr<TrackerBoosting> create(const TrackerBoosting::Params ¶meters);
 
-   CV_WRAP static Ptr<TrackerBoosting> create();
 
-   virtual ~TrackerBoosting() {}
 
- };
 
- /** @brief Median Flow tracker implementation.
 
- Implementation of a paper @cite 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.
 
-  */
 
- class CV_EXPORTS_W TrackerMedianFlow : public Tracker
 
- {
 
-  public:
 
-   struct CV_EXPORTS Params
 
-   {
 
-     Params(); //!<default constructor
 
-               //!<note that the default values of parameters are recommended for most of use cases
 
-     int pointsInGrid;      //!<square root of number of keypoints used; increase it to trade
 
-                            //!<accurateness for speed
 
-     cv::Size winSize;      //!<window size parameter for Lucas-Kanade optical flow
 
-     int maxLevel;          //!<maximal pyramid level number for Lucas-Kanade optical flow
 
-     TermCriteria termCriteria; //!<termination criteria for Lucas-Kanade optical flow
 
-     cv::Size winSizeNCC;   //!<window size around a point for normalized cross-correlation check
 
-     double maxMedianLengthOfDisplacementDifference; //!<criterion for loosing the tracked object
 
-     void read( const FileNode& /*fn*/ );
 
-     void write( FileStorage& /*fs*/ ) const;
 
-   };
 
-   /** @brief Constructor
 
-     @param parameters Median Flow parameters TrackerMedianFlow::Params
 
-     */
 
-   static Ptr<TrackerMedianFlow> create(const TrackerMedianFlow::Params ¶meters);
 
-   CV_WRAP static Ptr<TrackerMedianFlow> create();
 
-   virtual ~TrackerMedianFlow() {}
 
- };
 
- /** @brief 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 @cite TLD .
 
- The Median Flow algorithm (see cv::TrackerMedianFlow) 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.
 
-  */
 
- class CV_EXPORTS_W TrackerTLD : public Tracker
 
- {
 
-  public:
 
-   struct CV_EXPORTS Params
 
-   {
 
-     Params();
 
-     void read( const FileNode& /*fn*/ );
 
-     void write( FileStorage& /*fs*/ ) const;
 
-   };
 
-   /** @brief Constructor
 
-     @param parameters TLD parameters TrackerTLD::Params
 
-      */
 
-   static Ptr<TrackerTLD> create(const TrackerTLD::Params ¶meters);
 
-   CV_WRAP static Ptr<TrackerTLD> create();
 
-   virtual ~TrackerTLD() {}
 
- };
 
- /** @brief KCF is a novel tracking framework that utilizes properties of circulant matrix to enhance the processing speed.
 
-  * This tracking method is an implementation of @cite KCF_ECCV which is extended to KFC with color-names features (@cite KCF_CN).
 
-  * The original paper of KCF is available at <http://www.robots.ox.ac.uk/~joao/publications/henriques_tpami2015.pdf>
 
-  * as well as the matlab implementation. For more information about KCF with color-names features, please refer to
 
-  * <http://www.cvl.isy.liu.se/research/objrec/visualtracking/colvistrack/index.html>.
 
-  */
 
- class CV_EXPORTS_W TrackerKCF : public Tracker
 
- {
 
- public:
 
-   /**
 
-   * \brief Feature type to be used in the tracking grayscale, colornames, compressed color-names
 
-   * The modes available now:
 
-   -   "GRAY" -- Use grayscale values as the feature
 
-   -   "CN" -- Color-names feature
 
-   */
 
-   enum MODE {
 
-     GRAY   = (1 << 0),
 
-     CN     = (1 << 1),
 
-     CUSTOM = (1 << 2)
 
-   };
 
-   struct CV_EXPORTS Params
 
-   {
 
-     /**
 
-     * \brief Constructor
 
-     */
 
-     Params();
 
-     /**
 
-     * \brief Read parameters from file, currently unused
 
-     */
 
-     void read(const FileNode& /*fn*/);
 
-     /**
 
-     * \brief Read parameters from file, currently unused
 
-     */
 
-     void write(FileStorage& /*fs*/) const;
 
-     float detect_thresh;         //!<  detection confidence threshold
 
-     float sigma;                 //!<  gaussian kernel bandwidth
 
-     float lambda;                //!<  regularization
 
-     float interp_factor;         //!<  linear interpolation factor for adaptation
 
-     float output_sigma_factor;   //!<  spatial bandwidth (proportional to target)
 
-     float pca_learning_rate;     //!<  compression learning rate
 
-     bool resize;                  //!<  activate the resize feature to improve the processing speed
 
-     bool split_coeff;             //!<  split the training coefficients into two matrices
 
-     bool wrap_kernel;             //!<  wrap around the kernel values
 
-     bool compress_feature;        //!<  activate the pca method to compress the features
 
-     int max_patch_size;           //!<  threshold for the ROI size
 
-     int compressed_size;          //!<  feature size after compression
 
-     int desc_pca;        //!<  compressed descriptors of TrackerKCF::MODE
 
-     int desc_npca;       //!<  non-compressed descriptors of TrackerKCF::MODE
 
-   };
 
-   virtual void setFeatureExtractor(void(*)(const Mat, const Rect, Mat&), bool pca_func = false) = 0;
 
-   /** @brief Constructor
 
-   @param parameters KCF parameters TrackerKCF::Params
 
-   */
 
-   static Ptr<TrackerKCF> create(const TrackerKCF::Params ¶meters);
 
-   CV_WRAP static Ptr<TrackerKCF> create();
 
-   virtual ~TrackerKCF() {}
 
- };
 
- /** @brief GOTURN (@cite GOTURN) is kind of trackers based on Convolutional Neural Networks (CNN). While taking all advantages of CNN trackers,
 
-  *  GOTURN is much faster due to offline training without online fine-tuning nature.
 
-  *  GOTURN tracker addresses the problem of single target tracking: given a bounding box label of an object in the first frame of the video,
 
-  *  we track that object through the rest of the video. NOTE: Current method of GOTURN does not handle occlusions; however, it is fairly
 
-  *  robust to viewpoint changes, lighting changes, and deformations.
 
-  *  Inputs of GOTURN are two RGB patches representing Target and Search patches resized to 227x227.
 
-  *  Outputs of GOTURN are predicted bounding box coordinates, relative to Search patch coordinate system, in format X1,Y1,X2,Y2.
 
-  *  Original paper is here: <http://davheld.github.io/GOTURN/GOTURN.pdf>
 
-  *  As long as original authors implementation: <https://github.com/davheld/GOTURN#train-the-tracker>
 
-  *  Implementation of training algorithm is placed in separately here due to 3d-party dependencies:
 
-  *  <https://github.com/Auron-X/GOTURN_Training_Toolkit>
 
-  *  GOTURN architecture goturn.prototxt and trained model goturn.caffemodel are accessible on opencv_extra GitHub repository.
 
- */
 
- class CV_EXPORTS_W TrackerGOTURN : public Tracker
 
- {
 
- public:
 
-   struct CV_EXPORTS Params
 
-   {
 
-     Params();
 
-     void read(const FileNode& /*fn*/);
 
-     void write(FileStorage& /*fs*/) const;
 
-   };
 
-   /** @brief Constructor
 
-   @param parameters GOTURN parameters TrackerGOTURN::Params
 
-   */
 
-   static Ptr<TrackerGOTURN> create(const TrackerGOTURN::Params ¶meters);
 
-   CV_WRAP static Ptr<TrackerGOTURN> create();
 
-   virtual ~TrackerGOTURN() {}
 
- };
 
- /************************************ MultiTracker Class ---By Laksono Kurnianggoro---) ************************************/
 
- /** @brief This class is used to track multiple objects using the specified tracker algorithm.
 
- * The MultiTracker is naive implementation of multiple object tracking.
 
- * It process the tracked objects independently without any optimization accross the tracked objects.
 
- */
 
- class CV_EXPORTS_W MultiTracker : public Algorithm
 
- {
 
- public:
 
-   /**
 
-   * \brief Constructor.
 
-   */
 
-   CV_WRAP MultiTracker();
 
-   /**
 
-   * \brief Destructor
 
-   */
 
-   ~MultiTracker();
 
-   /**
 
-   * \brief Add a new object to be tracked.
 
-   *
 
-   * @param newTracker tracking algorithm to be used
 
-   * @param image input image
 
-   * @param boundingBox a rectangle represents ROI of the tracked object
 
-   */
 
-   CV_WRAP bool add(Ptr<Tracker> newTracker, InputArray image, const Rect2d& boundingBox);
 
-   /**
 
-   * \brief Add a set of objects to be tracked.
 
-   * @param newTrackers list of tracking algorithms to be used
 
-   * @param image input image
 
-   * @param boundingBox list of the tracked objects
 
-   */
 
-   bool add(std::vector<Ptr<Tracker> > newTrackers, InputArray image, std::vector<Rect2d> boundingBox);
 
-   /**
 
-   * \brief Update the current tracking status.
 
-   * The result will be saved in the internal storage.
 
-   * @param image input image
 
-   */
 
-   bool update(InputArray image);
 
-   /**
 
-   * \brief Update the current tracking status.
 
-   * @param image input image
 
-   * @param boundingBox the tracking result, represent a list of ROIs of the tracked objects.
 
-   */
 
-   CV_WRAP bool update(InputArray image, CV_OUT std::vector<Rect2d> & boundingBox);
 
-   /**
 
-   * \brief Returns a reference to a storage for the tracked objects, each object corresponds to one tracker algorithm
 
-   */
 
-   CV_WRAP const std::vector<Rect2d>& getObjects() const;
 
-   /**
 
-   * \brief Returns a pointer to a new instance of MultiTracker
 
-   */
 
-   CV_WRAP static Ptr<MultiTracker> create();
 
- protected:
 
-   //!<  storage for the tracker algorithms.
 
-   std::vector< Ptr<Tracker> > trackerList;
 
-   //!<  storage for the tracked objects, each object corresponds to one tracker algorithm.
 
-   std::vector<Rect2d> objects;
 
- };
 
- /************************************ Multi-Tracker Classes ---By Tyan Vladimir---************************************/
 
- /** @brief Base abstract class for the long-term Multi Object Trackers:
 
- @sa Tracker, MultiTrackerTLD
 
- */
 
- class CV_EXPORTS MultiTracker_Alt
 
- {
 
- public:
 
-   /** @brief Constructor for Multitracker
 
-   */
 
-   MultiTracker_Alt()
 
-   {
 
-     targetNum = 0;
 
-   }
 
-   /** @brief Add a new target to a tracking-list and initialize the tracker with a know bounding box that surrounding the target
 
-   @param image The initial frame
 
-   @param boundingBox The initial boundig box of target
 
-   @param tracker_algorithm Multi-tracker algorithm
 
-   @return True if new target initialization went succesfully, false otherwise
 
-   */
 
-   bool addTarget(InputArray image, const Rect2d& boundingBox, Ptr<Tracker> tracker_algorithm);
 
-   /** @brief Update all trackers from the tracking-list, find a new most likely bounding boxes for the targets
 
-   @param image The current frame
 
-   @return True means that all targets were located and false means that tracker couldn't locate one of the targets in
 
-   current frame. Note, that latter *does not* imply that tracker has failed, maybe target is indeed
 
-   missing from the frame (say, out of sight)
 
-   */
 
-   bool update(InputArray image);
 
-   /** @brief Current number of targets in tracking-list
 
-   */
 
-   int targetNum;
 
-   /** @brief Trackers list for Multi-Object-Tracker
 
-   */
 
-   std::vector <Ptr<Tracker> > trackers;
 
-   /** @brief Bounding Boxes list for Multi-Object-Tracker
 
-   */
 
-   std::vector <Rect2d> boundingBoxes;
 
-   /** @brief List of randomly generated colors for bounding boxes display
 
-   */
 
-   std::vector<Scalar> colors;
 
- };
 
- /** @brief Multi Object Tracker for TLD. 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 @cite TLD .
 
- The Median Flow algorithm (see cv::TrackerMedianFlow) 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.
 
- @sa Tracker, MultiTracker, TrackerTLD
 
- */
 
- class CV_EXPORTS MultiTrackerTLD : public MultiTracker_Alt
 
- {
 
- public:
 
-   /** @brief Update all trackers from the tracking-list, find a new most likely bounding boxes for the targets by
 
-   optimized update method using some techniques to speedup calculations specifically for MO TLD. The only limitation
 
-   is that all target bounding boxes should have approximately same aspect ratios. Speed boost is around 20%
 
-   @param image The current frame.
 
-   @return True means that all targets were located and false means that tracker couldn't locate one of the targets in
 
-   current frame. Note, that latter *does not* imply that tracker has failed, maybe target is indeed
 
-   missing from the frame (say, out of sight)
 
-   */
 
-   bool update_opt(InputArray image);
 
- };
 
- //! @}
 
- } /* namespace cv */
 
- #endif
 
 
  |