1 #ifndef RELIABILITYTRACKER2D_H 2 #define RELIABILITYTRACKER2D_H 6 #include "ReliabilityMerge2D.h" 7 #include "ReliableMobileObjectList2D.h" 10 #include "calibration.h" 11 #include "sharedTrackingClasses2D.h" 19 QImage *m_pSegmentation;
21 std::deque<IdBlobPair2D> biggestBlobForNewMobile;
22 std::set<long int> usedIdsByAlternative;
23 std::map< long int, std::set<SpMobileObject2D, orderedByBestCoherenceOperator2D> > mobileAlternativesMap;
24 std::map< int, std::deque<long int> > mobileIdsUsingABlob;
36 std::map<long int, SpMobileObject2D> mobilesOutList;
38 bool parametersInitialised;
39 static int m_alternativeNumber;
40 static bool m_newOuts;
41 int lastMilliSecondsDifference;
44 bool activatePreMerge;
47 int m_maximumRetainedAlternativeSolutions;
48 int m_maximumGeneratedAlternativesPerMobile;
49 int maximumAlternativeMobilePaths;
50 QString eliminationStrategy;
52 double SpatialCoherenceReliabilityThreshold;
53 double SpatialCoherenceProbabilityThreshold;
54 double alternativeSolutionsProbabilityThreshold;
56 double IgnoreByDimensionalCoherenceThreshold;
57 double IgnoreByVelocityCoherenceThreshold;
58 double ImportanceRateForBestMobileAlternativeProbability;
60 double m_mobile2DCoverageRateToConsiderEqual;
61 static double m_highVisualSupportThreshold;
62 double m_lowVisualSupportThreshold;
63 double m_blobCompletellySupportedThreshold;
65 bool m_internalOutputActivated;
66 bool m_reducedOutputActivated;
68 static int m_meanMillisecondsDifferenceBetweenFrames;
70 double m_acceptedPixelError;
73 bool speed_set, object_length;
76 int *g_intersectionAreas;
80 int *involvedRMobilesCounter;
81 bool **initialMergeMap;
84 bool initialPreparation;
86 bool *checkedMobilePairValidity, *validMobilePair;
90 unsigned long mobile_id_counter;
91 unsigned long rmobile_id_counter;
92 int currentFrameNumber;
93 unsigned long currentTimeMilliSeconds;
97 int g_inserted_for_alternative, g_NumCurrentlyLost;
98 SpRMAlternativeSolution2D g_baseAlternative;
100 std::set<SpRMAlternativeSolution2D, alternatives2DOrderedByBestProbabilityOperator> g_newAlternatives;
101 std::set<SpRMAlternativeSolution2D, alternatives2DOrderedByBestProbabilityOperator> g_completeAlternatives;
102 std::set<SpMobileObject2D, orderedByBestCoherenceOperator2D> g_newMobiles;
103 std::set<SpMobileObject2D, orderedByBestCoherenceOperator2D> g_newSpecialMobiles;
104 std::deque<Blob *> g_includedBlobsInNewMobiles;
105 std::deque<Blob *> g_allocatedBlobs;
106 double g_bestGlobalP;
107 int g_numberOfNewMobiles, g_NumLocallyAddedAlternatives, *g_numberOfNewMobileVersions, *g_mobileVersionIndex, g_totalNumberOfMobileVersions;
108 std::set<SpMobileObject2D, orderedByBestCoherenceOperator2D>::iterator *g_mobileIterators, *g_setBegins;
109 std::set<SpBestAlternativesNode2D, orderedByBestAlternativeProbabilityCooperationOperator2D> g_leaves;
111 std::map<long int, std::set<SpMobileObject2D, orderedByBestCoherenceOperator2D> > *g_newObjectsList;
112 bool *g_acceptable2DCoherenceForMobile;
113 double *g_variableContribution;
115 double *distanceBetweenBlobs;
120 bool setParameters(QDomNode& config);
121 static int getBetaDirection(
SceneModel *, QImage *);
129 int k,
double sum,
bool *mark,
double *piT);
137 bool initialPrepareRun();
141 void initStaticMobileObject();
150 void preMerge(std::vector<Blob>&);
152 void preSplit(std::vector<Blob>&);
156 void eliminateUnlikelyMobiles();
163 void run(std::vector<Blob>&);
165 void followExistingMobiles();
167 void setInvolvedBlobs();
169 void createMobilePossibilities();
171 void mergeInvolvedRMobiles();
173 void mergeReliableMobiles(SpReliableMobileObject2D firstRMobile, SpReliableMobileObject2D secondRMobile);
175 void determineInvolvedBlobsForMobile(SpMobileObject2D mobile);
177 void insertNewMobiles(SpRMAlternativeSolution2D asolution, SpReliableMobileObject2D rmobile);
179 void setBlobsVector(std::vector<Blob>&);
181 void freeBlobsVector();
183 void presetBlobsVectorAndInitialMergeTable(std::vector<Blob>&);
185 void freeBlobsVectorAndInitialMergeTable();
187 SpMobileObject2D setNotVisibleBlobMobile(SpMobileObject2D currentMobile, DetectionProblemType dp_type);
189 int setGroups(
int elementsVector[],
bool **relations,
int elementsNumber,
int *elementsToAnalyzeVector);
191 void setGroup(
int elementsVector[],
bool **relations,
int elementsNumber,
int groupId,
int startPoint,
int referencePoint,
int *elementsToAnalyzeVector);
193 void generateNewMobiles(
int blobNumberToAnalyze,
int *blobsToAnalyze,
int groupsNumber,
int *blobGroupVector);
195 void generateAlternativesForMobile(
int *blobsToMerge,
int blobsToMergeNumber);
197 void recursiveComboGenerator(
int position,
int value,
int *alternativesCombo,
int *blobsToMerge,
int blobsToMergeNumber);
199 bool validBlobMergeConfiguration(
int mergeGroupNumber,
int mergeLength,
int blobsToMergeNumber,
int *blobsToMerge,
int *alternativesCombo);
201 void processMergeVector(
int *alternativesCombo,
int *blobsToMerge,
int blobsToMergeNumber);
203 void checkConnectivity(
bool groupVector[],
int elementsNumber,
int referencePoint,
int *elementsToAnalyzeVector);
205 void insertNewMergeSolution(
Blob **mergedBlobs,
int finalBlobsNumber,
bool *usedBlobsMatrix);
207 SpMobileObject2D getNewMobileFromBlob(
Blob *blob);
209 void setCurrentTimeAndFrame();
211 void getMergeConnections(
bool *listToUpdate,
int startingBlobIndex);
213 void getRecursiveMergeConnections(
bool *mergeList,
int blobIndex);
215 Blob *generateMostLikelyAlternativeForMobile(SpMobileObject2D mobile);
218 void orderAscending(
int *array,
int top,
int bottom);
219 int getMiddle(
int *array,
int top,
int bottom);
221 SpMobileObject2D setNotVisibleBlobMobile(DetectionProblemType dp_type, SpMobileObject2D currentObject);
223 void filterUnseenMobiles();
225 void filterRepeatedAlternatives(SpReliableMobileObject2D rmobile);
227 void separateReliableSolutions();
229 double getMaxFocalDistanceToImageCorner();
231 double getObjectSizeForMaxReliability(
double w,
double l,
double h);
233 double getObjectDistanceForMaxReliability();
235 void getNearest2DBlobPointToFocalPoint(
Blob *blob,
double *x,
double *y);
236 void getNearest2DBlobPointToFocalPoint(
int position,
double xCenter,
double yCenter,
double W,
double H,
double *x,
double *y);
237 void getNearest2DBlobPointToFocalPoint(
int position,
Rectangle<int> *rect,
double *x,
double *y);
239 void getHighest3DVariations(
double x,
double y,
double X,
double Y,
double dX,
double dY,
double *dx,
double *dy);
241 void determineInvolvedBlobsForMobileObject(SpMobileObject2D mobile);
243 bool combinationAlreadyIncluded(
Blob **blobsForAlternative,
int blobsNumberForAlternative);
245 int getMobileId(
Blob *blob);
247 bool notUsedId(
long int id);
249 void insertInMobileAlternativesMap(SpMobileObject2D mobile,
long int id);
251 bool incoherentMobile(SpMobileObject2D mobile);
253 void generateAlternativesForMobilePath(
int length,
int position,
int value,
int *alternativesCombo,
254 int blobsToMergeNumber,
int *blobsToMerge, SpMobileObject2D mobile);
256 void generateMobilePath(SpMobileObject2D mobile);
258 bool mobilesCombinationIsValid();
261 bool mobilePairValidityChecked(
int index1,
int index2);
263 bool mobilePairIsValid(
int index1,
int index2);
265 bool checkMobilePairValidity(SpMobileObject2D m1,
int mindex1,
int vindex1, SpMobileObject2D m2,
int mindex2,
int vindex2);
267 bool checkMobilePairValidity(SpMobileObject2D m1,
int mindex1,
int vindex1, SpMobileObject2D m2,
int mindex2,
int vindex2,
bool firstVerifiable);
269 bool checkMobilePairValidity(SpMobileObject2D m1, SpMobileObject2D m2);
271 bool checkMobilePairValidity(SpMobileObject2D m1, SpMobileObject2D m2,
bool firstVerifiable);
273 bool setPairValidityAndGo(
int index1,
int index2,
bool ret_value);
275 void initValidityMatrices(
int size);
277 bool alternativeWith3DInformation(SpRMAlternativeSolution2D alternative);
279 bool blobAlreadyIncludedInNewMobilesSet(
Blob *blob);
281 void generateAlternativesWithBestSolutionsTree();
283 void generateNewLeavesFromCurrentBests();
285 void buildNewAlternativesFromLeaves(SpRMAlternativeSolution2D currentAlternative);
287 double getTentativeAlternativeProbabilityValue(std::set<SpMobileObject2D, orderedByBestCoherenceOperator>::iterator *mobileIterators);
289 SpRMAlternativeSolution2D getAlternativeFromNodeIfValid(SpBestAlternativesNode2D node);
291 bool equalMobiles(SpRMAlternativeSolution2D alt1, SpRMAlternativeSolution2D alt2);
293 bool sameUsed(SpMobileObject2D m1, SpMobileObject2D m2);
295 void filterEquallyConvergedMobiles();
297 bool highCoverage(SpMobileObject2D m1, SpMobileObject2D m2);
299 void filterRepeatedAlternatives();
301 bool acceptableInformationForNewMobile(SpMobileObject2D newMobile, SpMobileObject2D oldMobile);
303 SpMobileObject2D setSpecialCaseMobile(DetectionProblemType dp_type, SpMobileObject2D currentObject,
Blob *blobToAdd);
305 SpMobileObject2D generateAndValidateNewMobile(SpMobileObject2D currentMobile,
Blob *blobToTest);
307 void generateBestPossiblePathsForMobiles(SpRMAlternativeSolution2D alternative);
309 void generateMobilePathFromInitialBlob(SpMobileObject2D mobile,
Blob *initialBlob,
int numUsed,
bool *usedBlobs,
double *blobSupport,
Rectangle<int> *mobileBBox);
311 void generateAlternativesForMobilePathFromInitialBlob(
int length,
int position,
int value,
int *alternativesCombo,
int blobsToMergeNumber,
int *blobsToMerge,
312 SpMobileObject2D mobile,
Blob *initialBlob,
int numUsed,
bool *usedBlobs,
Rectangle<int> *mobileBBox);
314 bool equal2DDimensions(SpMobileObject2D m1, SpMobileObject2D m2);
316 bool blobCanBeIncludedForMerge(
int currentMergeLength,
int *mergedBlobIndexes,
int currentBlobIndex);
318 void cleanByEnsureUsedBlobs(SpRMAlternativeSolution2D newAlternative);
320 SpMobileObject2D checkSpecialCases(SpMobileObject2D currentMobile,
Blob *blobToTest);
324 typedef QSharedPointer<ReliabilityTracker2D> SpReliabilityTracker2D;
327 #endif // RELIABILITYTRACKER2D_H void getMostLikelyMobileObjects(std::deque< SpMobileObject2D > &mobileObjectsOutput)
clears the current mobiles list and gives the processed list of most likely mobiles ...
Definition: ReliabilityTracker2D.cpp:30
void computeInclusiveProbabilities(std::set< SpRMAlternativeSolution2D, alternatives2DOrderedByBestProbabilityOperator > *alternativeSolutions, int k, double sum, bool *mark, double *piT)
compute inclusive probabilities for a random linear elimination strategy
Definition: ReliabilityTracker2D.cpp:2602
Definition: ReliabilityTracker2D.h:13
Definition: ReliabilityMerge2D.h:11
ReliableMobileObjectList2D rMobilesList
pointer to the tracking results
Definition: ReliabilityTracker2D.h:30
Definition: calibration.h:51
Definition: RMAlternativeSolution2D.h:16
Definition: TimeStamp.h:4
An object of this class is instantiated at main code, and this object is used by every class to push ...
Definition: Datapool.h:39
void run(std::vector< Blob > &)
reliability tracker process main call
Definition: ReliabilityTracker2D.cpp:2622
Definition: ReliableMobileObjectList2D.h:11