@@ -14,7 +14,7 @@ class CTracker final : public BaseTracker
1414 CTracker (CTracker&&) = delete ;
1515 CTracker& operator =(const CTracker&) = delete ;
1616 CTracker& operator =(CTracker&&) = delete ;
17-
17+
1818 ~CTracker (void ) = default ;
1919
2020 void Update (const regions_t & regions, cv::UMat currFrame, float fps) override ;
@@ -41,6 +41,8 @@ class CTracker final : public BaseTracker
4141 void CreateDistaceMatrix (const regions_t & regions, const std::vector<RegionEmbedding>& regionEmbeddings, distMatrix_t& costMatrix, track_t maxPossibleCost, track_t & maxCost);
4242 void UpdateTrackingState (const regions_t & regions, cv::UMat currFrame, float fps);
4343 void CalcEmbeddins (std::vector<RegionEmbedding>& regionEmbeddings, const regions_t & regions, cv::UMat currFrame) const ;
44+
45+ track_t GetEllipseDist (const CTrack& trackRef, const CRegion& reg);
4446};
4547// ----------------------------------------------------------------------
4648
@@ -396,26 +398,12 @@ void CTracker::CreateDistaceMatrix(const regions_t& regions,
396398 {
397399 const auto & track = m_tracks[i];
398400
399- // call kalman prediction fist
401+ // call kalman prediction fist
400402 if (track->GetFilterObjectSize ())
401403 track->KalmanPredictRect ();
402404 else
403405 track->KalmanPredictPoint ();
404406
405- // Calc predicted area for track
406- cv::Size_<track_t > minRadius;
407- if (m_settings.m_minAreaRadiusPix < 0 )
408- {
409- minRadius.width = m_settings.m_minAreaRadiusK * track->LastRegion ().m_rrect .size .width ;
410- minRadius.height = m_settings.m_minAreaRadiusK * track->LastRegion ().m_rrect .size .height ;
411- }
412- else
413- {
414- minRadius.width = m_settings.m_minAreaRadiusPix ;
415- minRadius.height = m_settings.m_minAreaRadiusPix ;
416- }
417- cv::RotatedRect predictedArea = track->CalcPredictionEllipse (minRadius);
418-
419407 // Calc distance between track and regions
420408 for (size_t j = 0 ; j < regions.size (); ++j)
421409 {
@@ -426,11 +414,12 @@ void CTracker::CreateDistaceMatrix(const regions_t& regions,
426414 {
427415 dist = 0 ;
428416 size_t ind = 0 ;
417+
429418 // Euclidean distance between centers
430419 if (m_settings.m_distType [ind] > 0 .0f && ind == tracking::DistCenters)
431420 {
432421#if 1
433- track_t ellipseDist = track-> IsInsideArea (reg. m_rrect . center , predictedArea );
422+ track_t ellipseDist = GetEllipseDist (*track, reg );
434423 if (ellipseDist > 1 )
435424 dist += m_settings.m_distType [ind];
436425 else
@@ -445,7 +434,7 @@ void CTracker::CreateDistaceMatrix(const regions_t& regions,
445434 if (m_settings.m_distType [ind] > 0 .0f && ind == tracking::DistRects)
446435 {
447436#if 1
448- track_t ellipseDist = track-> IsInsideArea (reg. m_rrect . center , predictedArea );
437+ track_t ellipseDist = GetEllipseDist (*track, reg );
449438 if (ellipseDist < 1 )
450439 {
451440 track_t dw = track->WidthDist (reg);
@@ -571,6 +560,33 @@ void CTracker::CalcEmbeddins(std::vector<RegionEmbedding>& regionEmbeddings, con
571560 }
572561}
573562
563+ // /
564+ // / \brief CTracker::GetEllipseDist
565+ // / \param trackRef
566+ // / \param reg
567+ // / \return
568+ // /
569+ track_t CTracker::GetEllipseDist (const CTrack& trackRef, const CRegion& reg)
570+ {
571+ cv::Size_<track_t > minRadius;
572+
573+ if (m_settings.m_minAreaRadiusPix < 0 )
574+ {
575+ minRadius.width = m_settings.m_minAreaRadiusK * trackRef.LastRegion ().m_rrect .size .width ;
576+ minRadius.height = m_settings.m_minAreaRadiusK * trackRef.LastRegion ().m_rrect .size .height ;
577+ }
578+ else
579+ {
580+ minRadius.width = m_settings.m_minAreaRadiusPix ;
581+ minRadius.height = m_settings.m_minAreaRadiusPix ;
582+ }
583+
584+ // Calc predicted area for track
585+ cv::RotatedRect predictedArea = trackRef.CalcPredictionEllipse (minRadius);
586+
587+ return trackRef.IsInsideArea (reg.m_rrect .center , predictedArea);
588+ }
589+
574590// /
575591// / BaseTracker::CreateTracker
576592// /
0 commit comments