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