-
Notifications
You must be signed in to change notification settings - Fork 0
/
tracker.h
135 lines (105 loc) · 3.68 KB
/
tracker.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef TRACKER_H
#define TRACKER_H
#include <QObject>
#include <QPoint>
#include <QList>
#include <QRect>
#include <opencv2/contrib/contrib.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "violajonesclassifier.h"
class Tracker : public QObject
{
Q_OBJECT
public:
explicit Tracker(QObject *parent = 0);
enum TrackingAlgorithm {
Condensation // default
};
enum ClusteringAlgorithm {
SpectralClustering, // default
KMeansClustering,
ARALClustering
};
struct Particle {
QPointF pos;
float weight;
};
struct Trajectory {
QList<QPointF> points;
QColor color;
int label;
};
public:
void setFrameSize(int width, int height);
void setInitialState(double x, double y, int width, int height);
void propagate(ViolaJonesClassifier::VJDetection obs);
QList<Particle> getParticles();
QList<Particle> getDetections();
QList<STCluster> getSTClusters();
QList<STLine> getAllLineSegments();
QList<STPoint> getAllSTPoints();
QList<STPoint> getFilteredSTPoints();
QList<STCone> getSTCones();
QList<STPoint> getManualLabelings();
QList< QList<QColor> > getColorLabels();
QList<Trajectory> getTrajectories();
cv::Mat getDetectionConfidenceMap();
int getEstimatedTargetAmount();
QList<int> getCountingResult();
bool isLost();
bool isInit();
public slots:
void addManualLabeling(float x, float y, int frameNo);
private:
bool initialise();
QPointF generateRandomPosition();
bool insideFrame(QPointF sample);
void runClusteringModelSelection(int startFrame, int endFrame);
QList<STPoint> runSpaceTimeConeFiltering(int startFrame, int endFrame); // This one maybe replace runClusterOutlierRemoval() in the future
void runClusterOutlierRemoval();
void runClusterEigenLineCalculation();
void runTrajectoryCounting();
// spatio-temporal get data points between frame "startFrame" and "endFrame"
std::vector<cv::Point3f> st_getPoints(int startFrame, int endFrame);
int clusterDetections_HoughTransform(int startFrame, int endFrame);
double calculateMDL(int k, cv::Mat points, cv::Mat labels); // calculate Minimum Description Length
int getTotalDetectionCount();
// Condensation Algorithm
bool condensation_init();
void condensation_init_defaults();
void condensation_set_up_prior_conditions();
void condensation_obtain_observations(ViolaJonesClassifier::VJDetection obs);
void condensation_predict_new_bases();
int condensation_pick_base_sample();
void condensation_predict_sample_position(int new_sample, int old_sample);
void condensation_calculate_base_weights();
void condensation_update_after_iterating();
double condensation_evaluate_observation_density(QPointF samplePoint);
QPointF condensation_cal_estimated_pos();
void condensation_shut_down();
private:
bool m_initialized;
int m_frameWidth;
int m_frameHeight;
double m_initX; // start x position
double m_initY; // start y position
int m_initWidth;
int m_initHeight;
bool m_isLost;
cv::Mat m_distanceMap;
cv::Mat m_confidenceMap;
cv::Mat m_labels;
QHash<int, double> m_confidenceHash;
QList<ViolaJonesClassifier::VJDetection> m_spatioTemporalDetections;
QList<STCluster> m_clusters;
QList<STLine> m_lineSegments;
QList<Trajectory> m_trajectories;
QList<STPoint> m_manualLabelings;
QList<STPoint> m_filteredPoints;
QList<STCone> m_cones;
QList< QList<QColor> > m_colorLabels;
QList<int> m_sectionClusteringResult;
ClusteringAlgorithm m_clusteringAlgorithm;
int m_estimatedTargetAmount;
};
#endif // TRACKER_H