一、前言
此示例演示如何对来自固定摄像机的视频中的移动对象执行自动检测和基于运动的跟踪。
二、介绍
移动物体检测和基于运动的跟踪是许多计算机视觉应用的重要组成部分,包括活动识别、交通监控和汽车安全。基于运动的对象跟踪问题可以分为两部分:
检测每帧中的移动物体
关联一段时间内对应于同一对象的检测
运动物体的检测使用基于高斯混合模型的背景减法算法。形态学操作应用于生成的前景掩模以消除噪声。最后,斑点分析检测连接的像素组,这些像素组可能对应于移动对象。
检测与同一对象的关联仅基于运动。每条轨道的运动由卡尔曼滤波器估计。过滤器用于预测轨迹在每个帧中的位置,并确定将每个检测分配给每个轨迹的可能性。
轨道维护成为此示例的一个重要方面。在任何给定帧中,可以将某些检测分配给轨道,而其他检测和轨道可能保持未分配状态。分配的轨迹使用相应的检测进行更新。未分配的轨道标记为不可见。未分配的检测将开始新跟踪。
每个轨道都会记录连续帧数,其中它保持未分配状态。如果计数超过指定的阈值,该示例假定对象离开了视野,并删除了轨迹。
编辑切换为居中
添加图片注释,不超过 140 字(可选)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
三、创建系统对象
创建用于读取视频帧、检测前景对象和显示结果的系统对象。
四、初始化轨道
该函数创建一个轨道数组,其中每个轨道都是表示视频中移动对象的结构。该结构的目的是维护跟踪对象的状态。状态由用于检测以跟踪分配、跟踪终止和显示的信息组成。initializeTracks
该结构包含以下字段:
id:轨道的整数 ID
bbox:对象的当前边界框;用于显示
kalmanFilter:用于基于运动的跟踪的卡尔曼滤波器对象
age:自首次检测到轨道以来的帧数
totalVisibleCount:检测到轨道的帧总数(可见)
consecutiveInvisibleCount:未检测到轨道的连续帧数(不可见)。
嘈杂的检测往往会导致短暂的磁道。因此,该示例仅在跟踪了一定数量的帧后显示对象。当超过指定的阈值时,会发生这种情况。
当连续几帧没有检测与轨道关联时,该示例假定对象已离开视野并删除轨道。当超过指定的阈值时,会发生这种情况。如果跟踪了很短的时间,并且大多数帧都标记为不可见,则轨道也可能作为噪声被删除。
五、检测对象
该函数返回检测到的对象的质心和边界框。它还返回二进制掩码,该掩码的大小与输入帧相同。值为 1 的像素对应于前景,值为 0 的像素对应于背景。detectObjects
该功能使用前景检测器执行运动分割。然后,它对生成的二进制掩码执行形态学操作,以消除噪声像素并填充剩余斑点中的孔洞。
六、预测现有轨道的新位置
使用卡尔曼滤波器预测当前帧中每个轨迹的质心,并相应地更新其边界框。
七、将检测分配给轨道
将当前帧中的对象检测分配给现有轨道是通过最大限度地降低成本来完成的。成本定义为与轨迹对应的检测的负对数可能性。
该算法涉及两个步骤:
步骤 1:使用 System 对象™的方法计算将每个检测分配给每个轨道的成本。成本考虑了轨迹的预测质心与检测质心之间的欧氏距离。它还包括预测的置信度,该置信度由卡尔曼滤波器保持。结果存储在 MxN 矩阵中,其中 M 是磁道数,N 是检测数。
第 2 步:使用该函数求解由成本矩阵表示的分配问题。该函数采用成本矩阵和不向轨道分配任何检测的成本。
不将检测分配给磁道的成本值取决于 的方法返回的值范围。此值必须通过实验进行调整。将其设置得太低会增加创建新轨道的可能性,并可能导致轨道碎片化。将其设置得太高可能会导致单个轨道对应于一系列单独的移动对象。
该函数使用匈牙利算法的蒙克雷斯版本来计算最小化总成本的赋值。它返回一个 M x 2 矩阵,其中包含其两列中分配的跟踪和检测的相应索引。它还返回未分配的跟踪和检测的索引。
八、 更新分配的轨道
该函数使用相应的检测更新每个分配的轨道。它调用 来校正位置估计的方法。接下来,它存储新的边界框,并将轨道的年龄和可见总数增加 1。最后,该函数将不可见计数设置为 0。
九、更新未分配的轨道
将每个未分配的轨道标记为不可见,并将其年龄增加 1。
十、删除丢失的曲目
该函数删除连续帧太多不可见的轨道。它还会删除最近创建的轨道,这些轨道在总体上不可见太多帧。
十一、创建新曲目
从未分配的检测创建新轨道。假设任何未分配的检测都是新轨道的开始。在实践中,您可以使用其他提示来消除干扰检测,例如大小、位置或外观。
十二、显示跟踪结果
该函数为视频帧和前景掩码上的每个轨道绘制边界框和标签 ID。然后,它会在各自的视频播放器中显示帧和蒙版。
十三、总结
此示例创建了一个基于运动的系统,用于检测和跟踪多个移动对象。尝试使用其他视频,看看您是否能够检测和跟踪对象。尝试修改检测、分配和删除步骤的参数。
本例中的跟踪完全基于运动,假设所有对象都以恒定的速度沿直线移动。当物体的运动明显偏离此模型时,该示例可能会产生跟踪误差。请注意跟踪标记为#12的人时的错误,当他被树遮挡时。
通过使用更复杂的运动模型(例如恒定加速度)或为每个对象使用多个卡尔曼滤波器,可以降低跟踪误差的可能性。此外,还可以合并其他提示,以便随时间关联检测,例如大小、形状和颜色。
十四、程序
下载方式一: 基于matlab多运动目标跟踪监测资源-CSDN文库
下载方式二:基于matlab多运动目标跟踪监测算法实现