1 #ifndef RELIABILITYTRACKER_H 2 #define RELIABILITYTRACKER_H 6 #include "ReliabilityMerge.h" 7 #include "ReliableMobileObjectList.h" 10 #include "calibration.h" 11 #include "sharedTrackingClasses.h" 22 QImage *m_pSegmentation;
23 bool activatePreMerge;
24 double maxObjectSpeed;
25 std::map<ObjectType, SpModelInterface> *objectModels;
28 double meanw, meanl, meanh;
39 int m_maximumRetainedAlternativeSolutions;
45 int maximumAlternativeMobilePaths;
52 int m_maximumGeneratedAlternativesPerMobile;
59 QString eliminationStrategy;
65 std::deque<IdBlobPair> biggestBlobForNewMobile;
66 std::set<long int> usedIdsByAlternative;
67 std::map< long int, std::set<SpMobileObject, orderedByBestCoherenceOperator> > mobileAlternativesMap;
68 std::map< int, std::deque<long int> > mobileIdsUsingABlob;
80 std::map<long int, SpMobileObject> mobilesOutList;
82 bool parametersInitialised;
83 static int m_alternativeNumber;
84 static bool m_newOuts;
85 static int acceptedPixelError;
86 static double accepted3DFeatureError;
87 static double acceptedOrientationError;
88 static double m_highVisualSupportThreshold;
89 static int m_meanMillisecondsDifferenceBetweenFrames;
90 int lastMilliSecondsDifference;
93 double SpatialCoherenceReliabilityThreshold;
94 double SpatialCoherenceProbabilityThreshold;
96 double IgnoreByDimensionalCoherenceThreshold;
97 double IgnoreByVelocityCoherenceThreshold;
99 double ImportanceRateForBestMobileAlternativeProbability;
101 bool m_internalOutputActivated;
102 bool m_reducedOutputActivated;
104 double m_maximal3DBaseOverlapping;
105 double m_mobile2DCoverageRateToConsiderEqual;
107 double m_lowVisualSupportThreshold;
108 double m_blobCompletellySupportedThreshold;
110 int *g_intersectionAreas;
114 int *involvedRMobilesCounter;
115 bool **initialMergeMap;
118 bool initialPreparation;
120 bool *checkedMobilePairValidity, *validMobilePair;
124 unsigned long mobile_id_counter;
125 unsigned long rmobile_id_counter;
126 int currentFrameNumber;
127 unsigned long currentTimeMilliSeconds;
131 int g_inserted_for_alternative, g_NumCurrentlyLost;
132 SpRMAlternativeSolution g_baseAlternative;
134 std::set<SpRMAlternativeSolution, alternativesOrderedByBestProbabilityOperator> g_newAlternatives;
135 std::set<SpRMAlternativeSolution, alternativesOrderedByBestProbabilityOperator> g_completeAlternatives;
136 std::set<SpMobileObject, orderedByBestCoherenceOperator> g_newMobiles;
137 std::set<SpMobileObject, orderedByBestCoherenceOperator> g_newSpecialMobiles;
138 std::deque<Blob *> g_includedBlobsInNewMobiles;
139 std::deque<Blob *> g_allocatedBlobs;
140 double g_bestGlobalP;
141 int g_numberOfNewMobiles, g_NumLocallyAddedAlternatives, *g_numberOfNewMobileVersions, *g_mobileVersionIndex, g_totalNumberOfMobileVersions;
142 std::set<SpMobileObject, orderedByBestCoherenceOperator>::iterator *g_mobileIterators, *g_setBegins;
143 std::set<SpBestAlternativesNode, orderedByBestAlternativeProbabilityCooperationOperator> g_leaves;
145 std::map<long int, std::set<SpMobileObject, orderedByBestCoherenceOperator> > *g_newObjectsList;
146 bool *g_acceptable3DCoherenceForMobile;
147 double *g_variableContribution;
149 double *distanceBetweenBlobs;
154 bool setParameters(QDomNode& config);
155 static int getBetaDirection(
SceneModel *, QImage *);
159 int k,
double sum,
bool *mark,
double *piT);
167 bool initialPrepareRun();
171 void initStaticMobileObject();
180 void preMerge(std::vector<Blob>&);
182 void preSplit(std::vector<Blob>&);
186 void eliminateUnlikelyMobiles();
193 void run(std::vector<Blob>&);
195 void followExistingMobiles();
197 void setInvolvedBlobs();
199 void createMobilePossibilities();
201 void mergeInvolvedRMobiles();
203 void mergeReliableMobiles(SpReliableMobileObject firstRMobile, SpReliableMobileObject secondRMobile);
205 void determineInvolvedBlobsForMobile(SpMobileObject mobile);
207 void insertNewMobiles(SpRMAlternativeSolution asolution, SpReliableMobileObject rmobile);
209 void setBlobsVector(std::vector<Blob>&);
211 void freeBlobsVector();
213 void presetBlobsVectorAndInitialMergeTable(std::vector<Blob>&);
215 void freeBlobsVectorAndInitialMergeTable();
217 SpMobileObject setNotVisibleBlobMobile(SpMobileObject currentMobile, DetectionProblemType dp_type);
219 int setGroups(
int elementsVector[],
bool **relations,
int elementsNumber,
int *elementsToAnalyzeVector);
221 void setGroup(
int elementsVector[],
bool **relations,
int elementsNumber,
int groupId,
int startPoint,
int referencePoint,
int *elementsToAnalyzeVector);
223 void generateNewMobiles(
int blobNumberToAnalyze,
int *blobsToAnalyze,
int groupsNumber,
int *blobGroupVector);
225 void generateAlternativesForMobile(
int *blobsToMerge,
int blobsToMergeNumber);
227 void recursiveComboGenerator(
int position,
int value,
int *alternativesCombo,
int *blobsToMerge,
int blobsToMergeNumber);
229 bool validBlobMergeConfiguration(
int mergeGroupNumber,
int mergeLength,
int blobsToMergeNumber,
int *blobsToMerge,
int *alternativesCombo);
231 void processMergeVector(
int *alternativesCombo,
int *blobsToMerge,
int blobsToMergeNumber);
233 void checkConnectivity(
bool groupVector[],
int elementsNumber,
int referencePoint,
int *elementsToAnalyzeVector);
235 void insertNewMergeSolution(
Blob **mergedBlobs,
int finalBlobsNumber,
bool *usedBlobsMatrix);
237 SpMobileObject getNewMobileFromBlob(
Blob *blob);
239 void setCurrentTimeAndFrame();
241 void getMergeConnections(
bool *listToUpdate,
int startingBlobIndex);
243 void getRecursiveMergeConnections(
bool *mergeList,
int blobIndex);
245 Blob *generateMostLikelyAlternativeForMobile(SpMobileObject mobile);
248 void orderAscending(
int *array,
int top,
int bottom);
249 int getMiddle(
int *array,
int top,
int bottom);
251 SpMobileObject setNotVisibleBlobMobile(DetectionProblemType dp_type, SpMobileObject currentObject);
253 void filterUnseenMobiles();
255 void filterRepeatedAlternatives(SpReliableMobileObject rmobile);
257 void separateReliableSolutions();
259 double getMaxFocalDistanceToImageCorner();
261 double getObjectSizeForMaxReliability(
double w,
double l,
double h);
263 double getObjectDistanceForMaxReliability();
265 void getNearest2DBlobPointToFocalPoint(
Blob *blob,
double *x,
double *y);
266 void getNearest2DBlobPointToFocalPoint(
int position,
double xCenter,
double yCenter,
double W,
double H,
double *x,
double *y);
267 void getNearest2DBlobPointToFocalPoint(
int position,
Rectangle<int> *rect,
double *x,
double *y);
269 void getHighest3DVariations(
double x,
double y,
double X,
double Y,
double dX,
double dY,
double *dx,
double *dy);
271 void determineInvolvedBlobsForMobileObject(SpMobileObject mobile);
273 bool combinationAlreadyIncluded(
Blob **blobsForAlternative,
int blobsNumberForAlternative);
275 int getMobileId(
Blob *blob);
277 bool notUsedId(
long int id);
279 void insertInMobileAlternativesMap(SpMobileObject mobile,
long int id);
281 bool incoherentMobile(SpMobileObject mobile);
283 void generateAlternativesForMobilePath(
int length,
int position,
int value,
int *alternativesCombo,
284 int blobsToMergeNumber,
int *blobsToMerge, SpMobileObject mobile);
286 void generateMobilePath(SpMobileObject mobile);
288 bool mobilesCombinationIsValid();
290 double areaOfIntersection(SpMobileObject m1, SpMobileObject m2);
292 double areaOfIntersectionFirstNo3D(SpMobileObject m1, SpMobileObject m2,
double *areaOfNo3D);
294 int getPairIndex(
int mindex,
int vindex);
296 bool mobilePairValidityChecked(
int index1,
int index2);
298 bool mobilePairIsValid(
int index1,
int index2);
300 bool checkMobilePairValidity(SpMobileObject m1,
int mindex1,
int vindex1, SpMobileObject m2,
int mindex2,
int vindex2);
302 bool checkMobilePairValidity(SpMobileObject m1,
int mindex1,
int vindex1, SpMobileObject m2,
int mindex2,
int vindex2,
bool firstVerifiable);
304 bool checkMobilePairValidity(SpMobileObject m1, SpMobileObject m2);
306 bool checkMobilePairValidity(SpMobileObject m1, SpMobileObject m2,
bool firstVerifiable);
308 bool setPairValidityAndGo(
int index1,
int index2,
bool ret_value);
310 void initValidityMatrices(
int size);
312 bool alternativeWith3DInformation(SpRMAlternativeSolution alternative);
314 bool blobAlreadyIncludedInNewMobilesSet(
Blob *blob);
316 void generateAlternativesWithBestSolutionsTree();
318 void generateNewLeavesFromCurrentBests();
320 void buildNewAlternativesFromLeaves(SpRMAlternativeSolution currentAlternative);
322 double getTentativeAlternativeProbabilityValue(std::set<SpMobileObject, orderedByBestCoherenceOperator>::iterator *mobileIterators);
324 SpRMAlternativeSolution getAlternativeFromNodeIfValid(SpBestAlternativesNode node);
326 bool equalMobiles(SpRMAlternativeSolution alt1, SpRMAlternativeSolution alt2);
328 bool sameUsed(SpMobileObject m1, SpMobileObject m2);
330 void filterEquallyConvergedMobiles();
332 bool highCoverage(SpMobileObject m1, SpMobileObject m2);
334 void filterRepeatedAlternatives();
336 bool acceptableInformationForNewMobile(SpMobileObject newMobile, SpMobileObject oldMobile);
338 SpMobileObject setSpecialCaseMobile(DetectionProblemType dp_type, SpMobileObject currentObject,
Blob *blobToAdd);
340 SpMobileObject generateAndValidateNewMobile(SpMobileObject currentMobile,
Blob *blobToTest);
342 void generateBestPossiblePathsForMobiles(SpRMAlternativeSolution alternative);
344 void generateMobilePathFromInitialBlob(SpMobileObject mobile,
Blob *initialBlob,
int numUsed,
bool *usedBlobs,
double *blobSupport,
Rectangle<int> *mobileBBox);
346 void generateAlternativesForMobilePathFromInitialBlob(
int length,
int position,
int value,
int *alternativesCombo,
int blobsToMergeNumber,
int *blobsToMerge,
347 SpMobileObject mobile,
Blob *initialBlob,
int numUsed,
bool *usedBlobs,
Rectangle<int> *mobileBBox);
349 bool equal2DDimensions(SpMobileObject m1, SpMobileObject m2);
351 bool blobCanBeIncludedForMerge(
int currentMergeLength,
int *mergedBlobIndexes,
int currentBlobIndex);
353 void cleanByEnsureUsedBlobs(SpRMAlternativeSolution newAlternative);
355 SpMobileObject checkSpecialCases(SpMobileObject currentMobile,
Blob *blobToTest);
359 typedef QSharedPointer<ReliabilityTracker> SpReliabilityTracker;
362 #endif // RELIABILITYTRACKER_H void computeInclusiveProbabilities(std::set< SpRMAlternativeSolution, alternativesOrderedByBestProbabilityOperator > *alternativeSolutions, int k, double sum, bool *mark, double *piT)
compute inclusive probabilities for a random linear elimination strategy
Definition: ReliabilityTracker.cpp:3335
void getMostLikelyMobileObjects(std::deque< SpMobileObject > &mobileObjectsOutput)
clears the current mobiles list and gives the processed list of most likely mobiles ...
Definition: ReliabilityTracker.cpp:31
Definition: ReliabilityMerge.h:65
void run(std::vector< Blob > &)
reliability tracker process main call
Definition: ReliabilityTracker.cpp:3356
double alternativeSolutionsProbabilityThreshold
alternative solutions probability threshold parameter for pre-elimination
Definition: ReliabilityTracker.h:33
Definition: calibration.h:51
Definition: ReliabilityClassification.h:37
Definition: ReliabilityTracker.h:14
Definition: ReliableMobileObjectList.h:11
Definition: TimeStamp.h:4
Definition: RMAlternativeSolution.h:24
An object of this class is instantiated at main code, and this object is used by every class to push ...
Definition: Datapool.h:39
ReliableMobileObjectList rMobilesList
pointer to the tracking results
Definition: ReliabilityTracker.h:74