for(int i=0;i<tracks.size();i++) { if(tracks[i]->skipped_frames > maximum_allowed_skipped_frames) { delete tracks[i]; tracks.erase(tracks.begin()+i); assignment.erase(assignment.begin()+i); i--; } }

时间: 2023-06-17 07:03:57 浏览: 40
这是一段 C++ 代码,它的作用是删除一些跟踪轨迹。具体来说,它遍历了一个名为 tracks 的向量,这个向量中存储了跟踪器对象的指针。对于每个指针,它检查 skipped_frames 属性是否超过了最大允许的跳帧数,如果是,则删除该指针所指向的对象,并且从 tracks 向量和 assignment 向量中删除相应元素。注意,这里使用了 erase 函数来删除向量中的元素,这会导致后面的元素往前移动,因此需要将索引 i 减一来避免跳过某些元素。
相关问题

CTracker::~CTracker(void) { for(int i=0;i<tracks.size();i++) { delete tracks[i]; } tracks.clear(); }

### 回答1: 这是一个C++类的析构函数,用于销毁对象时清理内存。它的作用是删除 `tracks` 容器中存储的所有指针,并清空容器。这里假设 `tracks` 是一个容器,存储了指向 `Track` 对象的指针。在循环中,通过 `delete` 关键字释放 `tracks[i]` 指向的内存,然后将 `tracks[i]` 指针从容器中移除。最后调用 `tracks.clear()` 清空容器。 需要注意的是,如果 `Track` 对象被其他对象或指针引用,那么在调用析构函数时,只会释放 `Track` 对象的内存,而不会释放其他指针指向的内存。因此,在使用指针时需要注意内存管理,避免出现内存泄漏等问题。 ### 回答2: 这段代码是一个C++类CTracker的析构函数。析构函数的主要作用是在对象销毁时释放掉对象的资源,防止内存泄漏。 在这段析构函数中,首先使用了一个for循环来遍历tracks这个vector容器。循环变量i从0开始,逐个遍历tracks中的元素。在每次循环中,使用delete关键字释放掉tracks[i]指向的内存空间。这里假设tracks[i]是一个指向某个对象的指针,使用delete操作可以释放掉这个指针指向的对象所占用的内存空间。 在循环结束后,使用clear()方法清空了tracks这个vector容器。这是为了避免在程序运行结束后,tracks容器具有无效指针的情况。同时,也确保了在CTracker对象销毁后,没有任何指针指向已释放的内存,从而避免了悬空指针问题。 总结一下,这段析构函数的主要作用是释放tracks容器中每个指针所指向的对象的内存空间,并清空tracks容器。这样,在CTracker对象销毁的时候,保证了所有资源的正确释放。 ### 回答3: CTracker::~CTracker(void) { for(int i=0;i<tracks.size();i++) { delete tracks[i]; } tracks.clear(); } 以上是C++中的析构函数的定义。析构函数是在对象被销毁的时候自动调用的函数,用于释放对象占用的资源。在这段代码中,析构函数的作用是释放CTracker对象中的tracks数组中每个元素所占用的内存空间,并清空tracks数组。 首先,析构函数使用了for循环遍历tracks数组,从0到tracks.size() - 1的索引依次访问数组元素。 接着,对于每个tracks数组中的元素,通过delete关键字释放其所占用的内存空间。delete是用于释放通过new关键字动态分配的内存空间的操作符。 最后,通过调用tracks.clear()函数清空tracks数组。clear()函数是用于清空数组的所有元素,但不释放内存空间。 总结起来,这段代码中的析构函数用于释放CTracker对象中tracks数组中每个元素的内存空间,并清空tracks数组。这样可以防止内存泄漏,确保在CTracker对象销毁时,其占用的内存资源得到有效的释放。

int N=tracks.size(); // the number of tracks int M=detections.size(); // the number of points detected // Matrix distance from track N-th to point detected M-th vector< vector<double> > Cost(N,vector<double>(M)); vector<int> assignment; // matrix used to determine N-th track will be join with point detected M-th based on Hungarian algorithm // matrix distance double dist; for(int i=0;i<tracks.size();i++) { for(int j=0;j<detections.size();j++) { Point2d diff=(tracks[i]->prediction-detections[j]); //euclid distance dist=sqrtf(diff.x*diff.x+diff.y*diff.y); Cost[i][j]=dist; } }

这段代码实现了一个轨迹跟踪算法中的匈牙利算法部分,用于将已有轨迹和新检测到的点匹配。首先,得到了已有轨迹的数量N和新检测到的点的数量M。然后,创建了一个二维的Cost矩阵,用于存储从第i个轨迹到第j个点的距离。接着,遍历所有轨迹和所有检测到的点,计算它们之间的欧几里得距离,将其存储在Cost矩阵中。最后,通过匈牙利算法,将每一个轨迹与最近的点进行匹配,并将匹配结果存储在assignment向量中。

相关推荐

