Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv_contrib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv_contrib
Commits
a5e3b5e8
Commit
a5e3b5e8
authored
Nov 11, 2016
by
Vadim Pisarevsky
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #850 from alalek:plantuml
parents
4f6e5767
214843df
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
0 additions
and
261 deletions
+0
-261
diagrams.markdown
modules/tracking/doc/diagrams.markdown
+0
-256
tracking.hpp
modules/tracking/include/opencv2/tracking.hpp
+0
-5
No files found.
modules/tracking/doc/diagrams.markdown
deleted
100644 → 0
View file @
4f6e5767
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
\n
A 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
\n
or 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
modules/tracking/include/opencv2/tracking.hpp
View file @
a5e3b5e8
...
...
@@ -69,14 +69,9 @@ the TrackerModel is the statistical model.
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:
<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
--------------------
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment