主要内容

assignDetectionsToTracks

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

描述

例子

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

作业unassignedTracksunassignedDetections) = assignDetectionsToTracks (costMatrixunassignedTrackCostunassignedDetectionCost分别指定未分配轨道和检测的成本。的unassignedTrackCost必须是一个标量值,或元向量,表示轨道数。为-element向量,每个元素表示不为该轨迹分配任何检测的代价。的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:size(predictions, 1) diff = detections - repmat(predictions(I,:),[size(detections,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(assignment,1) text(predictions(I,1),1)+0.1,...预测(作业(我,1),2)-0.1,num2str (i));文本(检测(作业(我,2),1)+ 0.1,...检测(作业(我,2),2)-0.1,num2str (i));结束i = 1:length(unassignddetections) text(detections(unassignddetections (i))+0.1,...检测(unassignedDetections (i), 2) + 0.1,“未赋值的);结束xlim ([0, 4]);ylim ([0, 4]);

图中包含一个坐标轴。轴包含7个对象的类型行,文本。这些物体代表着预测,探测。

输入参数

全部折叠

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

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

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

在内部,该函数用虚拟行和列填充成本矩阵,以考虑未分配的轨道和检测的可能性。填充的行表示未分配到任何轨道的检测。填充的列表示与任何检测无关的轨迹。要对行和列中的所有元素应用相同的值,请使用costOfNonAssignment输入。要更改不同检测或轨迹的值,请使用unassignedTrackCostunassignedDetectionCost输入。

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

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

在内部,该函数用虚拟行和列填充成本矩阵,以考虑未分配的轨道和检测的可能性。填充的行表示未分配到任何轨道的检测。填充的列表示与任何检测无关的轨迹。要更改不同检测或轨迹的值,请使用unassignedTrackCostunassignedDetectionCost输入。要对行和列中的所有元素应用相同的值,请使用costOfNonAssignment输入。

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

指定为标量值或标量值的未分配检测的代价N元向量,N表示检测次数。为N-元素向量,每个元素表示为该检测启动一个新轨道的成本。一个标量输入表示所有轨道未分配的相同代价。成本可能会根据你对每个探测和场景的了解有所不同。例如,如果检测出现在靠近图像边缘的地方,那么它更有可能是一个新目标。

在内部,该函数用虚拟行和列填充成本矩阵,以考虑未分配的轨道和检测的可能性。填充的行表示未分配到任何轨道的检测。填充的列表示与任何检测无关的轨迹。要更改不同检测或轨迹的值,请使用unassignedTrackCostunassignedDetectionCost输入。要对行和列中的所有元素应用相同的值,请使用costOfNonAssignment输入。

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

输出参数

全部折叠

索引对轨道和相应的检测。该值以an形式返回l-by-2矩阵的索引对,与l对的数量。第一列表示跟踪索引,第二列表示检测索引。

数据类型:uint32

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

数据类型:uint32

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

数据类型:uint32

参考文献

[1] Miller, Matt L., Harold S. Stone, Ingemar J. Cox,《优化Murty的排名分配方法》,航空航天和电子系统学报, 33(3), 1997。

[2] Munkres, James,《分配和运输问题的算法》工业和应用数学学会学报1957年3月,第5卷第1期。

扩展功能

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

介绍了R2012b