void Tracker::pruning(Detection &selected_detections, std::vector<int> &final_select, std::vector<track_ptr> &tacks_in) { // TODO const uint &TrackSize = tacks_in.size(); const uint &detSize = selected_detections.size(); final_select.resize(detSize); cv::Mat assigmentsBin = cv::Mat::zeros(cv::Size(detSize, TrackSize), CV_32SC1); cv::Mat costMat = cv::Mat(cv::Size(detSize, TrackSize), CV_32FC1); // cosmatrix (cols rows) std::vector<int> assignments; std::vector<float> costs(detSize * TrackSize); for (uint i = 0; i < TrackSize; ++i) { for (uint j = 0; j < detSize; ++j) { costs.at(i + j * TrackSize) = euclideanDist(selected_detections[j].position, tracks_[i]->GetState()); costMat.at<float>(i, j) = costs.at(i + j * TrackSize); } } // std::cout<<"######## pruning costMat ############### \n"<<costMat<<" \n"<<std::endl; AssignmentProblemSolver APS; // 匈牙利算法 APS.Solve(costs, TrackSize, detSize, assignments, AssignmentProblemSolver::optimal); const uint &assSize = assignments.size(); // 这个的大小应该是检测结果的大小,里边对应的是目标的编号 for (uint i = 0; i < assSize; ++i) { if (assignments[i] != -1 && costMat.at<float>(i, assignments[i]) < 0.8) { assigmentsBin.at<int>(i, assignments[i]) = 1; } } const uint &rows = assigmentsBin.rows; const uint &cols = assigmentsBin.cols; std::vector<bool> choosen(detSize, false); std::vector<bool> trackchoosen(TrackSize, false); for (uint i = 0; i < rows; ++i) { for (uint j = 0; j < cols; ++j) { if (assigmentsBin.at<int>(i, j)) { final_select[j] = tacks_in[i]->GetId(); trackchoosen[i] = true; tracks_[i]->UpdateBox(selected_detections[j]); tracks_[i]->UpdateMeasure(selected_detections[j].position(0), selected_detections[j].position(1)); choosen[j] = true; } } } for (int i = 0; i < choosen.size(); ++i) { if (!choosen[i]) { not_associated_.push_back(selected_detections[i]); } } for (int i = 0; i < trackchoosen.size(); ++i) { if (!trackchoosen[i]) { tracks_[i]->MarkMissed(); } } // std::cout<<"######## pruning not asso ###############"<<not_associated_.size()<<std::endl; }

最新推荐

recommend-type

基于matlab实现人工免疫算法的解决TSP问题的方法

基于matlab实现人工免疫算法的解决TSP问题的方法,体现了免疫算法在进化计算过程中的抗原学习、记忆机制、浓度调节机制以及多样性抗体保持策略等优良特性.rar
recommend-type

麦肯锡图表绘制培训.pptx

麦肯锡图表绘制培训.pptx
recommend-type

Java_Android的自由轻量级流媒体前端.zip

Java_Android的自由轻量级流媒体前端
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】增量式PID的simulink仿真实现

# 2.1 Simulink仿真环境简介 Simulink是MATLAB中用于建模、仿真和分析动态系统的图形化环境。它提供了一个直观的用户界面,允许用户使用块和连接线来创建系统模型。Simulink模型由以下元素组成: - **子系统:**将复杂系统分解成更小的、可管理的模块。 - **块:**代表系统中的组件,如传感器、执行器和控制器。 - **连接线:**表示信号在块之间的流动。 Simulink仿真环境提供了广泛的块库,涵盖了各种工程学科,包括控制系统、电子和机械工程。它还支持用户自定义块的创建,以满足特定仿真需求。 # 2. Simulink仿真环境的搭建和建模 ### 2.
recommend-type

训练集和测试集的准确率都99%,但是预测效果不好

即使训练集和测试集的准确率都很高,但是在实际的预测中表现不佳,可能会有以下几个原因: 1. 数据质量问题:模型训练和测试的数据可能存在问题,比如数据标签错误、数据集采样不均衡、数据集中存在异常值等问题,这些问题可能会导致模型在实际预测中表现不佳。 2. 特征工程问题:模型的特征工程可能存在问题,导致模型无法很好地捕捉数据的特征,从而影响预测效果。 3. 模型选择问题:模型的选择可能不合适,比如选择的模型太简单,无法很好地拟合数据,或者选择的模型太复杂,导致过拟合等问题。 4. 超参数调整问题:模型的超参数可能没有调整到最佳状态,需要进行调整。 针对以上可能的原因,可以采取相应的措施进
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

【实战演练】MATLAB simulink船舶动力定位模拟器

# 1. MATLAB Simulink 简介** MATLAB Simulink 是 MathWorks 公司开发的一款图形化建模和仿真软件,广泛应用于工程、科学和教育领域。它提供了丰富的模块库和仿真环境,使工程师能够快速构建和仿真复杂系统。 Simulink 的核心概念是基于块状图建模,其中每个模块代表一个特定的功能或组件。用户可以通过拖放模块并连接它们来创建系统模型。Simulink 提供了广泛的模块库,涵盖了信号处理、控制系统、动力学和通信等领域。 此外,Simulink 还支持自定义模块开发,允许用户创建自己的模块来扩展其功能。这使得 Simulink 成为一个高度灵活的仿真平