主要内容

assignmunkres

全球最近邻Munkres分配算法

描述

例子

(作业,unassignedrows,unassignedcolumns)= assignmunkres (costmatrix,costofnonassignment)返回一个表的作业使用Munkres算法的检测跟踪。Munkres算法获得最优解决全球最近邻(GNN)分配问题。一个最佳的解决方案的总成本最小化任务。

每个潜在的成本分配是包含在成本矩阵,costmatrix。每个矩阵的条目代表可能的作业的成本。矩阵行代表跟踪和列代表检测。所有可能的作业成本矩阵表示。成本越低,越有可能的任务。每条曲目最多可以分配给一个检测,每个检测最多只能被分配到一个轨道。如果行数大于列的数量,有些痕迹未赋值的。如果列的数量大于的行数,有些检测未赋值的。你可以设置一个条目costmatrix禁止作业。

costofnonassignment代表离开轨道的成本或检测未赋值的。更高的值增加每个现有的对象分配的可能性。

函数返回一个未赋值的列表,unassignedrows未赋值的检测的列表,unassignedcolumns

例子

全部折叠

使用assignMunkres分配三个检测两个跟踪。

从两个预测跟踪位置在x - y坐标。

跟踪= [1,1;2、2];

假设三个检测接收。至少一个检测不会被分配。

依据= [1.1,1.1;2.1、2.1;1.5,3);

构造一个矩阵通过定义成本分配成本的检测跟踪,它们之间的欧氏距离。设置non-assignment成本为0.2。

我=(,1)大小:1:1δ=侦破—跟踪(我:);costMatrix(我:=√sum(δ。^ 2,2));结束costofnonassignment = 0.2;

使用拍卖算法分配检测跟踪。

(作业、unassignedTracks unassignedDetections] =assignmunkres (costMatrix costofnonassignment);

显示任务。

disp(作业)
1 1 2 2

显示没有未赋值的跟踪。

disp (unassignedTracks)

显示未赋值的检测。

disp (unassignedDetections)
3

情节检测跟踪任务。

情节(跟踪(:1)跟踪(:,2),‘*’依据(:1),依据(:,2),“o”)举行xlim ([0, 4]) ylim([0, 4])传说(“跟踪”,“检测”)assignStr = strsplit (num2str(1:尺寸(作业,1)));文本(跟踪(作业(:1),1)+ 0.1,跟踪(作业(:1),2)- 0.1,assignStr);文本(相同功能(作业(:,2),1)+ 0.1,相同功能(作业(:,2),2)- 0.1,assignStr);文本(依据(unassignedDetections (:), 1) + 0.1,依据(unassignedDetections (:), 2) + 0.1,“未赋值的);

图包含一个坐标轴对象。坐标轴对象包含7线类型的对象,文本。这些对象代表跟踪检测。

跟踪检测作业:

  1. 检测1分配跟踪1。

  2. 检测2分配跟踪2。

  3. 检测3没有分配。

输入参数

全部折叠

成本矩阵,作为指定——- - - - - -N矩阵。的数量分配和跟踪吗N是检测的数量分配。成本矩阵中的每个条目包含的成本跟踪和检测任务。矩阵可能包含一个条目,表示禁止任务。成本矩阵不能一个稀疏矩阵。

数据类型:|

non-assignment成本,指定为一个标量。成本non-assignment代表离开轨道的成本或检测未赋值的。更高的值增加每个对象分配的可能性。不能设置为值

数据类型:|

输出参数

全部折叠

赋值的检测跟踪,返回一个整数值l2矩阵l作业的数量。矩阵的第一列包含指定跟踪指数和第二列包含指定的检测指标。

数据类型:uint32

未赋值的跟踪指数,返回为一个整数值P1列向量。

数据类型:uint32

未赋值的检测指标,返回为一个整数值1列向量。

数据类型:uint32

引用

[1]塞缪尔·s·布莱克曼Popoli, R。现代跟踪系统的设计与分析。Artech房子:诺伍德,MA。1999年。

扩展功能

C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。

介绍了R2018b