MCPcopy Create free account
hub / github.com/Smorodov/Multitarget-tracker / CreateDistaceMatrix

Method CreateDistaceMatrix

src/Tracker/Ctracker.cpp:468–614  ·  view source on GitHub ↗

\brief CTracker::CreateDistaceMatrix \param regions \param costMatrix \param maxPossibleCost \param maxCost

Source from the content-addressed store, hash-verified

466/// \param maxCost
467///
468void CTracker::CreateDistaceMatrix(const regions_t& regions,
469 const std::vector<RegionEmbedding>& regionEmbeddings,
470 distMatrix_t& costMatrix,
471 track_t maxPossibleCost,
472 track_t& maxCost)
473{
474 const size_t colsTracks = m_tracks.size(); // Tracking objects
475 maxCost = 0;
476
477 for (size_t i = 0; i < colsTracks; ++i)
478 {
479 const auto& track = m_tracks[i];
480
481 // call kalman prediction fist
482 if (track->GetFilterGoal() == tracking::FilterGoal::FilterRect ||
483 track->GetFilterGoal() == tracking::FilterGoal::FilterRRect)
484 track->KalmanPredictRect();
485 else
486 track->KalmanPredictPoint();
487
488 constexpr bool DIST_LOGS = false;
489
490 // Calc distance between track and regions
491 for (size_t j = 0; j < regions.size(); ++j)
492 {
493 const auto& reg = regions[j];
494
495 auto dist = maxPossibleCost;
496 if (m_settings.CheckType(m_tracks[i]->LastRegion().m_type, reg.m_type))
497 {
498 dist = 0;
499 size_t ind = 0;
500 // Euclidean distance between centers
501 if (m_settings.m_distType[ind] > 0.0f && ind == tracking::DistCenters)
502 {
503#if 1
504 track_t ellipseDist = GetEllipseDist(*track, reg);
505 if (ellipseDist > 1)
506 dist += m_settings.m_distType[ind];
507 else
508 dist += ellipseDist * m_settings.m_distType[ind];
509#else
510 dist += m_settings.m_distType[ind] * track->CalcDistCenter(reg);
511#endif
512 if constexpr (DIST_LOGS)
513 {
514 std::cout << "DistCenters : " << m_settings.m_distType[ind] << ", dist = " << dist << "\n";
515 //std::cout << "dist = " << dist << ", ed = " << ellipseDist << ", reg.m_rrect.center = " << reg.m_rrect.center << ", predictedArea: center = " << predictedArea.center << ", size = " << predictedArea.size << ", angle = " << predictedArea.angle << "\n";
516 std::cout << "track id = " << m_tracks[i]->GetID().ID2Str() << " type = " << TypeConverter::Type2Str(m_tracks[i]->LastRegion().m_type) << " (" << m_tracks[i]->LastRegion().m_type << "), region id = " << j << ", type = " << TypeConverter::Type2Str(reg.m_type) << " (" << reg.m_type << ")" << std::endl;
517 }
518 }
519 ++ind;
520
521 // Euclidean distance between bounding rectangles
522 if (m_settings.m_distType[ind] > 0.0f && ind == tracking::DistRects)
523 {
524#if 1
525 track_t ellipseDist = GetEllipseDist(*track, reg);

Callers

nothing calls this directly

Calls 15

GetFilterGoalMethod · 0.80
KalmanPredictRectMethod · 0.80
KalmanPredictPointMethod · 0.80
CheckTypeMethod · 0.80
CalcDistCenterMethod · 0.80
ID2StrMethod · 0.80
GetIDMethod · 0.80
WidthDistMethod · 0.80
HeightDistMethod · 0.80
CalcDistRectMethod · 0.80
CalcDistJaccardMethod · 0.80
CalcDistHistMethod · 0.80

Tested by

no test coverage detected