VAT  3.0
Video Analysis Tool
MobileObject2D.h
1 #ifndef __MOBILE_OBJECT_2D_H__
2 #define __MOBILE_OBJECT_2D_H__
3 
4 #include "blob.h"
5 #include "trajectory.h"
6 #include <iostream>
7 #include <map>
8 #include <deque>
9 #include <QImage>
10 
11 #define MOBILE2D_DEBUG_DATA
12 #define MOBILE2D_DETAILS
13 #define FOR_SPREADSHEET_MOBILE2D
14 #define SHOW_BLOB2D_BUFFER
15 
16 //Flag for controlling reliability effect
17 //#define __NO_RELIABILITY_CODE__
18 
20  //General
21  double prevCooling2D, sumCooling2D;
22 };
23 
25  //For 2D position
26  double XEstimated, sumRDX, sumRDVX;
27  double YEstimated, sumRDY, sumRDVY;
28  //For 2D Dimensions
29  double WEstimated, sumRDW, sumRDVW;
30  double HEstimated, sumRDH, sumRDVH;
31 };
32 
33 typedef struct IncrementalExtraGeneralData2D IncrementalExtraGeneralData2D;
34 typedef struct IncrementalExtra2DData IncrementalExtra2DData;
35 
37  double W, RW, RDW, RCW, SDW;
38  double H, RH, RDH, RCH, SDH;
39 
40  double VW, RDVW, RCVW, RVW, SDVW;
41  double VH, RDVH, RCVH, RVH, SDVH;
42 };
43 
44 typedef struct tracking2DimensionalData tracking2DimensionalData;
45 
47  double X, SDX, RX, RDX, RCX; //X 2D coordinate of object position,desviacion,confiavilidad. confialidad espacial,confiavilidad
48  double Y, SDY, RY, RDY, RCY; //Y 2D coordinate of object position
49 
50  double VX, SDVX, RVX, RDVX, RCVX; //Velocity vector component in 2D X coordinates
51  double VY, SDVY, RVY, RDVY, RCVY; //Velocity vector component in 2D Y coordinates
52 
53  double V2D; //2D Velocity Magnitude
54  double RV2D; //Reliability of 2D Velocity
55  double SDV2D; //Standard deviation of 2D velocity magnitude
56  double RDV2D; //Reliability of velocity according to positions reliability
57  double RCV2D; //Reliability of velocity according to coherence
58  double theta2D, SDtheta2D; //Velocity Angle w/r to the XY 2D plane.
59 };
60 
61 typedef struct tracking2DSpatialData tracking2DSpatialData;
62 
63 class MobileObject2D;
64 
65 typedef QSharedPointer<MobileObject2D> SpMobileObject2D;
66 
68  bool operator()(SpMobileObject2D mobile1, SpMobileObject2D mobile2);
69 };
70 
72  bool operator()(SpMobileObject2D mobile1, SpMobileObject2D mobile2);
73 };
74 
76 
77  public:
78  static double ONE_OVER_SQRT_2_TIMES_PI;
79 
80  static QImage *m_pSegmentation;
81 
82  static int m_currentTrackingBlobsNumber;
83  static double m_lambda; //Cooling parameter
84  static int m_blobsBufferSize;
85  static int m_trajectoryMaxSize;
86  static bool m_firstFrame;
87  static double m_SpatialCoherenceReliabilityThreshold;
88  static double m_SpatialCoherenceProbabilityThreshold;
89  static double m_DimensionalCoherenceReliabilityThreshold;
90  static double m_DimensionalCoherenceProbabilityThreshold;
91  static double m_MinimalHistoryProbability;
92 
93  //Used to find the best type and to update buffer information
94  static double *secDiffSequence;
95  static double *secDiffToCurrent;
96  static double *coolingValue;
97 
98  static double m_probabilityToEnsureMode;
99 
100  static double *g_secDiffSequence;
101  static double *g_coolingValue;
102  static double *g_secDiffToCurrent;
103  static tracking2DimensionalData *g_t2DDimData;
104  static tracking2DSpatialData *g_t2DSpatialData;
105  static IncrementalExtraGeneralData2D *g_iGData;
106  static IncrementalExtra2DData *g_i2DData;
107  static Rectangle<int> *g_newBBoxesToAnalyze;
108  static double *g_newVisualSupport;
109  static DetectionProblemType *g_newDPFlags;
110  static int g_currentBufferSize;
111  static double zeroTolerance;
112  static double m_minimalTolerance;
113  static int m_pixelAcuity;
114  static double m_max2DSpeed;
115  static double m_reliableObjectLength;
116 
117  public:
118  unsigned long mobile_id;
119  unsigned long rmobile_id;
120  ObjectType best_type;
121  ObjectSubtype best_subtype;
122 
123  //Global Probability Measure
124  double P;
125 
126  public:
127  bool ensureMode; //Flag for indicating when a mobile object becomes "sure" in terms of type.
128  //Important flag for performing coherence validation just for one class type,
129  //optimizing computational cost.
130  // bool estimativeResult; //Marks if estimated are based in a priori information
131 
132  bool productionMode; //Flag for indicating to certain functions to not to add trajectory points
133  //because several alternatives are being tested (if false, it means "Test Mode").
134  int numberOfFramesNotSeen, numberOfFramesSinceFirstTimeSeen, numberOfFound;
135  int previousBufferSize;
136  int currentBufferSize;
137  Rectangle<int> *bboxesToAnalyze;
138  double *visualSupport;
139  DetectionProblemType *dpFlags;
140  DetectionProblemType currentVisualState;
141 
142  bool *foundSupport;
143  int debug_data_flag;
144  double RFoundSolutions, RVFoundSolutions;
145  //Global Probabilities
146  double P2D, R2D; //2D Dimensional Coherence Probability and Reliability
147  double PV2DC, RV2DC; //Velocity Coherence Probability and Reliability
148 
149  //Encapsulated tracking data
150  tracking2DimensionalData t2DDimData;
151  tracking2DSpatialData t2DSpatialData;
152  //Data for incremental values update
153  IncrementalExtraGeneralData2D iGData;
154  IncrementalExtra2DData i2DData;
155 
156  //History of previously seen blobs
157  blobBuffer blobHistory;
158 
159  //History of previously seen blobs
160  Trajectory trajectory2D;
161 
162  //Variables used by Reliability Tracker
163  bool *usedBlobs;
164  int numUsed;
165  int usedLength;
166  bool *involvedBlobs;
167  int numInvolved;
168  bool accepted_solution;
169  bool comparedMobile;
170  bool toErase;
171 
172  //Currently merged blobs for this object
173  std::deque<int> currentlyMergedBlobs;
174 
175  MobileObject2D();
176  MobileObject2D(SpMobileObject2D);
177  ~MobileObject2D();
178 
179  //Init functions
180  void initUsedBlobs();
181  void initInvolvedBlobs();
182  void initMaps();
183  //Inserting Functions
184  void insertNewBlob(Blob *blob);
185  void insertNewBlob(Blob *blob, int lastMilliSecondsDifference);
186 
187  //Setting Functions
188  void setMobileId(unsigned long i_id);
189  void setRMobileId(unsigned long i_id);
190  void setNewMobileFromBlob(Blob *blob, unsigned long mobile_id, unsigned long rmobile_id);
191  void setNumberOfFramesNotSeen(int num);
192  void incrementNumberOfFramesNotSeen();
193  void incrementNumberOfFramesSinceFirstTimeSeen();
194  void setGlobalProbability();
195  Blob *determineMostLikelyBlob();
196  //Getting Functions
197  unsigned long getMobileId();
198  unsigned long getRMobileId();
199  int getNumberOfFramesNotSeen();
200  int getNumberOfFramesSinceFirstTimeSeen();
201  double getGlobalProbability();
202 
203  void getMobileTolerances(double&, double&);
204 
205  //Auxiliar fuctions
206  static double coolingFunction(double x);
207  static double NormalizeOrientation(double);
208  static double minimalAngularDistance(double alpha1, double alpha2);
209  static double NormalizeVelocityAngle(double);
210 
211  void updateMobilePath(Blob *blob);
212  void updateMobileData();
213  double DimensionalCoherenceReliability(double sigma_dim, double min, double max);
214 
215  //Rendering Functions
216  friend std::ostream& operator<<(std::ostream&, SpMobileObject2D);
217 
218  double dimensional2DReliability(double blobW, double blobH);
219  double position2DReliability(double distance2D);
220 
221  double get2DDistanceToFocalPoint(Blob *blob);
222  double get2DDistanceToFocalPoint(Rectangle<int> *rectangle);
223  double get2DDistanceToFocalPoint(double X, double Y);
224  bool mobile2DCoherenceIsAcceptable();
225  bool mobile2DVelocityCoherenceIsAcceptable();
226 
227  void incorporateNewInformation();
228 
229 
230  //Incremental Implementation for Updating Mobile Information
231  void incrementalUpdateCooling(int bufferSize);
232  void incrementalUpdateOrientation(int bufferSize, Shape3DData **data, DetectionProblemType *dpFlags, double *visualSupport);
233  void incrementalUpdate2DPosition(int bufferSize, Rectangle<int> *bboxesToAnalyze, DetectionProblemType *dpFlags, double *visualSupport, double maxDistanceFactor);
234  void incrementalUpdate2DDimensions(int bufferSize, Rectangle<int> *bboxesToAnalyze, DetectionProblemType *dpFlags, double *visualSupport, double maxDistanceFactor);
235 
236  void getCurrentBoundingBoxForMobile(Rectangle<int> *bbox);
237  void getCurrentBoundingBoxForMobileKeepingSize(Rectangle<int> *bbox);
238 
239  void improveBBoxSupport(Rectangle<int> *improvedBBox, Rectangle<int> *estimatedBBox, Rectangle<int> *visualEvidence);
240 
241  bool mobileOutOfScene(); //ACA!!! MIRAR QUE HACE
242  void generateFirstClassifiedSequence();
243  void generateMostCoherentSequence(std::deque<SpBlob>::iterator first_blob_it, int newBufferSize, int frame_index);
244 
245  double probabilisticCoherenceReliability(double data, double mean, double sigma, double acuity);
246  double normalisedSigmaCoherenceReliability(double sigma, double acuity);
247 
248  void setSpecialBBoxToAnalyze(Rectangle<int> *bboxResult, Rectangle<int> *realBBox, double visualSupport);
249 
250  void setInitialNormalList(Blob *current_blob);
251 
252  };
253 
254 
256 
257 #endif
Definition: MobileObject2D.h:71
Definition: MobileObject2D.h:67
Definition: blob.h:364
Definition: MobileObject2D.h:19
Definition: MobileObject2D.h:36
Definition: MobileObject2D.h:24
Definition: blob.h:34
Definition: MobileObject2D.h:75
Definition: MobileObject2D.h:46
Definition: blob.h:79
Definition: trajectory.h:20
Definition: BackgroundRecLigth.h:20