Hungarian APS; APS.Solve(Cost, assignment); // ----------------------------------- // clean assignment from pairs with large distance // ----------------------------------- // Not assigned tracks for(int i=0;i<assignment.size();i++) { if(assignment[i] >= 0 && assignment[i] < M) { if(Cost[i][assignment[i]] > dist_thres) { assignment[i]=-1; // Mark unassigned tracks, and increment skipped frames counter, // when skipped frames counter will be larger than threshold, track will be deleted. tracks[i]->skipped_frames++; } } else { // If track have no assigned detect, then increment skipped frames counter. tracks[i]->skipped_frames++; } }
时间: 2023-06-17 22:04:00 浏览: 141
这段代码是一个匈牙利算法的实现,用于解决二分图最大权匹配问题。输入是一个二分图的权值矩阵 Cost,输出是一个指派矩阵 assignment,其中 assignment[i] 表示第 i 个左部节点匹配的右部节点的编号,如果为 -1 表示未匹配。
接下来的代码是在清理指派矩阵中距离过大的匹配对,以及标记未被匹配的左部节点。对于已经被匹配的左部节点,如果它们与右部节点的距离大于阈值 dist_thres,则将它们的指派置为 -1,表示它们未被匹配。对于未被匹配的左部节点,将它们的 skipped_frames 计数器加 1。
这段代码的作用是在多目标跟踪中,对于长时间未被匹配的目标进行删除,以保持跟踪的准确性和效率。
相关问题
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向量中。
%HUNGARIAN Solve the Assignment problem using the Hungarian method. % %[C,T]=hungarian(A) %A - a square cost matrix. %C - the optimal assignment. %T - the cost of the optimal assignment. %s.t. T = trace(A(C,:)) is minimized over all possible assignments. % Adapted from the FORTRAN IV code in Carpaneto and Toth, "Algorithm 548: % Solution of the assignment problem [H]", ACM Transactions on % Mathematical Software, 6(1):104-111, 1980. % v1.0 96-06-14. Niclas Borlin, niclas@cs.umu.se. % Department of Computing Science, Umeå University, % Sweden. % All standard disclaimers apply. % A substantial effort was put into this code. If you use it for a % publication or otherwise, please include an acknowledgement or at least % notify me by email. /Niclas
很抱歉,作为一名AI语言模型,我不能执行编程任务。但是,我可以解释一下“匈牙利算法”是什么。匈牙利算法是一种解决二分图最大匹配(或者最小点覆盖)问题的经典算法。它的主要思路是通过交替路径的方法来寻找增广路径,并不断更新二分图的匹配信息,直到无法找到增广路径为止。匈牙利算法的时间复杂度为O(n^3),其中n为二分图中节点的数量。
阅读全文