VAT  3.0
Video Analysis Tool
ReliabilityMerge.h
1 #ifndef __C_RELIABILITY_MERGE_H__
2 #define __C_RELIABILITY_MERGE_H__
3 
4 #include "Datapool.h"
5 #include "ReliabilityClassification.h"
6 #include "MODULES/segmentationmodule.h"
7 #include <iostream>
8 #include <limits.h>
9 #include "tree.hh"
10 
11 class mergeType {
12  public:
13  mergeType();
14  ~mergeType();
15  double score;
16  ObjectType type;
17 };
18 
19 class mergeData {
20  public:
21  mergeData();
22  ~mergeData();
23  bool overlaping;
24  std::map<ObjectType, double> mergeTypeMap;
25  Blob *mergedBlob;
26 };
27 
29  protected:
30  int blobIndex;
31  Blob *mergeResult;
32 
33  public:
34  bool *usableList;
35  bool *usedElements;
36  int level;
37  int *mergeSequence;
38  bool pathUnknown;
39 
40  MergedElement(int index, int i_level, Blob *mergedBlob, int blobsNumber);
41  ~MergedElement();
42 
43  Blob *getMergedBlob();
44  int getBlobIndex();
45  void initMergeData(bool **initialMergeMap, int *previousMergeSequence, int mergeableNumber, int *reallyMergeableBlobs, bool *forbiddenElements);
46 };
47 
48 class AlternativeElement;
49 
50 typedef QSharedPointer<AlternativeElement> SpAlternativeElement;
51 
52 typedef QSharedPointer<MergedElement> SMergedElement;
53 
55  public:
56  int blob_id;
57  Blob *mergedBlob;
58  bool classified;
59  std::map<int, SpAlternativeElement> mergedElements;
61  AlternativeElement(int i_blob_id);
63 };
64 
66  public:
67  enum mergeParameterSet {
68  MergeInTracking,
69  PreMergeInTracking
70  };
71 
72  bool initialized;
73 
74  //Parameters
75  double m_mergeThres;
76  double m_mergeDistMax;
77  double m_overlapingRatio;
78  classificationCriteria m_mergingCriteria;
79 
80  //... for premerge
81  bool m_eliminateOverlapedClassifiedBlobs;
82  double m_eliminateOverlapedClassifiedBlobsOverlapingRatio;
83  double m_eliminateOverlapedClassifiedBlobsProbability;
84  double m_eliminateOverlapedClassifiedBlobsReliability;
85 
86  //Variables
87  int *mergeList;
88  int elementsToMerge;
89  std::map<int, SpAlternativeElement> definedMerges;
90  int shortestMergePath;
91  int *shortestSequence;
92  Blob *shortestSequenceMerge;
93 
94  std::map<ObjectType, SpModelInterface> m_mapModels;
95  std::map<Blob *, std::map<Blob *, mergeData> > m_mapCorrespondences;
96 
97  // bool m_reducedUnknownBlobsMerge;
98  Blob *m_mergeBlob;
99  Datapool *m_data;
100  SceneModel *m_context;
101  QImage *m_segmentation;
102  Blob *m_lastMergedBlob;
104 
106  ReliabilityMerge(Datapool *i_data);
107  ~ReliabilityMerge();
108 
109  bool prepareRun();
110  bool init();
111 
112  bool setParameters(QDomNode& config);
113  bool setParameters(QDomNode& config, mergeParameterSet i_mergeParameterSet);
114 
115  bool defaultParameters(mergeParameterSet i_mergeParameterSet);
116 
117  bool canBeMerged(Blob *i_blob1, Blob *i_blob2, mergeType *o_mergeType);
118  bool getNextCorrespondence(Blob **i_pBlob1, Blob **i_pBlob2);
119  bool isAValidCorrespondence(Blob *i_blob1, Blob *i_blob2);
120 
121  bool blobOnTopAndNotOnAOIGround(Blob *i_blob1, Blob *i_blob2);
122  bool distanceCriteria(Blob *i_blob1, Blob *i_blob2);
123  double widthIntersectionRatio(Blob *i_blob1, Blob *i_blob2);
124  double heightIntersectionRatio(Blob *i_blob1, Blob *i_blob2);
125 
126  void addModel(ObjectType i_blobType, SpModelInterface i_spModel);
127  void preMerge(bool **initialMergeMap, std::vector<Blob>& blobsList);
128  Blob *getMergedBlob(int *mergeSequence, int sequenceLength, std::vector<Blob>& blobsVector, int blobsNumber, bool classify);
129 
130  void computeModelScoresForMerge(std::map<ObjectType, double>& mergeMap, Blob *i_blob1, Blob * i_blob2);
131  mergeType computeMergeScoreForType(Blob *i_blob1, Blob *i_blob2, ObjectType blobType);
132  void constructCorrespondenceTable();
133 
134  //Special Functions for CReliabilityTracker
135  void setInitialCorrespondences(bool **initialMergeMap, int blobsNumber, Blob **blobsVector);
136  bool setMergesForUsableBlobs(tree<SMergedElement> &mergeTree, tree<SMergedElement>::iterator iter, int level, int parent, bool **initialMergeMap,
137  int *reallyMergeableBlobs, int mergeableNumber, Blob **blobsVector, int blobsNumber);
138  int checkValidityOfSubtreesForSequence(int *sequence, int length, bool **initialMergeMap, int *reallyMergeableBlobs, int mergeableNumber, Blob **blobsVector, int blobsNumber);
139  bool subTreesValidator(tree<SMergedElement> &mergeSubTree, tree<SMergedElement>::iterator iter, int level, int parent, bool **initialMergeMap,
140  int *reallyMergeableBlobs, int mergeableNumber, Blob **blobsVector, int blobsNumber, bool *forbiddenElements);
141 
142  Blob *getMergedBlob(int *mergeSequence, int sequenceLength, Blob **blobsVector, int blobsNumber, bool classify);
143  void clearDefinedMerges();
144  void clearDefinedMergesFromStartingKey(int value);
145 
146  Blob *justMerge2D(int *mergeSequence, int sequenceLength, Blob **blobsVector);
147 
148  bool checkValidityOfPathsForSequence(int *sequence, int length, tree<SMergedElement> &mergeTree, Blob *mergedBlob, int mergeableNumber);
149  bool pathValidator(bool *sequenceElements, int length, int num_valid, tree<SMergedElement> &mergeTree, tree<SMergedElement>::iterator iter, Blob *mergedBlob, int mergeableNumber);
150 
151  void mergeBlobsInFirstOne(Blob *, Blob *);
152  Blob **reduceOverlapedBlobs(Blob **blobsVector, int &blobsNumber, std::vector<Blob>& blobsList);
153  int reduceOverlapedBlobsMarkingElimination(bool *eliminationVector, bool *blobWithMergeResult, Blob **blobsVector, int blobsNumber, bool *pertinentElements);
154 
155  void setGroup(int groupsVector[], bool **relations, int elementsNumber, int groupId, int startPoint, int referencePoint, int *elementsToAnalyzeVector);
156  int setGroups(int groupsVector[], bool **relations, int elementsNumber, int *elementsToAnalyzeVector);
157 
158  void orderAscending(int *array, int top, int bottom);
159  int getMiddle(int *array, int top, int bottom);
160 
161  void mergeBlobs(Blob *, Blob *);
162  void updateCorrespondenceTable(Blob *i_blob);
163  void removeCorrespondencesWithBlob(Blob *i_blob);
164  void removeCorrespondence(Blob *i_blob1, Blob *i_blob2);
165  void updateClassificationTable(Blob *i_blob1, Blob *i_blob2);
166  bool canBelongToBlob(Blob *blob1, Blob *blob2);
167 };
168 
169 
170 #endif
Definition: ReliabilityMerge.h:54
Definition: ReliabilityMerge.h:65
Definition: ReliabilityMerge.h:28
Definition: ReliabilityMerge.h:19
Definition: calibration.h:51
Definition: ReliabilityClassification.h:37
Definition: ReliabilityMerge.h:11
An object of this class is instantiated at main code, and this object is used by every class to push ...
Definition: Datapool.h:39
Definition: tree.hh:51
Depth-first iterator, first accessing the node, then its children.
Definition: tree.hh:106
Definition: blob.h:79