主要内容

assignDetectionsToTracks

为多目标跟踪分配检测跟踪

描述

例子

作业unassignedTracksunassignedDetections) = assignDetectionsToTracks (costMatrixcostOfNonAssignment在多目标跟踪的背景下,使用James Munkres的匈牙利分配算法的变体分配检测跟踪。它还确定哪些轨迹缺失,哪些检测应该开始新的轨迹。它返回已分配和未分配的轨道的索引,以及未分配的检测。的costMatrix必须是一个——- - - - - -N矩阵。在这个矩阵,表示轨道数,和N是检测的次数。的值表示分配的成本Nth检测到th轨道。成本越低,检测被分配到一个轨道的可能性就越大。的costOfNonAssignment标量输入表示未分配的跟踪或检测的成本。

作业unassignedTracksunassignedDetections) = assignDetectionsToTracks (costMatrixunassignedTrackCostunassignedDetectionCost分别指定未分配的轨道和检测的开销。的unassignedTrackCost必须是标量值,或者元向量,表示轨道数。为-element vector,每个元素表示不将任何检测分配到该轨道的成本。的unassignedDetectionCost必须是标量值或N元向量,N表示检测数。

例子

全部折叠

这个例子向您展示了如何为单个视频帧的轨迹分配检测。

设置当前帧中对象的预测位置。使用卡尔曼滤波系统对象获得预测。

预测=[1,1;2、2];

设置当前帧中检测到的对象的位置。对于本例,有2个轨道和3个新检测。因此,至少有一个检测结果是不匹配的,这可能表明有新的轨迹。

检测= (1.1,1.1,2.1,2.1,1.5,3];

预分配一个成本矩阵。

成本= 0(大小(预测,1),大小(检测,1));

计算与检测相匹配的每个预测的代价。这里的代价,被定义为预测和检测之间的欧氏距离。

I = 1:大小(预测,1)diff =检测- repmat(预测(I,:),[size(预测,1),1]);Cost (i,:) =√(sum(diff .^ 2,2));结束

将检测与预测联系起来。检测1应与轨道1匹配,检测2应与轨道2匹配。检测3应该不匹配。

(作业、unassignedTracks unassignedDetections] =...assignDetectionsToTracks(成本,0.2);图;图(预测(:1),预测(:,2),‘*’检测(:1),...检测(:,2),“罗”);持有;传奇(“预测”“检测”);I = 1:size(赋值,1)text(prediction(赋值(I,1),1)+0.1,...预测(作业(我,1),2)-0.1,num2str (i));文本(检测(作业(我,2),1)+ 0.1,...检测(作业(我,2),2)-0.1,num2str (i));结束i = 1:length(unassignneddetections) text(detections(unassignneddetections (i),1)+0.1,...检测(unassignedDetections (i), 2) + 0.1,“未赋值的);结束xlim ([0, 4]);ylim ([0, 4]);

图中包含一个axes对象。axis对象包含7个类型为line、text的对象。这些物体代表着预测和探测。

输入参数

全部折叠

将检测分配给一个轨道的开销,指定为——- - - - - -N矩阵,表示轨道数,和N是检测的次数。成本矩阵值必须是实数、非稀疏和数值。成本越低,检测被分配到一个轨道的可能性就越大。的值表示分配的成本Nth检测到th轨道。如果在探测和轨迹之间没有分配的可能性,则costMatrix输入设置为.在内部,这个函数用虚拟行和列填充成本矩阵,以解释未分配的轨道和检测的可能性。填充的行表示未分配给任何轨道的检测。填充的列表示与任何检测无关的轨迹。该函数将匈牙利赋值算法应用于填充矩阵。

数据类型:int8|uint8|int16|uint16|int32|uint32||

不将检测分配给任何轨道或将轨道分配给检测的成本。可以将此值指定为一个标量值,表示未分配的跟踪或检测的开销。未分配的检测可能成为新轨迹的开始。如果音轨未分配,则对象不会出现。越高costOfNonAssignment值,则每条轨迹被分配检测的可能性越高。

在内部,这个函数用虚拟行和列填充成本矩阵,以解释未分配的轨道和检测的可能性。填充的行表示未分配给任何轨道的检测。填充的列表示与任何检测无关的轨迹。属性的语法可将相同的值应用于行和列中的所有元素costOfNonAssignment输入。方法的语法可更改不同检测或跟踪的值unassignedTrackCost而且unassignedDetectionCost输入。

数据类型:int8|uint8|int16|uint16|int32|uint32||

未分配音轨的成本或可能性。可以将此值指定为标量值或元向量,表示轨道数。为-element vector,每个元素表示不将任何检测分配到该轨道的成本。一个标量输入表示为所有音轨取消分配的相同代价。成本可能取决于你对每个轨道和场景的了解。例如,如果一个对象即将离开视场,对应的未分配轨道的代价应该很低。

在内部,这个函数用虚拟行和列填充成本矩阵,以解释未分配的轨道和检测的可能性。填充的行表示未分配给任何轨道的检测。填充的列表示与任何检测无关的轨迹。方法的语法可更改不同检测或跟踪的值unassignedTrackCost而且unassignedDetectionCost输入。属性的语法可将相同的值应用于行和列中的所有元素costOfNonAssignment输入。

数据类型:int8|uint8|int16|uint16|int32|uint32||

未分配检测的代价,指定为标量值或N元向量,N表示检测数。为N-元素向量,每个元素表示为该检测开始一个新轨道的成本。一个标量输入表示为所有音轨取消分配的相同代价。费用可能取决于你对每次检测和现场的了解。例如,如果一个检测出现在图像的边缘附近,它更有可能是一个新的对象。

在内部,这个函数用虚拟行和列填充成本矩阵,以解释未分配的轨道和检测的可能性。填充的行表示未分配给任何轨道的检测。填充的列表示与任何检测无关的轨迹。方法的语法可更改不同检测或跟踪的值unassignedTrackCost而且unassignedDetectionCost输入。属性的语法可将相同的值应用于行和列中的所有元素costOfNonAssignment输入。

数据类型:int8|uint8|int16|uint16|int32|uint32||

输出参数

全部折叠

对轨迹和相应的检测进行索引。返回的值为l-by-2矩阵的索引对,与l对的数量。第一列表示轨迹索引,第二列表示检测索引。

数据类型:uint32

未分配的轨道,返回为P元向量。P表示未分配的轨道数。每个元素代表一个没有被分配检测的轨道。

数据类型:uint32

未分配的检测,返回为元向量,表示未分配的检测数。每个元素表示一个未分配给任何轨迹的检测。这些探测可以开始新的轨迹。

数据类型:uint32

参考文献

[1]米勒、马特·L.、哈罗德·s·斯通和英格玛·j·考克斯,《优化默蒂的排序分配方法》,航空航天和电子系统汇刊, 33(3), 1997。

[2] James Munkres,“分配和运输问题的算法”,工业与应用数学学会杂志1957年3月,第5卷第1期

扩展功能

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

版本历史

介绍了R2012b

Baidu
map