Skip to content

Commit 902e373

Browse files
committed
Tracking with types: don't assign person to the bicycle!
1 parent dc0fa1a commit 902e373

3 files changed

Lines changed: 16 additions & 4 deletions

File tree

Tracker/Ctracker.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,16 @@ void CTracker::Update(
9292
// -----------------------------------
9393
// Треки уже есть, составим матрицу расстояний
9494
// -----------------------------------
95-
track_t maxCost = 0;
95+
const track_t maxPossibleCost = grayFrame.cols * grayFrame.rows;
96+
track_t maxCost = 0;
9697
switch (m_distType)
9798
{
9899
case tracking::DistCenters:
99100
for (size_t i = 0; i < tracks.size(); i++)
100101
{
101102
for (size_t j = 0; j < regions.size(); j++)
102103
{
103-
auto dist = tracks[i]->CalcDist((regions[j].m_rect.tl() + regions[j].m_rect.br()) / 2);
104+
auto dist = tracks[i]->CheckType(regions[j].m_type) ? tracks[i]->CalcDist((regions[j].m_rect.tl() + regions[j].m_rect.br()) / 2) : maxPossibleCost;
104105
Cost[i + j * N] = dist;
105106
if (dist > maxCost)
106107
{
@@ -115,7 +116,7 @@ void CTracker::Update(
115116
{
116117
for (size_t j = 0; j < regions.size(); j++)
117118
{
118-
auto dist = tracks[i]->CalcDist(regions[j].m_rect);
119+
auto dist = tracks[i]->CheckType(regions[j].m_type) ? tracks[i]->CalcDist(regions[j].m_rect) : maxPossibleCost;
119120
Cost[i + j * N] = dist;
120121
if (dist > maxCost)
121122
{
@@ -130,7 +131,7 @@ void CTracker::Update(
130131
{
131132
for (size_t j = 0; j < regions.size(); j++)
132133
{
133-
auto dist = tracks[i]->CalcDistJaccard(regions[j].m_rect);
134+
auto dist = tracks[i]->CheckType(regions[j].m_type) ? tracks[i]->CalcDistJaccard(regions[j].m_rect) : 1;
134135
Cost[i + j * N] = dist;
135136
if (dist > maxCost)
136137
{

Tracker/track.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,16 @@ track_t CTrack::CalcDistJaccard(const cv::Rect& r) const
8585
return 1 - intArea / unionArea;
8686
}
8787

88+
///
89+
/// \brief CTrack::CheckType
90+
/// \param type
91+
/// \return
92+
///
93+
bool CTrack::CheckType(const std::string& type) const
94+
{
95+
return m_lastRegion.m_type.empty() || type.empty() || (m_lastRegion.m_type == type);
96+
}
97+
8898
///
8999
/// \brief Update
90100
/// \param pt

Tracker/track.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ class CTrack
177177
track_t CalcDist(const Point_t& pt) const;
178178
track_t CalcDist(const cv::Rect& r) const;
179179
track_t CalcDistJaccard(const cv::Rect& r) const;
180+
bool CheckType(const std::string& type) const;
180181

181182
void Update(const CRegion& region, bool dataCorrect, size_t max_trace_length, cv::UMat prevFrame, cv::UMat currFrame);
182183

0 commit comments

Comments
 (0)