mirror of
https://github.com/opencv/opencv_contrib.git
synced 2025-10-17 15:26:00 +08:00
doc: remove UML diagrams in tracking module
This commit is contained in:
@@ -1,256 +0,0 @@
|
|||||||
Tracking diagrams {#tracking_diagrams}
|
|
||||||
=================
|
|
||||||
|
|
||||||
General diagram
|
|
||||||
===============
|
|
||||||
|
|
||||||
@startuml{tracking_uml_general.png}
|
|
||||||
package "Tracker"
|
|
||||||
package "TrackerFeature"
|
|
||||||
package "TrackerSampler"
|
|
||||||
package "TrackerModel"
|
|
||||||
|
|
||||||
Tracker -> TrackerModel: create
|
|
||||||
Tracker -> TrackerSampler: create
|
|
||||||
Tracker -> TrackerFeature: create
|
|
||||||
@enduml
|
|
||||||
|
|
||||||
Tracker diagram
|
|
||||||
===============
|
|
||||||
|
|
||||||
@startuml{tracking_uml_tracking.png}
|
|
||||||
package "Tracker package" #DDDDDD {
|
|
||||||
|
|
||||||
|
|
||||||
class Algorithm
|
|
||||||
|
|
||||||
class Tracker{
|
|
||||||
Ptr<TrackerFeatureSet> featureSet;
|
|
||||||
Ptr<TrackerSampler> sampler;
|
|
||||||
Ptr<TrackerModel> model;
|
|
||||||
---
|
|
||||||
+static Ptr<Tracker> create(const string& trackerType);
|
|
||||||
+bool init(const Mat& image, const Rect& boundingBox);
|
|
||||||
+bool update(const Mat& image, Rect& boundingBox);
|
|
||||||
}
|
|
||||||
class Tracker
|
|
||||||
note right: Tracker is the general interface for each specialized trackers
|
|
||||||
class TrackerMIL{
|
|
||||||
+static Ptr<TrackerMIL> createTracker(const TrackerMIL::Params ¶meters);
|
|
||||||
+virtual ~TrackerMIL();
|
|
||||||
}
|
|
||||||
class TrackerBoosting{
|
|
||||||
+static Ptr<TrackerBoosting> createTracker(const TrackerBoosting::Params ¶meters);
|
|
||||||
+virtual ~TrackerBoosting();
|
|
||||||
}
|
|
||||||
Algorithm <|-- Tracker : virtual inheritance
|
|
||||||
Tracker <|-- TrackerMIL
|
|
||||||
Tracker <|-- TrackerBoosting
|
|
||||||
|
|
||||||
note "Single instance of the Tracker" as N1
|
|
||||||
TrackerBoosting .. N1
|
|
||||||
TrackerMIL .. N1
|
|
||||||
}
|
|
||||||
|
|
||||||
@enduml
|
|
||||||
|
|
||||||
TrackerFeatureSet diagram
|
|
||||||
=========================
|
|
||||||
|
|
||||||
@startuml{tracking_uml_feature.png}
|
|
||||||
package "TrackerFeature package" #DDDDDD {
|
|
||||||
|
|
||||||
class TrackerFeatureSet{
|
|
||||||
-vector<pair<string, Ptr<TrackerFeature> > > features
|
|
||||||
-vector<Mat> responses
|
|
||||||
...
|
|
||||||
TrackerFeatureSet();
|
|
||||||
~TrackerFeatureSet();
|
|
||||||
--
|
|
||||||
+extraction(const std::vector<Mat>& images);
|
|
||||||
+selection();
|
|
||||||
+removeOutliers();
|
|
||||||
+vector<Mat> response getResponses();
|
|
||||||
+vector<pair<string TrackerFeatureType, Ptr<TrackerFeature> > > getTrackerFeatures();
|
|
||||||
+bool addTrackerFeature(string trackerFeatureType);
|
|
||||||
+bool addTrackerFeature(Ptr<TrackerFeature>& feature);
|
|
||||||
-clearResponses();
|
|
||||||
}
|
|
||||||
|
|
||||||
class TrackerFeature <<virtual>>{
|
|
||||||
static Ptr<TrackerFeature> = create(const string& trackerFeatureType);
|
|
||||||
compute(const std::vector<Mat>& images, Mat& response);
|
|
||||||
selection(Mat& response, int npoints);
|
|
||||||
}
|
|
||||||
note bottom: Can be specialized as in table II\nA tracker can use more types of features
|
|
||||||
|
|
||||||
class TrackerFeatureFeature2D{
|
|
||||||
-vector<Keypoints> keypoints
|
|
||||||
---
|
|
||||||
TrackerFeatureFeature2D(string detectorType, string descriptorType);
|
|
||||||
~TrackerFeatureFeature2D();
|
|
||||||
---
|
|
||||||
compute(const std::vector<Mat>& images, Mat& response);
|
|
||||||
selection( Mat& response, int npoints);
|
|
||||||
}
|
|
||||||
class TrackerFeatureHOG{
|
|
||||||
TrackerFeatureHOG();
|
|
||||||
~TrackerFeatureHOG();
|
|
||||||
---
|
|
||||||
compute(const std::vector<Mat>& images, Mat& response);
|
|
||||||
selection(Mat& response, int npoints);
|
|
||||||
}
|
|
||||||
|
|
||||||
TrackerFeatureSet *-- TrackerFeature
|
|
||||||
TrackerFeature <|-- TrackerFeatureHOG
|
|
||||||
TrackerFeature <|-- TrackerFeatureFeature2D
|
|
||||||
|
|
||||||
|
|
||||||
note "Per readability and simplicity in this diagram\n there are only two TrackerFeature but you\n can considering the implementation of the other TrackerFeature" as N1
|
|
||||||
TrackerFeatureHOG .. N1
|
|
||||||
TrackerFeatureFeature2D .. N1
|
|
||||||
}
|
|
||||||
|
|
||||||
@enduml
|
|
||||||
|
|
||||||
|
|
||||||
TrackerModel diagram
|
|
||||||
====================
|
|
||||||
|
|
||||||
@startuml{tracking_uml_model.png}
|
|
||||||
package "TrackerModel package" #DDDDDD {
|
|
||||||
|
|
||||||
class Typedef << (T,#FF7700) >>{
|
|
||||||
ConfidenceMap
|
|
||||||
Trajectory
|
|
||||||
}
|
|
||||||
|
|
||||||
class TrackerModel{
|
|
||||||
-vector<ConfidenceMap> confidenceMaps;
|
|
||||||
-Trajectory trajectory;
|
|
||||||
-Ptr<TrackerStateEstimator> stateEstimator;
|
|
||||||
...
|
|
||||||
TrackerModel();
|
|
||||||
~TrackerModel();
|
|
||||||
|
|
||||||
+bool setTrackerStateEstimator(Ptr<TrackerStateEstimator> trackerStateEstimator);
|
|
||||||
+Ptr<TrackerStateEstimator> getTrackerStateEstimator();
|
|
||||||
|
|
||||||
+void modelEstimation(const vector<Mat>& responses);
|
|
||||||
+void modelUpdate();
|
|
||||||
+void setLastTargetState(const Ptr<TrackerTargetState> lastTargetState);
|
|
||||||
+void runStateEstimator();
|
|
||||||
|
|
||||||
+const vector<ConfidenceMap>& getConfidenceMaps();
|
|
||||||
+const ConfidenceMap& getLastConfidenceMap();
|
|
||||||
}
|
|
||||||
class TrackerTargetState <<virtual>>{
|
|
||||||
Point2f targetPosition;
|
|
||||||
---
|
|
||||||
Point2f getTargetPosition();
|
|
||||||
void setTargetPosition(Point2f position);
|
|
||||||
}
|
|
||||||
class TrackerTargetState
|
|
||||||
note bottom: Each tracker can create own state
|
|
||||||
|
|
||||||
class TrackerStateEstimator <<virtual>>{
|
|
||||||
~TrackerStateEstimator();
|
|
||||||
static Ptr<TrackerStateEstimator> create(const String& trackeStateEstimatorType);
|
|
||||||
Ptr<TrackerTargetState> estimate(const vector<ConfidenceMap>& confidenceMaps)
|
|
||||||
void update(vector<ConfidenceMap>& confidenceMaps)
|
|
||||||
}
|
|
||||||
|
|
||||||
class TrackerStateEstimatorSVM{
|
|
||||||
TrackerStateEstimatorSVM()
|
|
||||||
~TrackerStateEstimatorSVM()
|
|
||||||
Ptr<TrackerTargetState> estimate(const vector<ConfidenceMap>& confidenceMaps)
|
|
||||||
void update(vector<ConfidenceMap>& confidenceMaps)
|
|
||||||
}
|
|
||||||
class TrackerStateEstimatorMILBoosting{
|
|
||||||
TrackerStateEstimatorMILBoosting()
|
|
||||||
~TrackerStateEstimatorMILBoosting()
|
|
||||||
Ptr<TrackerTargetState> estimate(const vector<ConfidenceMap>& confidenceMaps)
|
|
||||||
void update(vector<ConfidenceMap>& confidenceMaps)
|
|
||||||
}
|
|
||||||
|
|
||||||
TrackerModel -> TrackerStateEstimator: create
|
|
||||||
TrackerModel *-- TrackerTargetState
|
|
||||||
TrackerStateEstimator <|-- TrackerStateEstimatorMILBoosting
|
|
||||||
TrackerStateEstimator <|-- TrackerStateEstimatorSVM
|
|
||||||
}
|
|
||||||
@enduml
|
|
||||||
|
|
||||||
TrackerSampler diagram
|
|
||||||
======================
|
|
||||||
|
|
||||||
@startuml{tracking_uml_sampler.png}
|
|
||||||
package "TrackerSampler package" #DDDDDD {
|
|
||||||
|
|
||||||
class TrackerSampler{
|
|
||||||
-vector<pair<String, Ptr<TrackerSamplerAlgorithm> > > samplers
|
|
||||||
-vector<Mat> samples;
|
|
||||||
...
|
|
||||||
TrackerSampler();
|
|
||||||
~TrackerSampler();
|
|
||||||
+sampling(const Mat& image, Rect boundingBox);
|
|
||||||
+const vector<pair<String, Ptr<TrackerSamplerAlgorithm> > >& getSamplers();
|
|
||||||
+const vector<Mat>& getSamples();
|
|
||||||
+bool addTrackerSamplerAlgorithm(String trackerSamplerAlgorithmType);
|
|
||||||
+bool addTrackerSamplerAlgorithm(Ptr<TrackerSamplerAlgorithm>& sampler);
|
|
||||||
---
|
|
||||||
-void clearSamples();
|
|
||||||
}
|
|
||||||
|
|
||||||
class TrackerSamplerAlgorithm{
|
|
||||||
~TrackerSamplerAlgorithm();
|
|
||||||
+static Ptr<TrackerSamplerAlgorithm> create(const String& trackerSamplerType);
|
|
||||||
+bool sampling(const Mat& image, Rect boundingBox, vector<Mat>& sample);
|
|
||||||
}
|
|
||||||
note bottom: A tracker could sample the target\nor it could sample the target and the background
|
|
||||||
|
|
||||||
|
|
||||||
class TrackerSamplerCS{
|
|
||||||
TrackerSamplerCS();
|
|
||||||
~TrackerSamplerCS();
|
|
||||||
+bool sampling(const Mat& image, Rect boundingBox, vector<Mat>& sample);
|
|
||||||
}
|
|
||||||
class TrackerSamplerCSC{
|
|
||||||
TrackerSamplerCSC();
|
|
||||||
~TrackerSamplerCSC();
|
|
||||||
+bool sampling(const Mat& image, Rect boundingBox, vector<Mat>& sample);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@enduml
|
|
||||||
|
|
||||||
MultiTracker diagram
|
|
||||||
======================
|
|
||||||
|
|
||||||
@startuml{tracking_uml_multiple.png}
|
|
||||||
package "MultiTracker"
|
|
||||||
package "Tracker"
|
|
||||||
|
|
||||||
MultiTracker -> Tracker: create
|
|
||||||
|
|
||||||
note top of Tracker: Several classes can be generated.
|
|
||||||
@enduml
|
|
||||||
|
|
||||||
@startuml{multi_tracker_uml.png}
|
|
||||||
|
|
||||||
class MultiTracker{
|
|
||||||
MultiTracker(const String& trackerType = "" );
|
|
||||||
~MultiTracker();
|
|
||||||
+bool add( const Mat& image, const Rect2d& boundingBox );
|
|
||||||
+bool add( const String& trackerType, const Mat& image, const Rect2d& boundingBox );
|
|
||||||
+bool add(const String& trackerType, const Mat& image, std::vector<Rect2d> boundingBox);
|
|
||||||
+bool add(const Mat& image, std::vector<Rect2d> boundingBox);
|
|
||||||
+bool update( const Mat& image, std::vector<Rect2d> & boundingBox );
|
|
||||||
+std::vector<Rect2d> objects;
|
|
||||||
---
|
|
||||||
#std::vector< Ptr<Tracker> > trackerList;
|
|
||||||
#String defaultAlgorithm;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@enduml
|
|
@@ -69,14 +69,9 @@ the TrackerModel is the statistical model.
|
|||||||
|
|
||||||
A recent benchmark between these algorithms can be found in @cite OOT
|
A recent benchmark between these algorithms can be found in @cite OOT
|
||||||
|
|
||||||
UML design: see @ref tracking_diagrams
|
|
||||||
|
|
||||||
To see how API works, try tracker demo:
|
To see how API works, try tracker demo:
|
||||||
<https://github.com/lenlen/opencv/blob/tracking_api/samples/cpp/tracker.cpp>
|
<https://github.com/lenlen/opencv/blob/tracking_api/samples/cpp/tracker.cpp>
|
||||||
|
|
||||||
@note This Tracking API has been designed with PlantUML. If you modify this API please change UML
|
|
||||||
in <em>modules/tracking/doc/tracking_diagrams.markdown</em>. The following reference was used in the API
|
|
||||||
|
|
||||||
Creating Own Tracker
|
Creating Own Tracker
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user