6 #include "src/ReliabilityMerge.h" 7 #include "RMMHypothesisSetList.h" 9 #include "src/TimeStamp.h" 10 #include "src/calibration.h" 11 #include "src/sharedTrackingClasses.h" 12 #include "src/groundtruth.h" 18 typedef QSharedPointer<bestHypothesesNode> SpBestHypothesesNode;
22 static int numVariables;
23 static int variablesSum;
24 static int *variablesNumFrames;
26 static std::set<SpRMMMobileObject, RMMorderedByBestCoherenceOperator>::iterator *newObjectsListEnds;
32 std::set<SpRMMMobileObject, RMMorderedByBestCoherenceOperator>::iterator *mobileIterators;
33 double *variableContribution;
39 void setNextHypothesisValue(
int index);
44 bool operator()(SpBestHypothesesNode altNode1, SpBestHypothesesNode altNode2);
70 QImage *m_pSegmentation;
71 bool activatePreMerge;
72 double maxObjectSpeed;
75 int m_MultiModelBufferSize;
76 double meanw, meanl, meanh;
84 int m_maximumGeneratedHypothesesPerMobile;
90 int m_maximumRetainedHypotheses;
103 int m_maximumHypothesesPerMobile;
116 std::deque<IdBlobPair> biggestBlobForNewMobile;
117 std::set<long int> usedIdsByHypothesis;
118 std::map< long int, std::set<SpRMMMobileObject, RMMorderedByBestCoherenceOperator> > mobileAlternativesMap;
119 std::map< int, std::deque<long int> > mobileIdsUsingABlob;
127 std::map<long int, SpRMMMobileObject> mobilesOutList;
129 bool parametersInitialised;
131 QString m_MultiModelConfig;
134 static int m_hypothesisNumber;
135 static bool m_newOuts;
136 static int acceptedPixelError;
137 static int acceptedPixelDistance;
138 static double accepted3DFeatureError;
139 static double acceptedOrientationError;
140 static double m_highVisualSupportThreshold;
141 static int m_meanMillisecondsDifferenceBetweenFrames;
142 int lastMilliSecondsDifference;
145 double CoherenceReliabilityThreshold;
146 double CoherenceProbabilityThreshold;
148 double IgnoreByDimensionalCoherenceThreshold;
149 double IgnoreByVelocityCoherenceThreshold;
151 double ImportanceRateForBestMobileHypothesisProbability;
153 double m_mobile2DCoverageRateToConsiderEqual;
155 bool m_internalOutputActivated;
156 bool m_reducedOutputActivated;
158 double m_lowVisualSupportThreshold;
159 double m_blobCompletellySupportedThreshold;
161 double m_InvolvedVisualEvidenceMultiplyingFactor;
162 int m_InvolvedVisualEvidenceSumFactor;
163 double m_InvolvedVisualEvidenceMinIntersectionRatio;
166 QString m_objectLogRootName;
167 QString m_objectLogModelName;
168 bool m_logModelFound;
170 std::map<unsigned long, QString> logFileNames;
173 int m_kalmanMaxPixelError;
175 int *g_intersectionAreas;
179 int *involvedHypothesisSetsCounter;
180 bool **initialMergeMap;
182 bool initialPreparation;
184 bool *checkedMobilePairValidity, *validMobilePair;
188 unsigned long mobile_id_counter;
189 unsigned long hset_id_counter;
190 int currentFrameNumber;
191 unsigned long currentTimeMilliSeconds;
195 int g_inserted_for_hypothesis, g_NumCurrentlyLost;
196 SpRMMHypothesis g_baseHypothesis;
198 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> g_newHypotheses;
199 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> g_completeHypotheses;
200 std::deque<Blob *> g_includedBlobsInNewMobiles;
201 std::deque<Blob *> g_allocatedBlobs;
202 double g_bestGlobalP;
203 int g_numberOfNewMobiles, g_NumLocallyAddedHypotheses, *g_numberOfNewMobileVersions, *g_mobileVersionIndex, g_totalNumberOfMobileVersions;
204 std::set<SpRMMMobileObject, RMMorderedByBestCoherenceOperator>::iterator *g_mobileIterators, *g_setBegins;
205 std::set<SpBestHypothesesNode, orderedByBestHypothesisProbabilityCooperationOperator> g_leaves;
207 std::map<long int, std::set<SpRMMMobileObject, RMMorderedByBestCoherenceOperator> > *g_newObjectsList;
208 double *g_variableContribution;
210 double *distanceBetweenBlobs;
212 bool m_activatePauseOnLost, m_pauseOnLost;
213 bool m_activatePauseOnNew, m_pauseOnNew;
216 std::set<unsigned long> chosen_object_trajectories;
217 bool m_logTrajectories;
218 bool m_logTrajectoriesById;
219 QString m_logTrajectoryFileName;
220 std::map<unsigned long, simplifiedObject> simplifiedObjects;
226 void writeObjectTrajectories();
229 void resetPauseCriterias();
231 void activatePause();
234 void setDefaultMultiModelTemplate();
237 void setBufferSize();
238 void setBufferSize(
int &max, std::vector<SpReliabilitySingleModelInterface> &models);
240 QString initObjectLog(
long object_id);
241 void writeObjectLog();
243 void setRMMMobileObjectTemplates();
245 bool setParameters(QDomNode& config);
246 bool processModelParameters(QString& filename);
254 bool initialPrepareRun();
258 void initStaticMobileObject();
265 void getMostLikelyMobileObjects(std::deque<SpRMMMobileObject> &mobileObjectsOutput);
267 void preMerge(std::vector<Blob>&);
271 void eliminateUnlikelyMobiles();
278 void run(std::vector<Blob>&);
280 void followExistingMobiles();
282 void setInvolvedBlobs();
284 void createMobilePossibilities();
286 void mergeUsedHypothesisSets();
288 void mergeConflictingHypothesisSets(SpRMMHypothesisSet first, SpRMMHypothesisSet second);
290 void insertNewMobiles(std::deque<SpRMMHypothesisSet> &newHSets);
291 void insertNewMobiles(SpRMMHypothesis hypothesis, std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &newHypotheses);
293 void setBlobsVector(std::vector<Blob>&);
295 void freeBlobsVector();
297 void presetBlobsVectorAndInitialMergeTable(std::vector<Blob>&);
299 void freeBlobsVectorAndInitialMergeTable();
302 int setGroups(
int elementsVector[],
bool **relations,
int elementsNumber,
int *elementsToAnalyzeVector);
304 void setGroup(
int elementsVector[],
bool **relations,
int elementsNumber,
int groupId,
int startPoint,
int referencePoint,
int *elementsToAnalyzeVector);
307 int setNewGroups(
int elementsVector[],
int elementsNumber, std::vector<BoundingBox> &elementsToAnalyzeVector);
309 void setNewGroup(
int groupsVector[],
int elementsNumber,
int groupId,
int startPoint,
int referencePoint, std::vector<BoundingBox> &elementsToAnalyzeVector);
313 void generateNewMobiles(
int bboxNumberToAnalyze, std::vector<BoundingBox> &bboxesToAnalyze,
int groupsNumber,
int *blobGroupVector,
314 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &new_hyps);
315 void generateNewMobiles(
int bboxNumberToAnalyze, std::vector<BoundingBox> &bboxesToAnalyze,
int groupsNumber,
int *blobGroupVector,
316 std::deque<SpRMMHypothesisSet> &newHSets);
318 void generateHypothesesForEvidences(std::vector<BoundingBox> &bboxesToMerge,
int bboxesToMergeNumber,
319 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &new_hyps);
321 void recursiveComboGenerator(
int position,
int value,
int *hypothesesCombo, std::vector<BoundingBox> &bboxesToMerge,
int bboxesToMergeNumber,
322 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &new_hyps);
324 bool validBboxMergeConfiguration(
int mergeGroupNumber,
int mergeLength,
int bboxesToMergeNumber, std::vector<BoundingBox> &bboxesToMerge,
int *hypothesesCombo);
326 void processMergeVector(
int *hypothesesCombo, std::vector<BoundingBox> &bboxesToMerge,
int bboxesToMergeNumber,
327 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &new_hyps);
329 void checkConnectivity(
bool groupVector[],
int elementsNumber,
int referencePoint,
int *elementsToAnalyzeVector, std::vector<BoundingBox> &bboxesToMerge);
331 void insertNewMergeSolution(
BoundingBox mergedBboxes[],
int finalBboxesNumber, std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &new_hyps);
333 void setCurrentTimeAndFrame();
335 void getMergeConnections(
bool *listToUpdate,
int startingBlobIndex);
337 void getRecursiveMergeConnections(
bool *mergeList,
int blobIndex);
340 void orderAscending(
int *array,
int top,
int bottom);
341 int getMiddle(
int *array,
int top,
int bottom);
343 void filterUnseenMobiles();
345 void separateReliableHypotheses();
347 void determineInvolvedBlobsForMobileObject(SpRMMMobileObject mobile);
349 bool combinationAlreadyIncluded(
BoundingBox mergedBboxes[],
int bboxNumberForHypothesis);
353 bool checkDataPackDifference(SpReliabilitySingleModelInterface m1, SpReliabilitySingleModelInterface m2);
355 void getNewHypothesesFromBoundingBox(
BoundingBox &bbox, std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &newHypotheses);
356 void getHypothesesForExistingMobile(SpRMMMobileObject mobile,
BoundingBox &bbox, DetectionProblemType dtype, std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &newHypotheses);
357 void getNewHypothesesFromMobile(SpRMMMobileObject mobile, std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &newHypotheses);
358 void setInitialHypothesisSet(SpRMMMobileObject mobile, std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &newHypotheses);
359 ModelInstanceGeneralPack *iterateMultiModel(
int modelIndex, SpRMMMobileObject mobile, std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &hypotheses);
360 void generateNewHypotheses(SpRMMMobileObject mobile, std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &hypotheses);
362 void regenHypotheses(std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &new_hypotheses,
363 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> hyps[],
364 SpRMMMobileObject mobiles[],
int dsize);
365 void regenHypotheses(std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &new_hypotheses,
366 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> hyps[],
int dsize);
368 ModelInstanceGeneralPack *combineHypotheses(std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &new_hypotheses,
369 int modelIndex, SpRMMMobileObject mobile,
int dsize,
370 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> hyps[],
372 void checkRepeatedObject(std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &hyps, SpRMMMobileObject m, std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &new_hyps);
374 bool equalHypotheses(
unsigned long current_mobile_id, SpRMMHypothesis h1, SpRMMHypothesis h2);
375 bool equalHypotheses(SpRMMHypothesis h1, SpRMMHypothesis h2);
378 void genROIFromFg(cv::Mat &image_roi,
BoundingBox &roi);
380 BoundingBox getMergedBoundingBox(
int *mergeSequence,
int sequenceLength, std::vector<BoundingBox> &bboxesToMerge);
382 double areaOfIntersection(SpRMMMobileObject m1, SpRMMMobileObject m2);
384 int getPairIndex(
int mindex,
int vindex);
386 bool mobilePairValidityChecked(
int index1,
int index2);
388 bool mobilePairIsValid(
int index1,
int index2);
391 bool checkMobilePairValidity(SpRMMMobileObject m1,
int mindex1,
int vindex1, SpRMMMobileObject m2,
int mindex2,
int vindex2);
393 bool setPairValidityAndGo(
int index1,
int index2,
bool ret_value);
395 bool blobAlreadyIncludedInNewMobilesSet(
Blob *blob);
397 bool equalMobiles(SpRMMHypothesis alt1, SpRMMHypothesis alt2);
398 bool equalMobiles(SpRMMMobileObject m1, SpRMMMobileObject m2);
400 bool sameUsed(SpRMMMobileObject m1, SpRMMMobileObject m2);
402 void filterContainedStartingMobiles();
404 void filterEquallyConvergedMobiles();
406 bool highCoverage(SpRMMMobileObject m1, SpRMMMobileObject m2);
408 void filterRepeatedHypotheses();
410 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> generateBestPossiblePathsForMobiles(SpRMMHypothesis hypothesis);
412 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> generateHypothesesFromInitialBlob(
413 SpRMMMobileObject currentMobile, std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> newHypotheses,
414 Blob *initialBlob,
int numUsed,
bool *usedBlobs,
double *blobSupport,
Rectangle<int> &mobileBBox);
416 void generateMobilePathFromInitialBlob(SpRMMMobileObject mobile,
Blob *initialBlob,
int numUsed,
bool *usedBlobs,
double *blobSupport,
417 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &newHypotheses);
419 void addNewHypotheses(
unsigned long current_mobile_id,
420 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> ¤t_hypotheses,
421 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &new_hypotheses);
422 void addNewHypotheses(std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> ¤t_hypotheses,
423 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &new_hypotheses);
425 void generateHypothesesForMobilePathFromInitialBlob(
int length,
int position,
int value,
int *hypothesesCombo,
426 int blobsToMergeNumber,
int *blobsToMerge, SpRMMMobileObject mobile,
427 Blob *initialBlob,
int numUsed,
bool *usedBlobs,
428 std::set<SpRMMHypothesis, hypothesesOrderedByBestProbabilityOperator> &newHypotheses);
430 bool blobCanBeIncludedForMerge(
int currentMergeLength,
int *mergedBlobIndexes,
int currentBlobIndex);
435 typedef QSharedPointer<RMMTracker> SpRMMTracker;
438 #endif // RMMTRACKER_H int maximumMobilePaths
The maximum number of retained generated mobile paths.
Definition: RMMTracker.h:96
QString eliminationStrategy
The elimination strategy to use : worst probability elimination s., random linear elimination s...
Definition: RMMTracker.h:110
Definition: RMMTracker.h:20
Definition: RMMTracker.h:60
Definition: ReliabilityMerge.h:65
Definition: RMMTracker.h:43
Definition: calibration.h:51
Definition: reliabilitysinglemodelinterface.h:27
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
double hypothesesProbabilityThreshold
hypotheses probability threshold parameter for pre-elimination
Definition: RMMTracker.h:81
Definition: reliabilitymultimodel.h:24
Definition: RMMHypothesisSetList.h:11