\brief CTracker::CreateDistaceMatrix \param regions \param costMatrix \param maxPossibleCost \param maxCost
| 466 | /// \param maxCost |
| 467 | /// |
| 468 | void 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); |
nothing calls this directly
no test coverage detected